Slip Payment
Take a bank transfer that the customer backs with a slip. You open a session, the customer transfers and attaches the slip on our page, and the webhook tells you how it ended.
How it fits together
- 1
Offer an amount
GET /v1/p2p/available?currency=THB returns the amount options and a recommended set to show the customer.
- 2
Open a slip session
Call POST /v1/p2p/public/session/create with role DEPOSITOR, the amount, and the account the customer will transfer from. Send X-Idempotency-Key, and reuse it when you retry.
- 3
Send the customer to redirect_url
The customer transfers from the registered account and attaches the slip on that page. The link lives for ttl_seconds.
- 4
Close the order on the webhook
PAYMENT_PAID credits the order, and PAYMENT_FAILED means the slip was already used. An expired session sends nothing, so poll GET /v1/payment/info.
In this section
Option List
Amount options and the recommended set
GET/v1/p2p/available?currency=THBCreate P2P
A deposit on the P2P rail. Same call as Create Slip, plus how matching works
POST/v1/p2p/public/session/createCreate Slip
Open a session and hand the customer a hosted payment page
POST/v1/p2p/public/session/createSlip Verification
Check a slip image against an existing order
POST/api/slip/processBefore you start
Create Slip or Slip Verification
Create Slip hosts the whole flow, so you never handle the slip yourself. Slip Verification is for a slip image you already hold. It runs on https://crmwpayz.trustsig.xyz and always answers HTTP 200, so read success rather than the status code.
Transfer from the registered account
The slip clears only when the money comes from the sender_bank and sender_account you sent. A slip from any other account is rejected, even when the owner name is the same.
Do not credit early
A session that was created, or a customer who came back to return_url, does not mean the customer paid. Credit the order only on PAYMENT_PAID.
A session can run on P2P
When a withdrawal is available to match, the customer pays the withdrawer directly and has 10 minutes from seeing the destination account. Otherwise the platform switches to a bank deposit within the same request. Either way you get one PAYMENT_PAID.
