429, and how to get limits raised.
The three tiers of limits
Per-agent limits are your primary risk control.
daily_limit caps USDC spent per rolling 24 hours; the payments-per-hour cap prevents a runaway loop from draining the daily limit in seconds. A payment that would exceed either is rejected — it never reaches settlement.
Per-merchant aggregate limits protect merchants and the network from a single merchant absorbing abusive volume across many agents. If your legitimate volume approaches your merchant tier’s ceiling, appeal below — don’t shard across shell merchants, which violates the Terms of Service.
API request limits apply to all endpoints and are separate from payment limits: reads (polling payments, listing agents) count against them even though no money moves.
What a rate-limited response looks like
Exceeding any tier returns HTTP429 with error code RATE_LIMITED, a Retry-After header (seconds), and the standard rate-limit headers on every response:
Backoff strategy
On429, honor Retry-After when present; otherwise use exponential backoff with jitter so a fleet of agents doesn’t retry in lockstep:
Idempotency-Key header on POSTs so a retry can never double-submit a payment — see Error Handling.
Worked example: hitting the daily limit mid-day
An agent hasdaily_limit: "100.00" and makes a 4.00 USDC purchase roughly every 30 minutes.
- 00:00–12:30 — 25 payments settle normally, 100.00 USDC spent.
X-RateLimit-Remainingon the payment scope reads0. - 13:00 — payment 26 is rejected with
429 RATE_LIMITEDandRetry-After: 39600(11 hours: when the earliest spend rolls out of the 24h window). No settlement occurs, no fee is charged. - Correct behavior — the agent parks the task and schedules a retry for after the window resets, rather than hammering the endpoint. Your ops team sees the 80%-of-daily-limit alert from Wallet Usage Analytics hours earlier, at 10:00, and can decide whether to raise the limit before it bites.
- If this was legitimate demand — raise
daily_limitviaPATCH /agents/{id}(up to your account ceiling) or file an appeal.
Appealing a limit
If a SohoPay-set ceiling (per-merchant aggregate, API request rate, or your account’s maximumdaily_limit) is too low for real traffic:
- Email support@sohopay.xyz with subject “Rate limit increase”, the agent or merchant ID, current vs. requested limit, and a sentence on the use case driving the volume.
- Include 7+ days of real traffic (a Wallet Usage CSV export works) — increases are granted on demonstrated legitimate usage.
- Normal-priority response applies: under 8 hours per the support SLA. Increases usually take effect within 1 business day of approval.
Sandbox limits are intentionally low and are not raised — they exist so you can test 429 handling cheaply. See Testing for forcing rate-limit responses on demand.
Next steps
Error Handling
Retries, idempotency keys, and the full error-code catalogue.
Operator Liability
Why tight limits are your best defense against a compromised agent.
Wallet Usage Analytics
Alerts that warn you before an agent hits its ceiling.

