Users transaction history
Flat ve grouped transaction history endpoint'leri
Users Transaction History Endpoint
Amaç
Bu endpoint, giriş yapmış kullanıcının kredi hareketlerini tek listede birleştirip global sıralı ve sayfalı döndürür.
- Endpoint:
GET /api/v1/users/me/transactions - Auth:
Bearer JWTzorunlu (Role.USER) - Varsayılan sıralama:
occurredAt desc
Request
URL
GET /api/v1/users/me/transactions
Header
Authorization: Bearer <JWT>
Query Parametreleri
| Parametre | Tip | Zorunlu | Varsayılan | Açıklama |
|---|---|---|---|---|
page | number | Hayır | 1 | Sayfa numarası (min: 1) |
limit | number | Hayır | 20 | Sayfa boyutu (min: 1, max: 100) |
types | string[] | Hayır | tümü | İşlem tipi filtresi (CSV veya tekrar eden query) |
statuses | string[] | Hayır | tümü | Durum filtresi (pending, completed, failed, refunded) |
direction | credit | debit | Hayır | tümü | İşlem yönü filtresi |
dateFrom | ISO datetime | Hayır | - | Başlangıç tarihi (inclusive) |
dateTo | ISO datetime | Hayır | - | Bitiş tarihi (inclusive) |
sort | asc | desc | Hayır | desc | occurredAt sıralama yönü |
types Enum Değerleri
credit_purchasestream_chargestream_revenuecredit_transfer_sentcredit_transfer_receivedstream_funding_contributionstream_funding_refundmini_crowd_funding_supportgift_spendbalance_lock_holdbalance_lock_refund
Kaynak Eşleme Özeti
| Source | Type | Direction | Status | Time |
|---|---|---|---|---|
credit_transaction | credit_purchase | credit | kayıttaki status | createdAt |
stream_billing (charge) | stream_charge | debit | kayıttaki status | createdAt |
stream_billing (distribution) | stream_revenue | credit | kayıttaki status | createdAt |
credit_transfer (sender) | credit_transfer_sent | debit | completed | createdAt |
credit_transfer (recipient) | credit_transfer_received | credit | completed | createdAt |
stream_funding | stream_funding_contribution | debit | completed | createdAt |
stream_funding refund satırı | stream_funding_refund | credit | refunded | refundedAt veya updatedAt |
mini_crowd_funding | mini_crowd_funding_support | debit | completed | createdAt |
gift | gift_spend | debit | completed | timestamp |
balance_lock | balance_lock_hold | debit | completed | createdAt |
balance_lock sentetik refund | balance_lock_refund | credit | refunded | updatedAt |
Örnek Kullanım
Basit çağrı
curl -X GET 'https://api.allminelive.com/api/v1/users/me/transactions?page=1&limit=20' \
-H 'Authorization: Bearer <JWT>'Gift + lock filtreli çağrı
curl -X GET 'https://api.allminelive.com/api/v1/users/me/transactions?types=gift_spend,balance_lock_hold,balance_lock_refund&statuses=completed,refunded&sort=desc' \
-H 'Authorization: Bearer <JWT>'Tekrarlayan query param formatı
curl -X GET 'https://api.allminelive.com/api/v1/users/me/transactions?types=stream_revenue&types=gift_spend&direction=credit' \
-H 'Authorization: Bearer <JWT>'Response Tasarımı
Response, global interceptor nedeniyle BaseResponseDto formatında döner ve data alanı PaginatedResponseDto<UserTransactionHistoryItemDto> içerir.
{
"isSuccess": true,
"statusCode": 200,
"data": {
"list": [
{
"id": "gift_spend:67b4c8ef81f4d8f7dcbb12ab",
"source": "gift",
"sourceRecordId": "67b4c8ef81f4d8f7dcbb12ab",
"type": "gift_spend",
"direction": "debit",
"amount": 9,
"status": "completed",
"occurredAt": "2026-02-25T10:30:00.000Z",
"description": "Gift spend",
"streamId": "67b4a2ef81f4d8f7dcbb0001",
"streamTitle": "Friday Night Stream",
"thumbnailUrl": "https://s.allminelive.com/live-streams/thumbnail-123.jpg",
"counterpartyUserId": null,
"counterpartyUsername": null,
"creditPackageId": null,
"storeType": null,
"role": null,
"revenuecatTransactionId": null,
"notes": "giftTypeId:67b4a2ef81f4d8f7dcbb9999",
"previousBalance": null,
"newBalance": null
}
],
"pagination": {
"currentPage": 1,
"totalPages": 3,
"totalItems": 51,
"itemsPerPage": 20,
"hasNextPage": true,
"hasPrevPage": false
}
},
"errors": [],
"timestamp": "2026-02-25T10:30:00.100Z"
}UserTransactionHistoryItemDto Alanları
id: Unified history item idsource:credit_transaction | stream_billing | credit_transfer | stream_funding | mini_crowd_funding | gift | balance_locksourceRecordId: Orijinal doküman idtype: Yukarıdaki enumdirection:credit | debitamount: Kredi miktarıstatus:pending | completed | failed | refundedoccurredAt: İşlem zamanıdescription: Kısa açıklamastreamId: İlgili stream idstreamTitle: Enrichment ile stream titlethumbnailUrl: Enrichment ile stream thumbnail URLcounterpartyUserId: Karşı kullanıcı id (varsa)counterpartyUsername: Enrichment ile karşı kullanıcı usernamecreditPackageId,storeType,role,revenuecatTransactionId,notes,previousBalance,newBalance: kaynağa bağlı opsiyonel alanlar
Grouped Response
Flat response kontratı değişmez. Live stream bazlı gruplama için ayrı endpointler kullanılır:
GET /api/v1/users/me/transactions/groupedGET /api/v1/users/admin/:id/transactions/grouped
Bu endpointler aynı query parametrelerini kullanır. Pagination group bazlıdır: totalItems filtreye uyan grouped entry sayısını, itemsPerPage istenen group/standalone entry limitini gösterir. Bir streamId tüm grouped sonuç setinde en fazla bir kez döner; o stream için filtreye uyan tüm transactionlar aynı stream_group.transactions içinde yer alır. Bu nedenle bir sayfada limit değerinden daha fazla transaction satırı görülebilir.
data.list mixed entry döner:
entryType: "stream_group":id,streamId,streamTitle,thumbnailUrl,transactionsentryType: "transaction":id, streamId olmayan standalone transaction içintransaction
{
"isSuccess": true,
"statusCode": 200,
"data": {
"list": [
{
"id": "stream_group:67b4a2ef81f4d8f7dcbb0001",
"entryType": "stream_group",
"streamId": "67b4a2ef81f4d8f7dcbb0001",
"streamTitle": "Friday Night Stream",
"thumbnailUrl": "https://s.allminelive.com/live-streams/thumbnail-123.jpg",
"transactions": [
{
"id": "gift_spend:67b4c8ef81f4d8f7dcbb12ab",
"source": "gift",
"sourceRecordId": "67b4c8ef81f4d8f7dcbb12ab",
"type": "gift_spend",
"direction": "debit",
"amount": 9,
"status": "completed",
"occurredAt": "2026-02-25T10:30:00.000Z",
"description": "Gift spend",
"streamId": "67b4a2ef81f4d8f7dcbb0001",
"streamTitle": "Friday Night Stream",
"thumbnailUrl": "https://s.allminelive.com/live-streams/thumbnail-123.jpg",
"counterpartyUserId": null,
"counterpartyUsername": null,
"creditPackageId": null,
"storeType": null,
"role": null,
"revenuecatTransactionId": null,
"notes": "giftTypeId:67b4a2ef81f4d8f7dcbb9999",
"previousBalance": null,
"newBalance": null
}
]
},
{
"id": "transaction:credit_transaction:67b4c8ef81f4d8f7dcbb12ac",
"entryType": "transaction",
"transaction": {
"id": "credit_transaction:67b4c8ef81f4d8f7dcbb12ac",
"source": "credit_transaction",
"sourceRecordId": "67b4c8ef81f4d8f7dcbb12ac",
"type": "credit_purchase",
"direction": "credit",
"amount": 100,
"status": "completed",
"occurredAt": "2026-02-25T10:10:00.000Z",
"description": "Credit purchase",
"streamId": null,
"streamTitle": null,
"thumbnailUrl": null,
"counterpartyUserId": null,
"counterpartyUsername": null,
"creditPackageId": "67b4c8ef81f4d8f7dcbb0002",
"storeType": "stripe",
"role": null,
"revenuecatTransactionId": "pi_123",
"notes": "Credit purchase",
"previousBalance": 0,
"newBalance": 100
}
}
],
"pagination": {
"currentPage": 1,
"totalPages": 3,
"totalItems": 51,
"itemsPerPage": 20,
"hasNextPage": true,
"hasPrevPage": false
}
},
"errors": [],
"timestamp": "2026-02-25T10:30:00.100Z"
}thumbnailUrl Davranışı
- Transaction canlı yayınla ilişkiliyse (
streamIddolu),streamTitlevethumbnailUrlLiveStreamkaydından batch enrichment ile doldurulur. - Canlı yayınla ilişkili değilse alanlar
nulldöner. streamIdvar ama stream bulunamazsastreamTitlevethumbnailUrlyinenullkalır.
Hata Kodları
400 Bad Request- Geçersiz query parametreleri
dateTo < dateFrom
401 Unauthorized- Eksik veya geçersiz token
Swagger Kullanımı
userstag altındaGET /users/me/transactionsendpointini açın.Authorizeile JWT girin.- Parametreleri doldurup
Try it out->Executeçalıştırın. TypeError: Load failedgörürseniz:- Swagger server URL'sini doğrulayın
- Aynı isteği
curlile çağırıp backend erişimini kontrol edin