Skip to main content

Data Export

Overview​

API Data Export memungkinkan merchant untuk mengekspor dataset dalam jumlah besar seperti payments, dan disbursement untuk keperluan pelaporan operasional, rekonsiliasi, atau analisis data.

Proses ekspor dilakukan secara asynchronous (tidak langsung) untuk menghindari timeout dan memastikan performa sistem tetap optimal. Merchant dapat membuat job ekspor yang berjalan di background, kemudian mengambil file hasil ekspor setelah proses selesai.

Format yang Didukung: Saat ini hanya format CSV yang didukung.

Fitur Utama​

FiturDeskripsi
Asynchronous ProcessingEkspor diproses di background tanpa blocking API call
Job TrackingMonitoring status ekspor melalui report id
Flexible FilteringFilter berdasarkan tanggal dan status
Secure AccessHanya user yang ter-autentikasi dapat mengakses file ekspor mereka

Authentication​

API Data Export menggunakan mekanisme autentikasi yang sama dengan SNAP API lainnya. Pastikan Anda sudah memiliki Bearer Token sebelum melakukan request. Lihat Authentication untuk detailnya.

Endpoints​

1. Create Export Job​

Endpoint ini digunakan untuk membuat job ekspor data secara asynchronous.

Headers​

ParameterTipeMandatoriKeteranganContoh
Content-Typestring✓Tipe media yang digunakanapplication/json
Authorizationstring✓Bearer token dari endpoint Get TokenBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
X-TIMESTAMPstring✓Timestamp format ISO-86012025-10-27T13:00:00+07:00
X-SIGNATUREstring✓Signature HMAC_SHA512Lihat Signature Formula
X-CLIENT-KEYstring✓Client KeyDXXXX

Request Body​

ParameterTipeMandatoriKeteranganContoh
resourceTypestring✓Tipe datatransactions
formatstring✓Format filecsv
filtersobject✓Filter data
filters.startDatestring✓Tanggal mulai2025-10-01
filters.endDatestring✓Tanggal akhir2025-10-27
filters.statusstringStatus transaksiSUCCESS
filters.businessIdintxChild business1
callbackUrlstringxCallback HTTPShttps://callback-url.com/receive

Validation Rules​

FieldAturan ValidasiContoh ValidContoh Invalid
resourceTypeHarus salah satu dari: qris, va, ewallet, cc, disbursement, transaction, unified_cash_in, unified_cash_out✅ transaction❌ invalid_type
formatHanya csv yang didukung✅ csv❌ pdf, xlsx
startDateHarus dalam format ISO 8601 (YYYY-MM-DD)✅ 2025-10-01❌ 01-10-2025
endDateHarus dalam format ISO 8601 (YYYY-MM-DD)✅ 2025-10-27❌ 27/10/2025
Date RangestartDate harus lebih kecil atau sama dengan endDate✅ start: 2025-10-01, end: 2025-10-27❌ start: 2025-10-27, end: 2025-10-01
Date Range LengthMaksimal 1 bulan (31 hari)✅ start: 2025-10-01, end: 2025-10-31❌ start: 2025-10-01, end: 2025-11-25
Past Data OnlyendDate harus kurang dari tanggal hari ini (UTC)✅ 2025-10-26 (jika hari ini 27 Okt)❌ 2025-10-27 (jika hari ini 27 Okt)
Date Range To LongTidak boleh melebihi dari 1 bulan
Minimum Data AgeData yang diekspor minimal berumur 1 hari✅ Data hingga kemarin❌ Data hari ini
callbackUrlJika terisi wajib menggunakan https✅ https❌ http only, url only

Example Request​

{
"resourceType": "transactions",
"format": "csv",
"filters": {
"startDate": "2025-10-01",
"endDate": "2025-10-27",
"status": "SUCCESS",
"businessId": 994
}
}

Response​

Success Response (200)

{
"responseCode": "2000000",
"responseMessage": "Publish job successfully",
"reportId": "exp_01J9Y4V34ZKFG5Q7E9YNM9W22R"
}

Validation Error (422)

{
"responseCode": "422000",
"responseMessage": "Date Range Required"
}

2. Get Export Job Status​

