{"slug": "foura-digest-jul-17-to-jul-24-2026", "title": "FourA Digest — Jul 17 to Jul 24, 2026", "summary": "FourA's API now returns HTTP 429 with a Retry-After header for quota-exceeded responses, matching OpenAI, GitHub, and Cloudflare. The pricing page shows Unlimited bandwidth on all public plans, and requests for exitCountries on plans without geo-targeting get a 403 error. The changes follow industry standards to improve client handling.", "body_md": "## Highlights\n\nQuota-exceeded responses now return HTTP 429 with a `Retry-After`\n\nheader, matching what OpenAI, GitHub, and Cloudflare send. The pricing page grew a Bandwidth row (every public plan is Unlimited). And requests that ask for `exitCountries`\n\non a plan without geo-targeting now get a clean 403 that names the parameter and the fix.\n\n## What's New\n\n### Quota limits speak HTTP 429 now, not 402\n\nIf you hit a plan limit (credits or bandwidth), the response is `429 Too Many Requests`\n\nwith `Retry-After`\n\non every reply and `resets_at`\n\nin the body pointing at your billing-period end. The `reason`\n\nfield tells you which limit you hit (`plan_limit_credits`\n\nor `plan_limit_bandwidth`\n\n) so it doesn't collide with per-minute rate limits.\n\nWhy the change? 402 sounds right (\"Payment Required\") but in practice it's how Stripe reports failed charges, and several HTTP clients and proxies mishandle it. OpenAI, GitHub, Twilio, and Cloudflare all reject exceeded quotas with 429 and a distinct error code. Following the herd here is the right move: every retry library on the planet already knows what to do with our responses.\n\nThe `Retry-After`\n\nvalue is capped at 24 hours for the sleep-and-retry crowd. If you want the real reset time, read `resets_at`\n\nfrom the JSON body.\n\n### Bandwidth on the pricing page: Unlimited\n\n/prices grew a Bandwidth row in the compare matrix. Every public plan ships uncapped bandwidth, and the matrix now says so out loud. It's the kind of thing you don't need until a prospect asks and you can't find the number. Now it's on the page.\n\nCustom plans that cap bandwidth show their GB figure in the same row.\n\n### geo-targeting gates itself with a proper error\n\nIf a request sends `exitCountries`\n\nwhile the plan doesn't include the geo-targeting feature, the response is `403`\n\nwith a message naming the parameter and how to fix it. Before, the request went through as if geo-targeting was allowed. Now it fails loudly at the door.\n\nRequests without `exitCountries`\n\nare untouched. This only kicks in when you're actually asking for the feature.\n\n### Small Dashboard fixes on Limits and Billing\n\nThree quality-of-life fixes:\n\n**Limits tab.** The saved sub-tab (Overview / API keys / Limits & Features) restores before paint, so you no longer see a wrong-tab flash on reload.**API Keys.** The search box uses the canonical search pattern instead of a naked input.**Billing.** The meta lines under Payment Method now render with the right styling (they were falling through unstyled before).\n\n## Under the Hood\n\nPlan-limit enforcement modes are now live-flippable. Each of the six data-plane limits (per-product concurrency, per-minute rate, browser-per-day, credits, bandwidth, features) plus the management-plane key-create check can be switched between off, signal, and enforce from a settings panel our team controls. No redeploy. A background refresher polls the setting every 60 seconds and the hot path stays synchronous.\n\nWhy does this matter to you? When a limit misbehaves in production, we can dial it back in a minute instead of shipping new code. It also lets us bring enforcement on gradually, per limit, watching what real traffic does at each step. Signal mode records the event without blocking; enforce switches on the 429 or 403 response. We wanted the intermediate step to be first-class rather than an emergency toggle.\n\n## Numbers\n\n`Retry-After`\n\ncap on quota rejections: 24 hours (real reset time in`resets_at`\n\n)- Runtime settings poll interval: 60 seconds\n- Public plans with uncapped bandwidth: all of them\n\nThe plan limiter has been the through-line for a month. Next up: enforcement on the first limits (credits and per-product concurrency look like the natural first pair), plus email warnings once the mailing phase ships.", "url": "https://wpnews.pro/news/foura-digest-jul-17-to-jul-24-2026", "canonical_source": "https://foura.ai/blog/foura-digest-2026-07-24", "published_at": "2026-07-24 11:40:34+00:00", "updated_at": "2026-07-24 12:08:46.734009+00:00", "lang": "en", "topics": ["developer-tools", "ai-infrastructure"], "entities": ["FourA", "OpenAI", "GitHub", "Cloudflare", "Twilio", "Stripe"], "alternates": {"html": "https://wpnews.pro/news/foura-digest-jul-17-to-jul-24-2026", "markdown": "https://wpnews.pro/news/foura-digest-jul-17-to-jul-24-2026.md", "text": "https://wpnews.pro/news/foura-digest-jul-17-to-jul-24-2026.txt", "jsonld": "https://wpnews.pro/news/foura-digest-jul-17-to-jul-24-2026.jsonld"}}