Payment Methods
Payment methods
Channel-by-channel guide — channel codes, TTLs, refund support, sandbox simulators
505pay accepts any of the channels below by passing the channel code in allowed_channels on POST /v1/payments/intents. The intent creation flow is the same for all channels — what changes is the TTL, the refund support, and the way the payer interacts with the QR / VA / e-wallet redirect.
Canonical create-intent call
curl -X POST https://sandbox.505pay.link/v1/payments/intents \
-H "Authorization: Bearer $PAYOPS_SECRET_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $YOUR_KEY" \
-d '{
"merchant_id": "'"$PAYOPS_MERCHANT_ID"'",
"amount_idr": 50000,
"max_uses": 1,
"allowed_channels": ["<CHANNEL_CODE>"]
}'<CHANNEL_CODE> is one of:
| Channel | allowed_channels value | TTL | Refund support | Settlement |
|---|---|---|---|---|
| QRIS (dynamic or static) | qris | 30 min / 24 h | Manual only | T+0 / T+1 |
| Virtual Account — BCA | va_bca | 24 h | Programmatic | T+1 |
| Virtual Account — BNI | va_bni | 24 h | Programmatic | T+1 |
| Virtual Account — BRI | va_bri | 24 h | Programmatic | T+1 |
| Virtual Account — Mandiri | va_mandiri | 24 h | Programmatic | T+1 |
| Virtual Account — Permata | va_permata | 24 h | Programmatic | T+1 |
| Virtual Account — CIMB | va_cimb | 24 h | Programmatic | T+1 |
| GoPay | ewallet_gopay | 15 min | Programmatic | T+1 |
| OVO | ewallet_ovo | 15 min | Programmatic | T+1 |
| DANA | ewallet_dana | 15 min | Programmatic | T+1 |
| ShopeePay | ewallet_shopeepay | 15 min | Programmatic | T+1 |
| LinkAja | ewallet_linkaja | 15 min | Programmatic | T+1 |
| Cash (POS) | cash | n/a (in-person) | Manual | T+0 |
| Over-the-Counter — Alfamart | otc_alfamart | 24 h | Programmatic | T+1 |
| Over-the-Counter — Indomaret | otc_indomaret | 24 h | Programmatic | T+1 |
| Akulaku (PayLater / BNPL) | akulaku | 30 d | Programmatic | T+1 |
| Kredivo (PayLater / BNPL) | kredivo | 30 d | Programmatic | T+1 |
| Card (3-D-Secure) | card_3ds | 24 h | Programmatic | T+1 |
Multi-channel intents
Pass multiple codes (["va_bca","va_bni","va_bri"]) to let the payer pick on the hosted checkout. Channel-specific behaviour (QR vs VA number vs redirect URL) is encoded in the channel-typed fields of the response.
Decision tree
- Need instant settlement (T+0)? → QRIS Dynamic
- B2B / invoicing? → Virtual Account
- Consumer checkout with loyalty? → GoPay, OVO, ShopeePay
- Student / young adult segment? → DANA
- International card? → Card 3DS
Per-channel detail
- QRIS Dynamic — real-time QR per transaction
- QRIS Static — one QR per merchant; amount entered by payer
- Virtual Account — BCA / BNI / BRI / Mandiri / Permata
- GoPay / OVO / DANA / ShopeePay
- Card 3DS
- Akulaku (PayLater)
- Kredivo (PayLater)
Sandbox simulators
| Channel | How to simulate completion in sandbox |
|---|---|
| QRIS Dynamic / Static | Dashboard → Payments → Intents → simulate |
| VA (all banks) | POST /v1/payments/intents/{id}/sandbox-complete |
| E-wallet (GoPay/OVO/DANA/ShopeePay) | Dashboard → Payments → Intents → simulate, or POST /v1/payments/intents/{id}/sandbox-complete |
| Card 3DS | POST /v1/payments/intents/{id}/3ds-callback?auth_code=4111111111111111 (approve) or 4000000000000002 (decline) |
| Akulaku (BNPL) | POST /v1/payments/intents/{id}/sandbox-complete |
| Kredivo (BNPL) | POST /v1/payments/intents/{id}/sandbox-complete |
Was this page helpful?