Endpoint ini digunakan untuk mengambil status job ekspor dan file hasil ekspor jika sudah selesai.

Headers​

ParameterTipeMandatoriKeteranganContoh
Authorizationstring✓Bearer token dari endpoint Get TokenBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
X-TIMESTAMPstring✓Timestamp dalam format ISO-86012025-10-27T13:00:00+07:00
X-SIGNATUREstring✓Signature menggunakan HMAC_SHA512 (symmetric)Lihat Signature Formula
X-CLIENT-KEYstring✓Client Key dari Menu SettingDXXXX

Path Parameters​

ParameterTipeMandatoriKeteranganContoh
reportIdstring✓ID job ekspor01J9Y4V34ZKFG5Q7E9YNM9W22R

Response Examples​

QUEUE Status (200)

Job telah dibuat dan dalam antrian menunggu untuk diproses oleh worker.

{
"responseCode": "2000000",
"reportId": "exp_01J9Y4V34ZKFG5Q7E9YNM9W22R",
"status": "QUEUE",
"resourceType": "transactions",
"startDate": null,
"endDate": null,
"message": "Export job has been queued and will start processing shortly."
}

EXPORTING Status (200)

Job sedang dalam proses ekspor data dari database.

{
"responseCode": "2000000",
"reportId": "exp_01J9Y4V34ZKFG5Q7E9YNM9W22R",
"status": "EXPORTING",
"resourceType": "transactions",
"startDate": "2025-10-01T00:00:00Z",
"endDate": "2025-10-27T23:59:59Z",
"message": "Export job is currently exporting data."
}

EXPORTED Status (200)

Data sudah berhasil diekspor dan file sudah diupload ke S3.

{
"responseCode": "2000000",
"reportId": "exp_01J9Y4V34ZKFG5Q7E9YNM9W22R",
"status": "EXPORTED",
"resourceType": "transactions",
"startDate": "2025-10-01T00:00:00Z",
"endDate": "2025-10-27T23:59:59Z",
"message": "Export job data is already exported"
}

UPLOADING Status (200)

File sedang dalam proses upload ke SFTP server.

{
"responseCode": "2000000",
"reportId": "exp_01J9Y4V34ZKFG5Q7E9YNM9W22R",
"status": "UPLOADING",
"resourceType": "transactions",
"startDate": "2025-10-01T00:00:00Z",
"endDate": "2025-10-27T23:59:59Z",
"message": "Export job is currently uploading file"
}

COMPLETED Status (200)

Seluruh proses berhasil diselesaikan dan file siap diakses.

{
"responseCode": "2000000",
"responseMessage": "Export job has been completed and uploaded to SFTP.",
"reportId": "01KFJ4PWM81CFV1FJ9JGTM6J9V",
"filters": {
"startDate": "2026-01-01",
"endDate": "2026-01-31",
"status": ["all"],
"businessId": 993
},
"status": "COMPLETED",
"resourceType": "transaction",
"startAt": "2026-01-22T06:01:48",
"completedAt": "2026-01-22T06:01:49",
"fileUrl": "https://storage.kirimo.co/export/merchant-name-transactions-2025-10-01-2025-10-27-SUCCESS.csv"
}

FAILED Status (200)

Proses ekspor gagal karena terjadi error.

{
"responseCode": "2000000",
"reportId": "01KFJ4PWM81CFV1FJ9JGTM6J9V",
"filters": {
"startDate": "2025-12-01",
"endDate": "2025-12-31",
"status": ["all"],
"businessId": 993
},
"status": "FAILED",
"resourceType": "transaction",
"startAt": "2026-01-22T06:01:48",
"completedAt": "2026-01-22T06:01:49",
"errorMessage": "Database timeout while fetching data."
}

Job Status Flow​

Setiap job ekspor melalui status berikut secara berurutan:

StatusDeskripsi
QUEUEJob telah dibuat dan dalam antrian menunggu worker untuk memproses
EXPORTINGWorker sedang mengekspor data dari database
EXPORTEDData sudah berhasil diekspor dan file sudah diupload ke S3
UPLOADINGFile sedang dalam proses upload ke SFTP server
COMPLETEDSeluruh proses berhasil diselesaikan (success flow)
FAILEDProses ekspor gagal karena terjadi error

