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-TypestringTipe media yang digunakanapplication/json
AuthorizationstringBearer token dari endpoint Get TokenBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
X-TIMESTAMPstringTimestamp format ISO-86012025-10-27T13:00:00+07:00
X-SIGNATUREstringSignature HMAC_SHA512Lihat Signature Formula
X-CLIENT-KEYstringClient KeyDXXXX

Request Body

ParameterTipeMandatoriKeteranganContoh
resourceTypestringTipe datatransactions
formatstringFormat filecsv
filtersobjectFilter data
filters.startDatestringTanggal mulai2025-10-01
filters.endDatestringTanggal 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
AuthorizationstringBearer token dari endpoint Get TokenBearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
X-TIMESTAMPstringTimestamp dalam format ISO-86012025-10-27T13:00:00+07:00
X-SIGNATUREstringSignature menggunakan HMAC_SHA512 (symmetric)Lihat Signature Formula
X-CLIENT-KEYstringClient Key dari Menu SettingDXXXX

Path Parameters

ParameterTipeMandatoriKeteranganContoh
reportIdstringID 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.doitpay.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