Reference
Limits & rates
Rate limits and the amount/volume caps applied at creation.
Rate limit
Going over the limit returns 429 with the code rate_limited. Wait a moment and try again.
| Endpoint | Limit | Scope |
|---|---|---|
All /v1/* | 300 requests / minute | per API key |
| Public checkout page | 120 requests / minute | per IP |
Amount & volume limits
Applied at creation. Values may differ per account; the defaults are below.
| Limit | Default | Rejected with |
|---|---|---|
| Minimum amount | Rp10.000 | 422 amount_too_small |
| Maximum amount | Rp10.000.000 | 422 amount_too_large |
| Requests / day | 100 | 429 daily_count_cap |
| Total amount / day | Rp50.000.000 | 429 daily_amount_cap |
| Expiry | 60 minutes (max 24 hours) | 422 expiry_too_long |
Days are counted in the Asia/Jakarta time zone, not UTC.
Before onboarding is active
An account whose onboarding is not yet active gets an additional lifetime allowance, applied instead of the daily caps above. It does not reset at midnight: the only thing that lifts it is completing verification. Payments already received are unaffected, and nothing is lost when the tier is reached — new payment requests are refused until verification is done.
| Limit | Default | Counts | Rejected with |
|---|---|---|---|
| Requests, lifetime | 10 | Every request ever created except canceled ones. Expired and failed requests still count. | 429 unverified_count_cap |
| Total amount, lifetime | Rp1.000.000 | Only money received or still receivable: pending and succeeded. An expired, failed or canceled request releases its share again. | 429 unverified_amount_cap |
Test-mode requests never consume either allowance and are never refused by it. The two codes are distinct from daily_count_cap and daily_amount_cap on purpose: waiting for tomorrow does nothing here, so retry logic should stop rather than back off.