Callback Notification
Callback Notification
When a pay-in / pay-out reaches a final status, Smilepayz sends an HTTP POST to your URL.
API orders only
Callbacks apply only to orders created via the Pay-in / Pay-out API. Payment Link orders from the merchant portal do not.
Flow: set URL → verify & update order → return SUCCESS.
1. Configure callback URL
- Sign in to the Merchant Portal. Toggle Sandbox (or Production) at the top.
- Configuration → API Setting → API Notify Address:
- Payin — pay-in notify URL
- Withdraw — pay-out notify URL
- Click Save.

Prefer HTTPS (443). Production URL / IP whitelist: Integration Info. Failed deliveries may retry — handle callbacks idempotently.
Prefer `tradeNo` as the idempotency key
Retries keep the same tradeNo. In Mexico (and similar regions), pay-in sub-orders may share the main order’s orderNo but each has its own tradeNo — use tradeNo for transaction-level idempotency, not orderNo alone. See Mexico Pay-in · Sub-order transaction & callback.
2. Verify signature (not request signing)
Verify before updating the order. Rules, Platform Public Key, and code samples are on a dedicated page (different from request signing):
See alsoCallback Signature3. Body & response
JSON body — common fields: orderNo, tradeNo, merchantId, status, money, transactionTime (yyyy-MM-ddTHH:mm:ss, order region timezone). Full fields: regional Pay-in / Pay-out → Notification/Callback.
After verify + persist, HTTP 200 body must be plain text:
SUCCESS
Note
After trim, body must exactly equal SUCCESS. Do not return JSON / HTML, or we retry.
Sandbox test
- Create a pay-in via API (
paymentMethodmust not be empty, e.g.QRISin Indonesia). - Portal Pay-in Order → Operate → Set Callback (success / fail).
- Check Callback Status.

In Production, final status triggers callbacks automatically — no Set Callback.
Troubleshooting
| Issue | Check |
|---|---|
| No callback | URL saved? Firewall / HTTPS cert |
| Verify fails | See Callback Signature |
| Set Callback useless | Order must be API-created; paymentMethod not empty |
| Keeps retrying | Exact SUCCESS after trim? |

