Theme
Rate limits & pagination
digid pay enforces rate limits at the edge per key. Limits are contract values and may tighten as the service hardens; the dashboard shows your current quotas.
HTTP status
When you exceed a limit you receive 429 rate_limit_exceeded:
json
{ "error": { "type": "rate_limit_error", "code": "rate_limit_exceeded", "message": "Rate limit exceeded.", "param": null } }Responses include Retry-After (seconds). Back off and retry; do not retry in a tight loop.
Limits (contract values)
| Dimension | Contract value |
|---|---|
| Payments (create/confirm/cancel) | per-key, per-minute (documented in dashboard) |
| Reads (list/retrieve) | per-key, per-minute (documented in dashboard) |
| Webhook deliveries | firehose to you; your endpoint should be able to absorb bursts |
| Sandbox open keys | lower shared ceiling — see Sandbox |
If you need higher limits for a burst (promotions, migrations), contact support ahead of time.
Backoff
Standard retry posture:
429 / 5xx → retry with exponential backoff (e.g. 1s, 2s, 4s, … up to ~30s)
always reusing the same Idempotency-Key on mutating callsPagination
List endpoints are cursor-based:
?limit=25&starting_after=pi_...| Param | Meaning |
|---|---|
limit | Max results per page (1–100, default 25). |
starting_after | Opaque cursor from the previous page's last item. |
Response shape:
json
{
"object": "list",
"data": [ /* items */ ],
"has_more": true
}Walk pages until has_more is false. Cursors are stable for the duration of a walk; re-list for a fresh view.