Analytics Ingest Keys

Update an ingest key's label, origin allowlist, or rate limit.

allowed_origins and rate_limit_per_minute are three-state: omit to leave unchanged, send null to clear, send a value to replace. Clearing allowed_origins allows any origin; clearing rate_limit_per_minute removes the limit.

patch/projects/{project_id}/analytics/ingest-keys/{key_id}

Request

  • Base URL: /api (relative, and the document was published on a file host, not at the API’s origin)
  • URL: /api/projects/{project_id}/analytics/ingest-keys/{key_id}
  • Auth: HTTP bearer

Path parameters

project_idinteger required

Project ID

key_idinteger required

Analytics ingest key ID

Request body

allowed_originsstring[] nullable

Absent = unchanged, null = clear (any origin allowed), array = replace.

namestring nullable

New operator-facing label. Absent leaves it unchanged. The column is NOT NULL, so there is no "clear" state — send a new label instead.

rate_limit_per_minuteinteger nullable

Absent = unchanged, null = clear (unlimited), value = replace.

Response

Ingest key updated

allowed_originsstring[] nullable

Exact origins (scheme://host[:port]) permitted to use this key from a browser. None or [] means any origin. This is a browser-enforced convenience control, not authentication — a non-browser client ignores Origin entirely.

created_atstring date-time required
created_by_user_idinteger nullable
environment_idinteger nullable

None means the key is scoped to the whole project. An environment-scoped key additionally attributes ingested data to that environment's current deployment, when it has one.

event_countinteger required
idinteger required
is_activeboolean required
last_used_atstring date-time nullable
namestring required

Operator-facing label.

project_idinteger required
public_keystring required

The ingest key itself, pa_ + 64 hex characters.

Not a secret. It is designed to ship in client-side JavaScript and is returned unmasked so operators can copy it. See the module docs.

rate_limit_per_minuteinteger nullable

None or <= 0 means unlimited.

revoked_atstring date-time nullable
updated_atstring date-time required

Example response

{
  "created_at": "2026-01-01T00:00:00Z",
  "last_used_at": "2026-01-01T00:00:00Z",
  "revoked_at": "2026-01-01T00:00:00Z",
  "updated_at": "2026-01-01T00:00:00Z"
}

Changes

No recorded changes to this operation across all 50 revisions of this API.