---
# @generated by sylphx-gen 0.1.0 from contracts@e145cc7cf1bc9605f2b27439e5e17ed76a1a2fd7e7021906a013f7565e4a0cd5. Do not edit.
title: "RATE_LIMITED"
description: "RATE_LIMITED (RESOURCE_EXHAUSTED, HTTP 429): The rate limit is reached; see Retry-After."
type: reference
product: platform
summary: "The rate limit is reached; see Retry-After."
updated: 2026-09-28
nav: false
---

The rate limit is reached; see Retry-After.

**HTTP** 429 · **gRPC** `RESOURCE_EXHAUSTED` · [the error body](/docs/platform/errors)

## Returned by

| Method | Scope | What it does |
| --- | --- | --- |
| [`assets.assets.generate`](/docs/api/assets/generate) | `assets:write` | Records the recipes as assets and generates the variants that are missing. Each call is idempotent and works within a bounded time; call again until `pending` is 0. |
| [`broker.trust_policies.exchange_token`](/docs/api/trust_policies/exchange_token) | `broker:exchange` | Exchanges the caller's workload identity for a short-lived provider credential under a trust policy (RFC 8693 token exchange). The credential is narrowed to the request and cached per installation and permission set; a permission the Connection lacks is PERMISSION_DENIED with reason `CapabilityMissing`, never an outage. |
| [`events.topics.publish`](/docs/api/topics/publish) | `events:publish` | Publishes CloudEvents into a Topic, atomically. Replaying the same `source` + `id` with the same payload returns the stored event; a different payload fails with RESOURCE_ALREADY_EXISTS. |
| [`events.queues.send`](/docs/api/queues/send) | `events:publish` | Enqueues messages directly, without a Subscription. |
| [`events.queues.lease`](/docs/api/queues/lease) | `events:write` | Leases up to `max_messages` ready messages for the visibility timeout. |
| [`keys.keys.sign`](/docs/api/keys/sign) | `keys:sign` | Signs data or a digest with a SIGN key. Every use is audited. |
| [`keys.keys.verify`](/docs/api/keys/verify) | `keys:verify` | Verifies a signature made by a SIGN key. |
| [`keys.keys.encrypt`](/docs/api/keys/encrypt) | `keys:encrypt` | Encrypts data with an ENCRYPT key. |
| [`keys.keys.decrypt`](/docs/api/keys/decrypt) | `keys:decrypt` | Decrypts a ciphertext made by Encrypt with this key. |
| [`keys.keys.mac_sign`](/docs/api/keys/mac_sign) | `keys:sign` | Computes a MAC of data with a MAC key. |
| [`keys.keys.mac_verify`](/docs/api/keys/mac_verify) | `keys:verify` | Verifies a MAC made by a MAC key, in constant time. |
| [`localization.catalogs.sync`](/docs/api/catalogs/sync) | `localization:write` | Reads the source files and the committed translations into the catalog, then translates what is new or stale. Each call is idempotent and works within a bounded time; call again until `pending` is 0. |
| [`notify.mail_domains.verify`](/docs/api/mail_domains/verify) | `notify:write` | Checks the domain's DNS records now instead of on the next sweep. |
| [`notify.senders.verify`](/docs/api/senders/verify) | `notify:write` | Re-checks the sender's registration or credentials now. |
| [`notify.messages.create`](/docs/api/messages/create) | `notify:send` | Sends a Message. |
| [`observability.log_entries.write`](/docs/api/log_entries/write) | `observability:ingest` | Ingests a batch of log entries atomically. The same `Idempotency-Key` and digest replays the same batch; a different digest under the key conflicts. |
| [`observability.traces.write_spans`](/docs/api/traces/write_spans) | `observability:ingest` | Ingests a batch of spans atomically; a span's parent and time invariants are validated. Replay rules are those of WriteLogEntries. |
| [`observability.error_groups.capture`](/docs/api/error_groups/capture) | `observability:ingest` | Captures one error occurrence. It is grouped by `fingerprint` when the caller sets one, else by exception type and the symbolicated in-app stack; release is never part of the group. A new occurrence reopens a resolved group. Secrets and personal data are scrubbed by the environment's Scrubbing Policy before storage. A fingerprint-equal replay bills no second new-error unit. Under quota pressure the response says what to sample. Browsers call it with a publishable key that holds `observability:ingest` (CORS allowed, rate-limited per environment). |
| [`workflows.runs.start_batch`](/docs/api/runs/start_batch) | `workflows:run` | Starts a batch: a parent Run that fans out one child Run per item, each with a stable index and count. |
