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. 1

    Offer an amount

    GET /v1/p2p/available?currency=THB returns the amount options and a recommended set to show the customer.

  2. 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. 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. 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.

Before 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.

Read the P2P guide