HTTP_TOOL_RATE_LIMITED and the AI silently moves on (it does NOT retry).
Layer 1, Per-tenant budget
This is the global cap. If your tenant is making 200 calls a minute spread across tools and agents, you’ll start hitting this limit and the AI will skip non-essential lookups.
Layer 2, Per-tool budget
Prevents one runaway tool from starving other tools on the same tenant. If your
lookup_routing tool gets hammered, check_balance keeps working.
How the bucket arithmetic works
What the AI sees when limited
The runtime returns:llm_message as the tool result and continues the conversation. It does NOT auto-retry. From the caller’s perspective the AI just decides it has enough information.
What the dashboard surfaces
Every invocation row in the Invocations panel includes the remaining tenant-bucket count at the time of the call (in the_meta.rate_limit_remaining field of the response body). Rows that hit a limit are flagged red with the HTTP_TOOL_RATE_LIMITED code.
Test fires count against your budget
The dashboard’s Send test button runs a real invocation, so it draws from the same per-tenant and per-tool buckets as production calls. There is no separate test allowance. If you hammer Send test while debugging, you can rate-limit your live agent, so test in bursts rather than in a tight loop.Asking for a higher quota
Both layers are hard-coded constants in v1. If your use case genuinely needs more (e.g. you run 100+ concurrent calls and every one chains 3-4 HTTP Tool lookups), open a support ticket with:- Your tenant ID.
- Approximate call volume per minute.
- Average HTTP Tool invocations per call.
Implementation note (for the curious)
Buckets live in the edge function’s module scope (Map<string, Bucket>). Supabase keeps the runtime warm under load, so bucket state survives across requests. Cold starts reset the bucket to full, a corner case where a tenant just over their limit might briefly get one or two extra calls through. We’re comfortable with this drift for v1; if you observe surprising behavior, file it under “we’d like to know.”
Next: Security restrictions
What URLs we block and why.