Status Transition Diagram​

QUEUE → EXPORTING → EXPORTED → UPLOADING (IF SFTP SETTING ACTIVE) → COMPLETED
↓ ↓
FAILED FAILED`

Catatan: Status FAILED bisa terjadi di tahap EXPORTING, atau UPLOADING. Jika proses gagal di salah satu tahap, status akan langsung berubah menjadi FAILED dengan error_message yang menjelaskan penyebab kegagalan.

Signature Formula​

API Data Export menggunakan Symmetric Signature (HMAC_SHA512) untuk keamanan request. Formula signature sama dengan endpoint SNAP API lainnya.

Formula​

stringToSign = HttpMethod + ":" + Endpoint + ":" + AccessToken + ":" + LowerCase(HexEncode(SHA-256(Minify(RequestBody)))) + ":" + Timestamp  hash = HMAC_SHA512(stringToSign, secretKey) signature = Base64(hash)

Penjelasan​

  1. HttpMethod: Metode HTTP yang digunakan (POST atau GET)
  2. Endpoint: Relative URL tanpa domain (contoh: /v1.0/data/export)
  3. AccessToken: Bearer token yang didapat dari endpoint Get Token
  4. RequestBody: Payload yang dikirim (untuk method POST only)
  5. Timestamp: Timestamp dalam format ISO-8601
  6. secretKey: Client Key dari menu API Key

Hash stringToSign menggunakan algoritma HMAC_SHA512 dengan secret key, kemudian encode dengan Base64. Masukkan hasilnya ke header X-SIGNATURE.


Security & Limitations​

Access Control​

AturanDeskripsi
AuthenticationWajib menggunakan Bearer Token (OAuth 2.0) atau API Key
Ownership ValidationMerchant hanya dapat mengakses export job mereka sendiri
AuthorizationSetiap request divalidasi dengan X-SIGNATURE

Rate Limiting​

LimitNilai
Concurrent JobsMaksimal 5 job per menit aktif per business
Rate Limit ResponseHTTP 429 - Too Many Requests

File Policies​

PolicyNilai
File FormatHanya CSV yang didukung
Filename Convention{business_name}-{resource_type}-{start_date}-{end_date}-{status}.csv

Penting:fileUrl link hanya valid selama 1 jam sejak status job berubah menjadi COMPLETED.


Resource Types & Data Structure​

Supported Resource Types​

Resource TypeDeskripsiFilter Fields
transactionSemua transaksi (multi-payment)startDate, endDate, status
qrisTransaksi QRISstartDate, endDate, status
vaTransaksi Virtual AccountstartDate, endDate, status
ewalletTransaksi E-WalletstartDate, endDate, status
ccTransaksi Credit CardstartDate, endDate, status
disbursementTransaksi DisbursementstartDate, endDate, status
unified_cash_inCash In transactionsstartDate, endDate, status
unified_cash_outCash Out transactionsstartDate, endDate, status

CSV Data Structure​

Setiap resource type memiliki struktur kolom yang berbeda. Berikut contoh struktur untuk transactions:

transaction_id,merchant_id,merchant_name,amount,fee,net_amount,currency,status,payment_method,created_at,updated_at,settled_at TRX123456,MER001,Merchant Name,100000,1500,98500,IDR,SUCCESS,qris,2025-10-27T08:00:00Z,2025-10-27T08:01:00Z,2025-10-28T00:00:00Z TRX123457,MER001,Merchant Name,250000,3750,246250,IDR,SUCCESS,va,2025-10-27T09:00:00Z,2025-10-27T09:02:00Z,2025-10-28T00:00:00Z

Error Codes

HTTP CodeMessageKeteranganSolusi
200SuccessRequest berhasil diproses-
400Bad RequestFormat request tidak validPeriksa format request body
401UnauthorizedToken tidak valid atau expiredGenerate token baru
422Validation ErrorValidasi parameter gagalPeriksa parameter sesuai validation rules
429Too Many RequestsMelebihi rate limit (5 concurrent jobs)Tunggu hingga waktu limit per menit sebelumnya selesai
500Internal Server ErrorError pada sistem serverCoba lagi atau hubungi support