Detail transaksi — Partner Transactions API
Mengembalikan detail lengkap satu transaksi berdasarkan UUID-nya. Partner hanya bisa mengakses
transaksi miliknya sendiri -- request ke transaksi partner lain menghasilkan 403.
Autentikasi
Kirim header Authorization: Bearer <accessToken>, memakai accessToken yang didapat dari
Partner Auth API. Butuh permission transactions:read.
Path parameter
| Parameter | Tipe | Deskripsi |
|---|---|---|
transactionId | UUID | UUID transaksi yang ingin diambil detailnya. |
Contoh request
- cURL
- Node.js
- Java
Request
curl '{{BASE_URL}}/api/v1/transactions/a1b2c3d4-e5f6-7890-abcd-ef1234567890' \
-H "Authorization: Bearer $ACCESS_TOKEN"
Request
const transactionId = "a1b2c3d4-e5f6-7890-abcd-ef1234567890";
const response = await fetch(`{{BASE_URL}}/api/v1/transactions/${transactionId}`, {
headers: {
Authorization: `Bearer ${accessToken}`,
},
});
const data = await response.json();
console.log(data);
Request
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
String transactionId = "a1b2c3d4-e5f6-7890-abcd-ef1234567890";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request =
HttpRequest.newBuilder()
.uri(URI.create("{{BASE_URL}}/api/v1/transactions/" + transactionId))
.header("Authorization", "Bearer " + accessToken)
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Response sukses
200 OK
200 OK
{
"code": "00",
"message": "Success",
"data": {
"transactionId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"partnerId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"groupId": "3fa85f64-5717-4562-b3fc-2c963f66afa7",
"externalReference": "INV-2026-001234",
"platformReference": "TXN-20260707-A1B2C3",
"transactionType": "PAYMENT",
"paymentMethod": "QRIS_DYNAMIC",
"status": "SUCCESS",
"amount": 150000,
"currency": "IDR",
"providerCode": "GDC",
"providerReference": "GDC-TXN-9876543",
"qrString": "00020101021226...",
"expiredAt": "2026-07-07T10:30:00Z",
"description": "Pembayaran order #INV-2026-001234",
"createdAt": "2026-07-07T09:00:00Z",
"updatedAt": "2026-07-07T09:05:00Z"
},
"correlationId": "9f8e7d6c-5b4a-3210-fedc-ba9876543210",
"requestId": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
"timestamp": "2026-08-13T09:15:30.123Z"
}
Penjelasan field
| Field | Tipe | Catatan |
|---|---|---|
transactionId | UUID | ID transaksi di sistem TuplePay. |
partnerId | UUID | ID akun partner di sistem TuplePay, yang diambil dari klaim JWT context saat transaksi dibuat. ID ini bukan ID dari payment gateway/provider (misalnya GDC). ID yang diberikan oleh provider terdapat pada field providerReference. |
groupId | UUID | Group yang menentukan gateway/provider transaksi ini -- wajib ada di setiap transaksi (lihat Buat transaksi QRIS / Buat disbursement). |
externalReference | string | ID transaksi dari sisi kamu (dikirim saat membuat transaksi). |
platformReference | string | ID internal TuplePay. |
transactionType | PAYMENT | DISBURSEMENT | Tipe transaksi. |
paymentMethod | QRIS_DYNAMIC | QRIS_STATIC | BANK_TRANSFER | Metode pembayaran. |
status | PENDING | SUCCESS | FAILED | EXPIRED | CANCELLED | Status lifecycle -- lihat catatan transisi di bawah. |
amount | integer (Long) | Nominal dalam Rupiah (bilangan bulat, tidak ada sen) -- 150000 = Rp 150.000. |
currency | string | Kode ISO 4217, saat ini selalu IDR. |
providerCode | string | Kode provider yang memproses (mis. GDC). |
providerReference | string, nullable | ID transaksi di sisi provider. Null selama masih PENDING. |
qrString | string, nullable | String QRIS yang bisa di-render jadi kode QR. Null untuk DISBURSEMENT. |
expiredAt | ISO-8601, nullable | Waktu kadaluarsa. Null untuk DISBURSEMENT. |
description | string, nullable | Keterangan transaksi. |
createdAt/updatedAt | ISO-8601 | Waktu dibuat/terakhir diupdate. |
Transisi status: PENDING → SUCCESS | FAILED | EXPIRED | CANCELLED. Keempat status
selain PENDING bersifat terminal (tidak berubah lagi).
Response error
| HTTP Status | code | Kapan terjadi |
|---|---|---|
| 400 | VALIDATION_ERROR | transactionId di path bukan UUID yang valid. |
| 401 | INVALID_TOKEN | Authorization header tidak ada, JWT tidak valid, atau kadaluarsa. |
| 403 | ACCESS_DENIED | Tidak punya permission transactions:read (lihat 3 kasus di bawah). |
| 404 | TRANSACTION_NOT_FOUND | Transaksi dengan ID tersebut tidak ditemukan. |
code yang sama (ACCESS_DENIED, 403) dipakai untuk tiga kondisi berbeda, dengan message yang
berbeda pula:
| Kondisi | message |
|---|---|
Token valid tapi tidak punya permission transactions:read | "Akses ditolak — permission tidak mencukupi untuk operasi ini." |
| Transaksi ditemukan tapi milik partner lain | "Transaksi bukan milik partner yang sedang login." |
| Token bukan milik actor bertipe partner | "Akses tidak diizinkan — actor bukan partner." |
Contoh -- 404 Not Found
{
"code": "TRANSACTION_NOT_FOUND",
"message": "Transaction not found: a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"correlationId": "9f8e7d6c-5b4a-3210-fedc-ba9876543210",
"requestId": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
"timestamp": "2026-08-13T09:15:30.123Z"
}