Skip to content

API reference

This page is generated from the OpenAPI document of the current API version.

  • Base URL: https://api.example.com (every path starts with /v1)
  • Download the spec: /openapi.json (OpenAPI 3.0), for Postman, Insomnia or client generators
  • Every request must be signed as described in Authentication and request signing; responses use the envelope from the Overview
  • For the meaning of each error.code, see Errors
GET /v1/payins

Newest first.

Parameters

NameInTypeRequiredDescription
limitquerynumber-Default 20. Range 1-100.
cursorquerystring-Opaque cursor from pagination.nextCursor of the previous page.
statusquerypending, processing, in_review, succeeded, expired, canceled, rejected, failed[]-Comma-separated statuses.
referencequerystring-Exact match on your reference.
payerIdquerystring-e.g. payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d
createdFromquerystring-ISO-8601, inclusive. e.g. 2026-01-01T00:00:00Z
createdToquerystring-ISO-8601, inclusive. e.g. 2026-01-31T23:59:59Z

Response 200 - data is a list of PayinObject with pagination

{
"data": [
{
"object": "payin",
"id": "pin_3f2b1c0d9e8f4a7b8c6d5e4f3a2b1c0d",
"reference": "order-10001",
"payerId": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"payer": {
"object": "payer",
"id": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"bankCode": "SCB",
"bankName": "Siam Commercial Bank",
"accountNumber": "1234567890",
"accountName": "สมชาย สบายดี",
"accountNameEn": "Somchai Sabuydee",
"status": "active",
"referralCode": null,
"createdAt": "2026-01-01T00:00:00.000Z"
},
"requestedAmount": "150.00",
"amount": "150.37",
"fee": "2.25",
"currency": "THB",
"method": "promptpay_qr",
"status": "pending",
"failureReason": null,
"webhookUrl": "https://partner.example.com/webhooks",
"payerAccount": {
"bankCode": "SCB",
"accountNumber": "1234567890",
"accountName": "Somchai Sabuydee"
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z",
"returnUrl": "https://partner.example.com/return",
"checkoutUrl": "https://pay.example.com/3f2b1c0d-...",
"paymentImage": "data:image/png;base64,iVBORw0KGgo...",
"payTo": {
"bankCode": "KBANK",
"bankName": "Kasikorn Bank",
"accountNumber": "0987654321",
"accountName": "Example Co., Ltd.",
"promptpayId": "0812345678",
"walletAddress": "0xabc...",
"network": "BSC",
"qrPayload": "00020101021229370016A000000677010111011300668123456785802TH53037645406150.3763046572"
}
}
],
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e",
"pagination": {
"limit": 20,
"hasMore": true,
"nextCursor": "eyJvIjoyMH0"
}
}

Possible error HTTP statuses: 400, 401, 403, 500

POST /v1/payins

Identify the payer with exactly one of payerId or an inline payer (bank account; an existing payer with the same bank code and account number is reused, otherwise one is created). Returns the payin with payTo (incl. qrPayload) and checkoutUrl; add ?include=paymentImage for the PNG image. The response may contain warnings (e.g. payer_name_differs).

Parameters

NameInTypeRequiredDescription
includequerystring-Comma-separated extra fields. paymentImage: add the PNG data URI of the QR code / transfer card. Unknown values are ignored. e.g. paymentImage
Idempotency-Keyheaderstring-Optional, recommended. A unique key (8-255 characters of A-Z a-z 0-9 _ - : .) per create request, e.g. a UUID. Retrying with the same key and the same request within 24 hours returns the original response (header Idempotent-Replayed: true) instead of creating a second one.

Request body (application/json)

FieldTypeRequiredDescription
payerIdstring-An existing payer. Send exactly one of payerId and payer. e.g. payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d
payerInlinePayerDto-The payer’s bank account, instead of payerId. Send exactly one of payerId and payer. If you already have a payer with the same bankCode and accountNumber it is reused (its stored name is kept; a payer_name_differs warning is returned if the name differs), otherwise a new active payer is created as with POST /v1/payers. The response contains its payerId.
amountstringyesDecimal string. Unique decimals may be added; see amount in the response. e.g. 150.00
currencyTHB, USD, USDT, LAKyese.g. THB
methodauto, promptpay_qr, bank_transfer, crypto, lao_qr-Default auto.
referencestring-Your order id. Max 128 chars. e.g. order-10001
webhookUrlstringyese.g. https://partner.example.com/webhooks/payments
returnUrlstring-Where the checkout page sends the payer afterwards. e.g. https://partner.example.com/orders/10001
{
"payerId": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"payer": {
"bankCode": "SCB",
"accountNumber": "1234567890",
"accountName": "สมชาย สบายดี",
"accountNameEn": "Somchai Sabuydee"
},
"amount": "150.00",
"currency": "THB",
"method": "auto",
"reference": "order-10001",
"webhookUrl": "https://partner.example.com/webhooks/payments",
"returnUrl": "https://partner.example.com/orders/10001"
}

Response 201 - data is PayinObject

{
"data": {
"object": "payin",
"id": "pin_3f2b1c0d9e8f4a7b8c6d5e4f3a2b1c0d",
"reference": "order-10001",
"payerId": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"payer": {
"object": "payer",
"id": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"bankCode": "SCB",
"bankName": "Siam Commercial Bank",
"accountNumber": "1234567890",
"accountName": "สมชาย สบายดี",
"accountNameEn": "Somchai Sabuydee",
"status": "active",
"referralCode": null,
"createdAt": "2026-01-01T00:00:00.000Z"
},
"requestedAmount": "150.00",
"amount": "150.37",
"fee": "2.25",
"currency": "THB",
"method": "promptpay_qr",
"status": "pending",
"failureReason": null,
"webhookUrl": "https://partner.example.com/webhooks",
"payerAccount": {
"bankCode": "SCB",
"accountNumber": "1234567890",
"accountName": "Somchai Sabuydee"
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z",
"returnUrl": "https://partner.example.com/return",
"checkoutUrl": "https://pay.example.com/3f2b1c0d-...",
"paymentImage": "data:image/png;base64,iVBORw0KGgo...",
"payTo": {
"bankCode": "KBANK",
"bankName": "Kasikorn Bank",
"accountNumber": "0987654321",
"accountName": "Example Co., Ltd.",
"promptpayId": "0812345678",
"walletAddress": "0xabc...",
"network": "BSC",
"qrPayload": "00020101021229370016A000000677010111011300668123456785802TH53037645406150.3763046572"
}
},
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e",
"warnings": [
{
"code": "payer_name_differs",
"message": "An existing payer with this bank account was used. Its stored account name differs from the one sent and was kept; it is used for payment matching.",
"param": "payer.accountName"
}
]
}

Possible error HTTP statuses: 400, 401, 403, 404, 409, 422, 500

GET /v1/payins/{id}

Includes payTo (incl. qrPayload); add ?include=paymentImage for the PNG image.

Parameters

NameInTypeRequiredDescription
idpathstringyese.g. pin_3f2b1c0d9e8f4a7b8c6d5e4f3a2b1c0d
includequerystring-Comma-separated extra fields. paymentImage: add the PNG data URI of the QR code / transfer card. Unknown values are ignored. e.g. paymentImage

Response 200 - data is PayinObject

{
"data": {
"object": "payin",
"id": "pin_3f2b1c0d9e8f4a7b8c6d5e4f3a2b1c0d",
"reference": "order-10001",
"payerId": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"payer": {
"object": "payer",
"id": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"bankCode": "SCB",
"bankName": "Siam Commercial Bank",
"accountNumber": "1234567890",
"accountName": "สมชาย สบายดี",
"accountNameEn": "Somchai Sabuydee",
"status": "active",
"referralCode": null,
"createdAt": "2026-01-01T00:00:00.000Z"
},
"requestedAmount": "150.00",
"amount": "150.37",
"fee": "2.25",
"currency": "THB",
"method": "promptpay_qr",
"status": "pending",
"failureReason": null,
"webhookUrl": "https://partner.example.com/webhooks",
"payerAccount": {
"bankCode": "SCB",
"accountNumber": "1234567890",
"accountName": "Somchai Sabuydee"
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z",
"returnUrl": "https://partner.example.com/return",
"checkoutUrl": "https://pay.example.com/3f2b1c0d-...",
"paymentImage": "data:image/png;base64,iVBORw0KGgo...",
"payTo": {
"bankCode": "KBANK",
"bankName": "Kasikorn Bank",
"accountNumber": "0987654321",
"accountName": "Example Co., Ltd.",
"promptpayId": "0812345678",
"walletAddress": "0xabc...",
"network": "BSC",
"qrPayload": "00020101021229370016A000000677010111011300668123456785802TH53037645406150.3763046572"
}
},
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e"
}

Possible error HTTP statuses: 400, 401, 403, 404, 500

POST /v1/payins/{id}/cancel

Parameters

NameInTypeRequiredDescription
idpathstringyese.g. pin_3f2b1c0d9e8f4a7b8c6d5e4f3a2b1c0d

Response 200 - data is PayinObject

{
"data": {
"object": "payin",
"id": "pin_3f2b1c0d9e8f4a7b8c6d5e4f3a2b1c0d",
"reference": "order-10001",
"payerId": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"payer": {
"object": "payer",
"id": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"bankCode": "SCB",
"bankName": "Siam Commercial Bank",
"accountNumber": "1234567890",
"accountName": "สมชาย สบายดี",
"accountNameEn": "Somchai Sabuydee",
"status": "active",
"referralCode": null,
"createdAt": "2026-01-01T00:00:00.000Z"
},
"requestedAmount": "150.00",
"amount": "150.37",
"fee": "2.25",
"currency": "THB",
"method": "promptpay_qr",
"status": "pending",
"failureReason": null,
"webhookUrl": "https://partner.example.com/webhooks",
"payerAccount": {
"bankCode": "SCB",
"accountNumber": "1234567890",
"accountName": "Somchai Sabuydee"
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z",
"returnUrl": "https://partner.example.com/return",
"checkoutUrl": "https://pay.example.com/3f2b1c0d-...",
"paymentImage": "data:image/png;base64,iVBORw0KGgo...",
"payTo": {
"bankCode": "KBANK",
"bankName": "Kasikorn Bank",
"accountNumber": "0987654321",
"accountName": "Example Co., Ltd.",
"promptpayId": "0812345678",
"walletAddress": "0xabc...",
"network": "BSC",
"qrPayload": "00020101021229370016A000000677010111011300668123456785802TH53037645406150.3763046572"
}
},
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e"
}

Possible error HTTP statuses: 400, 401, 403, 404, 409, 500

POST /v1/payins/{id}/slip

multipart/form-data with a single file part. The signature body hash is the SHA-256 of the file bytes.

Parameters

NameInTypeRequiredDescription
idpathstringyese.g. pin_3f2b1c0d9e8f4a7b8c6d5e4f3a2b1c0d

Request body (multipart/form-data)

FieldTypeRequiredDescription
filefileyes

For multipart send only the file part and sign the SHA-256 of the file bytes.

Response 200 - data is SlipUploadResult

{
"data": {
"object": "slip_upload",
"matched": true,
"slipStatus": "matched",
"payin": {
"object": "payin",
"id": "pin_3f2b1c0d9e8f4a7b8c6d5e4f3a2b1c0d",
"reference": "order-10001",
"payerId": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"payer": {
"object": "payer",
"id": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"bankCode": "SCB",
"bankName": "Siam Commercial Bank",
"accountNumber": "1234567890",
"accountName": "สมชาย สบายดี",
"accountNameEn": "Somchai Sabuydee",
"status": "active",
"referralCode": null,
"createdAt": "2026-01-01T00:00:00.000Z"
},
"requestedAmount": "150.00",
"amount": "150.37",
"fee": "2.25",
"currency": "THB",
"method": "promptpay_qr",
"status": "pending",
"failureReason": null,
"webhookUrl": "https://partner.example.com/webhooks",
"payerAccount": {
"bankCode": "SCB",
"accountNumber": "1234567890",
"accountName": "Somchai Sabuydee"
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z",
"returnUrl": "https://partner.example.com/return",
"checkoutUrl": "https://pay.example.com/3f2b1c0d-...",
"paymentImage": "data:image/png;base64,iVBORw0KGgo...",
"payTo": {
"bankCode": "KBANK",
"bankName": "Kasikorn Bank",
"accountNumber": "0987654321",
"accountName": "Example Co., Ltd.",
"promptpayId": "0812345678",
"walletAddress": "0xabc...",
"network": "BSC",
"qrPayload": "00020101021229370016A000000677010111011300668123456785802TH53037645406150.3763046572"
}
}
},
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e"
}

Possible error HTTP statuses: 400, 401, 403, 404, 409, 422, 500

GET /v1/payouts

Newest first.

Parameters

NameInTypeRequiredDescription
limitquerynumber-Default 20. Range 1-100.
cursorquerystring-Opaque cursor from pagination.nextCursor of the previous page.
statusquerypending, processing, in_review, succeeded, expired, canceled, rejected, failed[]-Comma-separated statuses.
referencequerystring-Exact match on your reference.
payerIdquerystring-e.g. payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d
createdFromquerystring-ISO-8601, inclusive. e.g. 2026-01-01T00:00:00Z
createdToquerystring-ISO-8601, inclusive. e.g. 2026-01-31T23:59:59Z

Response 200 - data is a list of PayoutObject with pagination

{
"data": [
{
"object": "payout",
"id": "pin_3f2b1c0d9e8f4a7b8c6d5e4f3a2b1c0d",
"reference": "order-10001",
"payerId": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"payer": {
"object": "payer",
"id": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"bankCode": "SCB",
"bankName": "Siam Commercial Bank",
"accountNumber": "1234567890",
"accountName": "สมชาย สบายดี",
"accountNameEn": "Somchai Sabuydee",
"status": "active",
"referralCode": null,
"createdAt": "2026-01-01T00:00:00.000Z"
},
"requestedAmount": "150.00",
"amount": "150.37",
"fee": "2.25",
"currency": "THB",
"method": "promptpay_qr",
"status": "pending",
"failureReason": null,
"webhookUrl": "https://partner.example.com/webhooks",
"payerAccount": {
"bankCode": "SCB",
"accountNumber": "1234567890",
"accountName": "Somchai Sabuydee"
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
}
],
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e",
"pagination": {
"limit": 20,
"hasMore": true,
"nextCursor": "eyJvIjoyMH0"
}
}

Possible error HTTP statuses: 400, 401, 403, 500

POST /v1/payouts

Identify the payer (the destination account) with exactly one of payerId or an inline payer; an existing payer with the same bank code and account number is reused, otherwise one is created. The response may contain warnings (e.g. payer_name_differs).

Parameters

NameInTypeRequiredDescription
Idempotency-Keyheaderstring-Optional, recommended. A unique key (8-255 characters of A-Z a-z 0-9 _ - : .) per create request, e.g. a UUID. Retrying with the same key and the same request within 24 hours returns the original response (header Idempotent-Replayed: true) instead of creating a second one.

Request body (application/json)

FieldTypeRequiredDescription
payerIdstring-An existing payer. Send exactly one of payerId and payer. e.g. payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d
payerInlinePayerDto-The payer’s bank account, instead of payerId. Send exactly one of payerId and payer. If you already have a payer with the same bankCode and accountNumber it is reused (its stored name is kept; a payer_name_differs warning is returned if the name differs), otherwise a new active payer is created as with POST /v1/payers. The response contains its payerId.
amountstringyese.g. 500.00
currencyTHB, USD, USDT, LAKyese.g. THB
methodauto, bank_transfer, crypto, lao_qr-Default auto.
referencestring-Max 128 chars. e.g. withdraw-20001
webhookUrlstring-e.g. https://partner.example.com/webhooks/payments
walletAddressstring-Crypto payouts: destination wallet.
networkstring-Crypto payouts: network, e.g. BSC.
{
"payerId": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"payer": {
"bankCode": "SCB",
"accountNumber": "1234567890",
"accountName": "สมชาย สบายดี",
"accountNameEn": "Somchai Sabuydee"
},
"amount": "500.00",
"currency": "THB",
"method": "auto",
"reference": "withdraw-20001",
"webhookUrl": "https://partner.example.com/webhooks/payments",
"walletAddress": "string",
"network": "string"
}

Response 201 - data is PayoutObject

{
"data": {
"object": "payout",
"id": "pin_3f2b1c0d9e8f4a7b8c6d5e4f3a2b1c0d",
"reference": "order-10001",
"payerId": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"payer": {
"object": "payer",
"id": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"bankCode": "SCB",
"bankName": "Siam Commercial Bank",
"accountNumber": "1234567890",
"accountName": "สมชาย สบายดี",
"accountNameEn": "Somchai Sabuydee",
"status": "active",
"referralCode": null,
"createdAt": "2026-01-01T00:00:00.000Z"
},
"requestedAmount": "150.00",
"amount": "150.37",
"fee": "2.25",
"currency": "THB",
"method": "promptpay_qr",
"status": "pending",
"failureReason": null,
"webhookUrl": "https://partner.example.com/webhooks",
"payerAccount": {
"bankCode": "SCB",
"accountNumber": "1234567890",
"accountName": "Somchai Sabuydee"
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e",
"warnings": [
{
"code": "payer_name_differs",
"message": "An existing payer with this bank account was used. Its stored account name differs from the one sent and was kept; it is used for payment matching.",
"param": "payer.accountName"
}
]
}

Possible error HTTP statuses: 400, 401, 403, 404, 409, 422, 500

GET /v1/payouts/{id}

Parameters

NameInTypeRequiredDescription
idpathstringyese.g. pout_0f1e2d3c4b5a69788796a5b4c3d2e1f0

Response 200 - data is PayoutObject

{
"data": {
"object": "payout",
"id": "pin_3f2b1c0d9e8f4a7b8c6d5e4f3a2b1c0d",
"reference": "order-10001",
"payerId": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"payer": {
"object": "payer",
"id": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"bankCode": "SCB",
"bankName": "Siam Commercial Bank",
"accountNumber": "1234567890",
"accountName": "สมชาย สบายดี",
"accountNameEn": "Somchai Sabuydee",
"status": "active",
"referralCode": null,
"createdAt": "2026-01-01T00:00:00.000Z"
},
"requestedAmount": "150.00",
"amount": "150.37",
"fee": "2.25",
"currency": "THB",
"method": "promptpay_qr",
"status": "pending",
"failureReason": null,
"webhookUrl": "https://partner.example.com/webhooks",
"payerAccount": {
"bankCode": "SCB",
"accountNumber": "1234567890",
"accountName": "Somchai Sabuydee"
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e"
}

Possible error HTTP statuses: 400, 401, 403, 404, 500

POST /v1/payouts/{id}/cancel

Possible while pending, failed, queued, or submitted for more than 30 minutes.

Parameters

NameInTypeRequiredDescription
idpathstringyese.g. pout_0f1e2d3c4b5a69788796a5b4c3d2e1f0

Response 200 - data is PayoutObject

{
"data": {
"object": "payout",
"id": "pin_3f2b1c0d9e8f4a7b8c6d5e4f3a2b1c0d",
"reference": "order-10001",
"payerId": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"payer": {
"object": "payer",
"id": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"bankCode": "SCB",
"bankName": "Siam Commercial Bank",
"accountNumber": "1234567890",
"accountName": "สมชาย สบายดี",
"accountNameEn": "Somchai Sabuydee",
"status": "active",
"referralCode": null,
"createdAt": "2026-01-01T00:00:00.000Z"
},
"requestedAmount": "150.00",
"amount": "150.37",
"fee": "2.25",
"currency": "THB",
"method": "promptpay_qr",
"status": "pending",
"failureReason": null,
"webhookUrl": "https://partner.example.com/webhooks",
"payerAccount": {
"bankCode": "SCB",
"accountNumber": "1234567890",
"accountName": "Somchai Sabuydee"
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z"
},
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e"
}

Possible error HTTP statuses: 400, 401, 403, 404, 409, 500

GET /v1/payers

Newest first.

Parameters

NameInTypeRequiredDescription
limitquerynumber-Default 20. Range 1-100.
cursorquerystring-Opaque cursor from pagination.nextCursor of the previous page.
accountNumberquerystring-Contains match.
accountNamequerystring-Case-insensitive contains match.
bankCodequerystring-e.g. SCB

Response 200 - data is a list of PayerObject with pagination

{
"data": [
{
"object": "payer",
"id": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"bankCode": "SCB",
"bankName": "Siam Commercial Bank",
"accountNumber": "1234567890",
"accountName": "สมชาย สบายดี",
"accountNameEn": "Somchai Sabuydee",
"status": "active",
"referralCode": null,
"createdAt": "2026-01-01T00:00:00.000Z"
}
],
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e",
"pagination": {
"limit": 20,
"hasMore": true,
"nextCursor": "eyJvIjoyMH0"
}
}

Possible error HTTP statuses: 400, 401, 403, 500

POST /v1/payers

Request body (application/json)

FieldTypeRequiredDescription
bankCodestringyesBank code from GET /v1/banks. e.g. SCB
accountNumberstringyesDigits only. e.g. 1234567890
accountNamestringyese.g. สมชาย สบายดี
accountNameEnstring-e.g. Somchai Sabuydee
statusactive, inactive-Default active.
referralCodestring-Referral code, if any.
{
"bankCode": "SCB",
"accountNumber": "1234567890",
"accountName": "สมชาย สบายดี",
"accountNameEn": "Somchai Sabuydee",
"status": "active",
"referralCode": "string"
}

Response 201 - data is PayerObject

{
"data": {
"object": "payer",
"id": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"bankCode": "SCB",
"bankName": "Siam Commercial Bank",
"accountNumber": "1234567890",
"accountName": "สมชาย สบายดี",
"accountNameEn": "Somchai Sabuydee",
"status": "active",
"referralCode": null,
"createdAt": "2026-01-01T00:00:00.000Z"
},
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e"
}

Possible error HTTP statuses: 400, 401, 403, 422, 500

GET /v1/payers/{id}

Parameters

NameInTypeRequiredDescription
idpathstringyese.g. payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d

Response 200 - data is PayerObject

{
"data": {
"object": "payer",
"id": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"bankCode": "SCB",
"bankName": "Siam Commercial Bank",
"accountNumber": "1234567890",
"accountName": "สมชาย สบายดี",
"accountNameEn": "Somchai Sabuydee",
"status": "active",
"referralCode": null,
"createdAt": "2026-01-01T00:00:00.000Z"
},
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e"
}

Possible error HTTP statuses: 400, 401, 403, 404, 500

PATCH /v1/payers/{id}

Omitted fields keep their value.

Parameters

NameInTypeRequiredDescription
idpathstringyese.g. payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d

Request body (application/json)

FieldTypeRequiredDescription
bankCodestring-Bank code from GET /v1/banks. e.g. SCB
accountNumberstring-Digits only. e.g. 1234567890
accountNamestring-e.g. สมชาย สบายดี
accountNameEnstring-e.g. Somchai Sabuydee
statusactive, inactive-Default active.
referralCodestring-Referral code, if any.
{
"bankCode": "SCB",
"accountNumber": "1234567890",
"accountName": "สมชาย สบายดี",
"accountNameEn": "Somchai Sabuydee",
"status": "active",
"referralCode": "string"
}

Response 200 - data is PayerObject

{
"data": {
"object": "payer",
"id": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"bankCode": "SCB",
"bankName": "Siam Commercial Bank",
"accountNumber": "1234567890",
"accountName": "สมชาย สบายดี",
"accountNameEn": "Somchai Sabuydee",
"status": "active",
"referralCode": null,
"createdAt": "2026-01-01T00:00:00.000Z"
},
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e"
}

Possible error HTTP statuses: 400, 401, 403, 404, 422, 500

DELETE /v1/payers/{id}

Only payers without payments can be deleted.

Parameters

NameInTypeRequiredDescription
idpathstringyese.g. payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d

Response 200 - data is DeletedObject

{
"data": {
"id": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"deleted": true
},
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e"
}

Possible error HTTP statuses: 400, 401, 403, 404, 409, 500

GET /v1/payers/{id}/payments

Items are payin or payout objects (see object). Newest first.

Parameters

NameInTypeRequiredDescription
idpathstringyese.g. payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d
limitquerynumber-Default 20. Range 1-100.
cursorquerystring-Opaque cursor from pagination.nextCursor of the previous page.
statusquerypending, processing, in_review, succeeded, expired, canceled, rejected, failed[]-Comma-separated statuses.
referencequerystring-Exact match on your reference.
payerIdquerystring-e.g. payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d
createdFromquerystring-ISO-8601, inclusive. e.g. 2026-01-01T00:00:00Z
createdToquerystring-ISO-8601, inclusive. e.g. 2026-01-31T23:59:59Z

Response 200 - data is a list of PayinObject with pagination

{
"data": [
{
"object": "payin",
"id": "pin_3f2b1c0d9e8f4a7b8c6d5e4f3a2b1c0d",
"reference": "order-10001",
"payerId": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"payer": {
"object": "payer",
"id": "payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d",
"bankCode": "SCB",
"bankName": "Siam Commercial Bank",
"accountNumber": "1234567890",
"accountName": "สมชาย สบายดี",
"accountNameEn": "Somchai Sabuydee",
"status": "active",
"referralCode": null,
"createdAt": "2026-01-01T00:00:00.000Z"
},
"requestedAmount": "150.00",
"amount": "150.37",
"fee": "2.25",
"currency": "THB",
"method": "promptpay_qr",
"status": "pending",
"failureReason": null,
"webhookUrl": "https://partner.example.com/webhooks",
"payerAccount": {
"bankCode": "SCB",
"accountNumber": "1234567890",
"accountName": "Somchai Sabuydee"
},
"createdAt": "2026-01-01T00:00:00.000Z",
"updatedAt": "2026-01-01T00:00:00.000Z",
"returnUrl": "https://partner.example.com/return",
"checkoutUrl": "https://pay.example.com/3f2b1c0d-...",
"paymentImage": "data:image/png;base64,iVBORw0KGgo...",
"payTo": {
"bankCode": "KBANK",
"bankName": "Kasikorn Bank",
"accountNumber": "0987654321",
"accountName": "Example Co., Ltd.",
"promptpayId": "0812345678",
"walletAddress": "0xabc...",
"network": "BSC",
"qrPayload": "00020101021229370016A000000677010111011300668123456785802TH53037645406150.3763046572"
}
}
],
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e",
"pagination": {
"limit": 20,
"hasMore": true,
"nextCursor": "eyJvIjoyMH0"
}
}

Possible error HTTP statuses: 400, 401, 403, 404, 500

GET /v1/banks

Response 200 - data is an array of BankObject

{
"data": [
{
"object": "bank",
"code": "SCB",
"name": "Siam Commercial Bank",
"localName": "ธนาคารไทยพาณิชย์"
}
],
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e"
}

Possible error HTTP statuses: 400, 401, 403, 500

GET /v1/account

Response 200 - data is AccountObject

{
"data": {
"object": "account",
"name": "Example Partner",
"status": "active",
"payinsEnabled": true,
"payoutsEnabled": true,
"ipAllowListEnabled": true,
"limits": {
"payinMinimum": "100.00",
"payinMaximum": "50000.00",
"payoutMinimum": "100.00",
"payoutMaximum": "50000.00",
"dailyWithdrawalLimit": "0.00"
},
"balance": {
"currency": "THB",
"total": "125000.00",
"available": "120000.00"
},
"createdAt": "2026-01-01T00:00:00.000Z"
},
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e"
}

Possible error HTTP statuses: 400, 401, 403, 500

GET /v1/account/balance-history

from/to inclusive (YYYY-MM-DD, UTC+7), at most 31 days per request; longer ranges return 400 date_range_too_large. Entries are in date order.

Parameters

NameInTypeRequiredDescription
fromquerystring-YYYY-MM-DD (UTC+7), inclusive. Default: 6 days before to (a 7-day range). The range may span at most 31 days. e.g. 2026-01-01
toquerystring-YYYY-MM-DD (UTC+7), inclusive. Default: today. e.g. 2026-01-31

Response 200 - data is an array of BalanceHistoryEntry

{
"data": [
{
"date": "2026-01-01",
"balance": "120000.00"
}
],
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e"
}

Possible error HTTP statuses: 400, 401, 403, 500

Totals of succeeded payments for a date range

Section titled “Totals of succeeded payments for a date range”
GET /v1/reports/daily-summary

from/to inclusive (YYYY-MM-DD, UTC+7), at most 31 days per request; longer ranges return 400 date_range_too_large.

Parameters

NameInTypeRequiredDescription
fromquerystring-YYYY-MM-DD (UTC+7), inclusive. Default: 6 days before to (a 7-day range). The range may span at most 31 days. e.g. 2026-01-01
toquerystring-YYYY-MM-DD (UTC+7), inclusive. Default: today. e.g. 2026-01-31

Response 200 - data is DailySummaryObject

{
"data": {
"object": "daily_summary",
"from": "2026-01-01",
"to": "2026-01-07",
"currency": "THB",
"payinsSucceeded": "100000.00",
"payoutsSucceeded": "40000.00",
"withdrawalsSucceeded": "20000.00",
"topupsSucceeded": "0.00",
"fees": "1500.00"
},
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e"
}

Possible error HTTP statuses: 400, 401, 403, 500

POST /v1/withdrawals

Only the documented fields are accepted; anything else is rejected.

Parameters

NameInTypeRequiredDescription
Idempotency-Keyheaderstring-Optional, recommended. A unique key (8-255 characters of A-Z a-z 0-9 _ - : .) per create request, e.g. a UUID. Retrying with the same key and the same request within 24 hours returns the original response (header Idempotent-Replayed: true) instead of creating a second one.

Request body (application/json)

FieldTypeRequiredDescription
amountstringyesAmount to withdraw from your balance (THB) e.g. 10000.00
currencyTHB, USD, USDT-Currency to be paid out in. Default THB.
channelbank_transfer, cryptoyes
bankNamestring-bank_transfer: bank name. e.g. SCB
bankAccountNamestring-bank_transfer: account name.
bankAccountNumberstring-bank_transfer: account number.
walletAddressstring-crypto: wallet address.
networkstring-crypto: network, e.g. TRC20.
notestring-Max 500 chars.
{
"amount": "10000.00",
"currency": "THB",
"channel": "bank_transfer",
"bankName": "SCB",
"bankAccountName": "string",
"bankAccountNumber": "string",
"walletAddress": "string",
"network": "string",
"note": null
}

Response 201 - data is WithdrawalObject

{
"data": {
"object": "withdrawal",
"id": "wd_0a1b2c3d4e5f60718293a4b5c6d7e8f9",
"status": "pending",
"channel": "bank_transfer",
"requestedAmount": "10000.00",
"fee": "50.00",
"netAmount": "9950.00",
"currency": "THB",
"payoutAmount": "9950.00",
"exchangeRate": "1.000000",
"bankAccount": {
"bankName": null,
"accountName": null,
"accountNumber": null
},
"wallet": {
"address": null,
"network": null
},
"note": null,
"createdAt": "2026-01-01T00:00:00.000Z"
},
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e"
}

Possible error HTTP statuses: 400, 401, 403, 409, 422, 500

POST /v1/slips/verify

Send either JSON { "payload": "<QR payload>" } or multipart/form-data with a single file part (JPG/PNG, max 5 MB). For multipart the signature body hash is the SHA-256 of the file bytes.

Request body (application/json)

FieldTypeRequiredDescription
payloadstring-QR payload read from the slip (JSON requests)
checkDuplicateboolean-Ask the provider to flag duplicate slips.
{
"payload": "0041000600000101030040220...",
"checkDuplicate": true
}

Request body (multipart/form-data)

FieldTypeRequiredDescription
filefileyesJPG or PNG, max 5 MB.

For multipart send only the file part and sign the SHA-256 of the file bytes.

Response 200 - data is SlipVerificationObject

{
"data": {
"object": "slip_verification",
"verified": true,
"failureCode": null,
"payload": "0041000600000101030040220...",
"bankReference": "202601011234567890",
"transferredAt": "2026-01-01T00:04:12.000Z",
"amount": "100.00",
"currency": "THB",
"sender": {
"bankCode": null,
"bankName": null,
"accountNumber": null,
"accountName": null,
"accountNameEn": null
},
"receiver": {
"bankCode": null,
"bankName": null,
"accountNumber": null,
"accountName": null,
"accountNameEn": null
}
},
"requestId": "req_8f2k3j4h5g6f7d8s9a0q1w2e"
}

Possible error HTTP statuses: 400, 401, 403, 422, 429, 500

Shapes of the objects returned in data.

FieldTypeRequiredDescription
typeinvalid_request_error, authentication_error, permission_error, rate_limit_error, api_erroryes
codestringyese.g. payer_not_found
messagestringyese.g. No such payer.
paramstring-e.g. payerId
FieldTypeRequiredDescription
errorPartnerErrorDetailyes
requestIdstringyese.g. req_8f2k3j4h5g6f7d8s9a0q
FieldTypeRequiredDescription
limitnumberyese.g. 20
hasMorebooleanyese.g. true
nextCursorstring | nullyesPass as cursor to fetch the next page. e.g. eyJvIjoyMH0
FieldTypeRequiredDescription
objectstringyese.g. payer
idstringyese.g. payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d
bankCodestring | nullyese.g. SCB
bankNamestring | nullyese.g. Siam Commercial Bank
accountNumberstringyese.g. 1234567890
accountNamestringyese.g. สมชาย สบายดี
accountNameEnstring | nullyese.g. Somchai Sabuydee
statusactive, inactiveyese.g. active
referralCodestring | nullyes
createdAtstringyese.g. 2026-01-01T00:00:00.000Z
FieldTypeRequiredDescription
bankCodestring | nullyese.g. SCB
accountNumberstring | nullyese.g. 1234567890
accountNamestring | nullyese.g. Somchai Sabuydee
FieldTypeRequiredDescription
bankCodestring | null-e.g. KBANK
bankNamestring | null-e.g. Kasikorn Bank
accountNumberstring | null-e.g. 0987654321
accountNamestring | null-e.g. Example Co., Ltd.
promptpayIdstring | null-e.g. 0812345678
walletAddressstring | null-Crypto payins only. e.g. 0xabc...
networkstring | null-Crypto payins only. e.g. BSC
qrPayloadstring | nullyesThe QR text the payer must scan, so you can render your own QR code: the EMVCo/PromptPay payload (incl. the amount) for promptpay_qr, the Lao QR payload for lao_qr. null for bank_transfer and crypto. e.g. 00020101021229370016A000000677010111011300668123456785802TH53037645406150.3763046572
FieldTypeRequiredDescription
objectstringyese.g. payin
idstringyese.g. pin_3f2b1c0d9e8f4a7b8c6d5e4f3a2b1c0d
referencestring | nullyesYour own reference (order id) e.g. order-10001
payerIdstring | nullyese.g. payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d
payerPayerObject | null-
requestedAmountstringyesAmount requested. e.g. 150.00
amountstringyesAmount to be transferred. For payins this includes the unique decimals the payer must send. e.g. 150.37
feestringyese.g. 2.25
currencystringyese.g. THB
methodpromptpay_qr, bank_transfer, crypto, lao_qr, auto | nullyes
statuspending, processing, in_review, succeeded, expired, canceled, rejected, failedyes
failureReasonstring | nullyes
webhookUrlstring | nullyese.g. https://partner.example.com/webhooks
payerAccountBankAccountRef | nullyes
createdAtstringyese.g. 2026-01-01T00:00:00.000Z
updatedAtstringyese.g. 2026-01-01T00:00:00.000Z
returnUrlstring | nullyese.g. https://partner.example.com/return
checkoutUrlstring | nullyese.g. https://pay.example.com/3f2b1c0d-...
paymentImagestring | null-PNG data URI (QR code or transfer card). Only present on create and retrieve when requested with ?include=paymentImage.
payToPayTo | null-Where the payer must send money. Returned on create and retrieve only.
FieldTypeRequiredDescription
codepayer_name_differsyese.g. payer_name_differs
messagestringyese.g. An existing payer with this bank account was used. Its stored account name differs from the one sent and was kept; it is used for payment matching.
paramstring-e.g. payer.accountName
FieldTypeRequiredDescription
objectstringyese.g. slip_upload
matchedbooleanyesTrue if the slip matched and the payin succeeded.
slipStatusstring | nullyese.g. matched
payinPayinObjectyes
FieldTypeRequiredDescription
objectstringyese.g. payout
idstringyese.g. pin_3f2b1c0d9e8f4a7b8c6d5e4f3a2b1c0d
referencestring | nullyesYour own reference (order id) e.g. order-10001
payerIdstring | nullyese.g. payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d
payerPayerObject | null-
requestedAmountstringyesAmount requested. e.g. 150.00
amountstringyesAmount to be transferred. For payins this includes the unique decimals the payer must send. e.g. 150.37
feestringyese.g. 2.25
currencystringyese.g. THB
methodpromptpay_qr, bank_transfer, crypto, lao_qr, auto | nullyes
statuspending, processing, in_review, succeeded, expired, canceled, rejected, failedyes
failureReasonstring | nullyes
webhookUrlstring | nullyese.g. https://partner.example.com/webhooks
payerAccountBankAccountRef | nullyes
createdAtstringyese.g. 2026-01-01T00:00:00.000Z
updatedAtstringyese.g. 2026-01-01T00:00:00.000Z
FieldTypeRequiredDescription
idstringyese.g. payer_7c0a4b8e2f3d4a1b9c8d7e6f5a4b3c2d
deletedbooleanyese.g. true
FieldTypeRequiredDescription
objectstringyese.g. bank
codestringyese.g. SCB
namestringyese.g. Siam Commercial Bank
localNamestring | nullyese.g. ธนาคารไทยพาณิชย์
FieldTypeRequiredDescription
payinMinimumstring | nullyese.g. 100.00
payinMaximumstring | nullyese.g. 50000.00
payoutMinimumstring | nullyese.g. 100.00
payoutMaximumstring | nullyese.g. 50000.00
dailyWithdrawalLimitstring | nullyesDaily withdrawal limit, 0 means unlimited. e.g. 0.00
FieldTypeRequiredDescription
currencystringyese.g. THB
totalstringyese.g. 125000.00
availablestringyese.g. 120000.00
FieldTypeRequiredDescription
objectstringyese.g. account
namestringyese.g. Example Partner
statusstringyese.g. active
payinsEnabledbooleanyes
payoutsEnabledbooleanyes
ipAllowListEnabledbooleanyes
limitsAccountLimitsyes
balanceAccountBalanceyes
createdAtstringyese.g. 2026-01-01T00:00:00.000Z
FieldTypeRequiredDescription
datestringyesDay (UTC+7) e.g. 2026-01-01
balancestringyesBalance at end of day (THB) e.g. 120000.00
FieldTypeRequiredDescription
objectstringyese.g. daily_summary
fromstringyese.g. 2026-01-01
tostringyese.g. 2026-01-07
currencystringyese.g. THB
payinsSucceededstringyese.g. 100000.00
payoutsSucceededstringyese.g. 40000.00
withdrawalsSucceededstringyese.g. 20000.00
topupsSucceededstringyese.g. 0.00
feesstringyese.g. 1500.00
FieldTypeRequiredDescription
objectstringyese.g. withdrawal
idstringyese.g. wd_0a1b2c3d4e5f60718293a4b5c6d7e8f9
statuspending, processing, succeeded, rejectedyes
channelbank_transfer, cryptoyes
requestedAmountstringyesRequested amount (THB) e.g. 10000.00
feestringyesFee (THB) e.g. 50.00
netAmountstringyesRequested amount minus fee (THB) e.g. 9950.00
currencystringyesCurrency paid out. e.g. THB
payoutAmountstringyesAmount paid out in currency. e.g. 9950.00
exchangeRatestring | nullyese.g. 1.000000
bankAccountobject | nullyesDestination bank account (bank_transfer)
bankAccount.bankNamestring | null-
bankAccount.accountNamestring | null-
bankAccount.accountNumberstring | null-
walletobject | nullyesDestination wallet (crypto)
wallet.addressstring | null-
wallet.networkstring | null-
notestring | nullyes
createdAtstringyese.g. 2026-01-01T00:00:00.000Z
FieldTypeRequiredDescription
bankCodestring | nullyes
bankNamestring | nullyes
accountNumberstring | nullyes
accountNamestring | nullyes
accountNameEnstring | nullyes
FieldTypeRequiredDescription
objectstringyese.g. slip_verification
verifiedbooleanyes
failureCodeslip_not_found, duplicate_slip, amount_mismatch, receiver_mismatch, invalid_image, invalid_payload, verification_unavailable | nullyes
payloadstring | nullyes
bankReferencestring | nullyesBank transaction reference.
transferredAtstring | nullyes
amountstring | nullyese.g. 100.00
currencystring | nullyese.g. THB
senderSlipParty | nullyes
receiverSlipParty | nullyes