Skip to main content
When a payment changes state, LauncX POSTs a JSON callback to your registered URL from the outbound IPs.

Payload

FieldTypeNotes
orderIdstringPayment UUID.
payerIdstringThe playerId you supplied when creating the payment.
statusstringPAID | EXPIRED | FAILED | PENDING.
settlementStatusstringPENDING | COMPLETED | FAILED.
grossAmountnumberOriginal payment amount.
feeLauncxnumberPlatform fee charged.
netAmountnumbergrossAmount - feeLauncx.
qrPayloadstringQRIS payload string.
timestampstringRFC3339 UTC, e.g. 2026-06-15T08:42:11Z.
noncestringUnique UUID per delivery (use for replay protection).
{
  "orderId": "9f2c1a4b-7c3e-4d9a-b8e2-3c1d5a6f0e21",
  "payerId": "player-00123",
  "status": "PAID",
  "settlementStatus": "PENDING",
  "grossAmount": 250000,
  "feeLauncx": 1750,
  "netAmount": 248250,
  "qrPayload": "00020101021226680016ID.CO.QRIS.WWW...",
  "timestamp": "2026-06-15T08:42:11Z",
  "nonce": "a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d"
}
status reflects the payment lifecycle; settlementStatus tracks settlement independently (COMPLETED once settled, FAILED if the payment expired/failed, otherwise PENDING).

Verifying the signature

Each delivery includes an HMAC signature header:
HeaderValue
X-Callback-Signaturehex( HMAC_SHA256( rawRequestBody, CallbackSecret ) )
Compute the HMAC-SHA256 of the raw request body bytes (all ten fields, exactly as received — do not re-serialize) using your Callback Secret, hex-encode it, and compare against X-Callback-Signature.

Delivery & retries

  • Up to 4 attempts with backoff (immediate, 1s, 2s).
  • Any 2xx response is treated as success; respond 2xx quickly and process asynchronously.