Makes a POST safe to retry for 24 hours: the same key, credential, path and body returns the stored response (Idempotent-Replayed: true) instead of running again. 422 if the key was used for a different request; 409 while the first is in flight.
Where POST /v1/ingest/{ingest_key} (no dataset segment) stores an event none of the project's mapping rules routes: the whole payload (the identity mapping) as one record in this dataset, fanned out to destinations, the live stream, AI triggers and workflows like any other record, and charged the same single quota event. The 201 then answers routed: [""], records: 1, fallback: true. A dataset named in the path (POST /v1/ingest/{ingest_key}/{dataset}) is written directly and endpoint URLs never use it. Must be a valid dataset name; a non-string value is stored as default. Listed with the key, carried over on rotation, and fixed at creation (#280).
When the key stops authenticating, at ingest and on /v1/stream alike. Must be in the future; null means never. A key past it answers 404 'Unknown ingest key', exactly like a revoked one.
IP addresses or CIDR ranges allowed to use this credential, validated exactly as the workspace and project allowlists are. [] or null removes the restriction (stored as null). A request must pass every allowlist that is set: this one, the project's and the workspace's. Refused requests get 403 'Source IP not allowed' and an ingest_ip_blocked audit row.
Maximum array length: 64
An IPv4 or IPv6 address, or a CIDR range.
Example:
["203.0.113.0/24", "2001:db8::/32"]
Response
Created. key is the full ik_live_ token and signing_secret the whsec_ value - both are shown exactly once and only the key hash / encrypted secret are stored.
The created ingest key, as GET by id returns it (#201).
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Hookie","description":"Capture, route and deliver webhooks on Cloudflare — ingest anything, route it into datasets with rules, and deliver signed events with retries, AI triggers and multi-step workflows.","colors":{"primary":"#2B56A1","light":"#749ADC","dark":"#2CB8B8"},"logo":{"light":"https://mintcdn.com/hookie-ai/3zmwtACPzz3wb-OX/logo/light.svg?fit=max\u0026auto=format\u0026n=3zmwtACPzz3wb-OX\u0026q=85\u0026s=3d05bb847a5407bc7e75e7270aafc101","dark":"https://mintcdn.com/hookie-ai/3zmwtACPzz3wb-OX/logo/dark.svg?fit=max\u0026auto=format\u0026n=3zmwtACPzz3wb-OX\u0026q=85\u0026s=3a34a943f368167074930496ba10fa63","href":"https://hookie.ai"},"favicon":"https://mintcdn.com/hookie-ai/3zmwtACPzz3wb-OX/favicon.svg?fit=max\u0026auto=format\u0026n=3zmwtACPzz3wb-OX\u0026q=85\u0026s=e81ffa68ca681fd9823d22e0e57d7003","api":{"openapi":"openapi.json","playground":{"display":"interactive"},"examples":{"languages":["bash","javascript","python"]}},"navbar":{"links":[{"href":"https://hookie.ai","label":"Hookie.ai"},{"href":"https://hookie.ai/use-cases","label":"Use cases"},{"href":"https://hookie.ai/pricing","label":"Pricing"}],"primary":{"type":"button","label":"Open console","href":"https://app.hookie.ai/"}},"footer":{"socials":{"website":"https://hookie.ai"},"links":[{"header":"Product","items":[{"label":"Features","href":"https://hookie.ai/features"},{"label":"Use cases","href":"https://hookie.ai/use-cases"},{"label":"Pricing","href":"https://hookie.ai/pricing"},{"label":"Changelog","href":"https://hookie.ai/changelog"},{"label":"Status","href":"https://hookie.ai/status"}]},{"header":"Docs","items":[{"label":"Quickstart","href":"/quickstart"},{"label":"API reference","href":"/api-reference"},{"label":"Connected agents","href":"/connected-agents"}]},{"header":"Company","items":[{"label":"Security","href":"https://hookie.ai/security"},{"label":"Contact","href":"https://hookie.ai/contact"}]},{"header":"Legal","items":[{"label":"Terms","href":"https://hookie.ai/legal/terms"},{"label":"Privacy","href":"https://hookie.ai/legal/privacy"},{"label":"Acceptable use","href":"https://hookie.ai/legal/acceptable-use"}]}]},"styling":{"codeblocks":"dark","latex":true},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"hookie-ai","hasAudioNarration":false,"actualSubdomain":"hookie-ai","customDomains":["docs.hookie.ai"],"gitSource":{"type":"github","owner":"bcusack1996","repo":"hookie-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6acb37193d9a94205f095409","collectionId":"0e08d911-dc25-4671-83b6-91f9acd96a01","liveDeploymentHistoryId":"6acb37193d9a94205f095409","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6acb37193d9a94205f095409","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"default","tag":"API reference","count":224},{"language":"default","tag":"Workspace","count":26},{"language":"default","tag":"Guides","count":20},{"language":"default","tag":"Customer Portal","count":18},{"language":"default","tag":"Portals","count":12},{"language":"default","tag":"Ingest","count":10},{"language":"default","tag":"SSO","count":10},{"language":"default","tag":"Workflows","count":10},{"language":"default","tag":"Concepts","count":9},{"language":"default","tag":"Webhooks","count":9}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"privacy":{"consentBanner":{"enabled":true}},"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/ingest-keys/issue-an-ingest-key","slug":"/api-reference/ingest-keys/issue-an-ingest-key","pageMetadata":{"title":"Issue an ingest key","description":"Top-level alias: POST /admin/api/ingest-keys. Write role required.","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/ingest-keys","href":"/api-reference/ingest-keys/issue-an-ingest-key","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Top-level alias: POST /admin/api/ingest-keys. Write role required.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"codeStyling":"dark","config":{},"pageMetadata":{"title":"Issue an ingest key","description":"Top-level alias: POST /admin/api/ingest-keys. Write role required.","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/ingest-keys","href":"/api-reference/ingest-keys/issue-an-ingest-key","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"createIngestKey","summary":"Issue an ingest key","tags":["Ingest keys"],"responses":{"201":"b78d0594-1634-4a93-bec1-0a8b6b49181d","400":"5dfba00b-cd08-4d38-bdad-9ccfa03fc339","401":"89164974-16a2-4237-b89e-2517697f8460","403":"4f7a468c-399a-44d5-9f9a-811df8df8c00","429":"d977b8c4-63a2-4ca8-816a-4d96540ed4a6","500":"c9b7c88e-81b2-4754-8838-5f2ec8bb9ad1"},"description":"Top-level alias: POST /admin/api/ingest-keys. Write role required.","parameters":["a5deacc8-e2e5-4257-9240-6a636600ef40","37e48dfa-31bb-4f50-8423-84e59321b0f8"],"requestBody":"571f5079-53e0-493b-90a0-69073c5da107","security":["9a9599cf-005a-4898-8fb7-7d12494043a0","29371729-3b3d-49bf-9f9c-05f88b4dac08","f9d17e92-5ef9-413a-961a-bb092e00cd9a"],"method":"post","type":"path","servers":["0ea1ddc9-3a31-4421-86e4-db5233ac2213","d5e32d1f-0c83-4838-aa53-3e0ffb5d5c54"],"path":"/admin/api/projects/{project_id}/ingest-keys","baseUrlOptions":["https://app.hookie.ai","https://app.preview.hookie.ai"],"title":"Issue an ingest key","codeSamples":[],"requestExampleLanguages":["bash","javascript","python"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"a5deacc8-e2e5-4257-9240-6a636600ef40":{"name":"project_id","in":"path","required":true,"description":"Project id (UUID) belonging to the caller workspace.","schema":{"type":"string","isRequired":true,"description":"Project id (UUID) belonging to the caller workspace.","uniqueKey":"","typeLabel":"string"}},"37e48dfa-31bb-4f50-8423-84e59321b0f8":{"name":"Idempotency-Key","in":"header","required":false,"description":"Makes a POST safe to retry for 24 hours: the same key, credential, path and body returns the stored response (`Idempotent-Replayed: true`) instead of running again. 422 if the key was used for a different request; 409 while the first is in flight.","schema":{"type":"string","minLength":1,"maxLength":255,"isRequired":false,"description":"Makes a POST safe to retry for 24 hours: the same key, credential, path and body returns the stored response (`Idempotent-Replayed: true`) instead of running again. 422 if the key was used for a different request; 409 while the first is in flight.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":80,"isRequired":true,"uniqueKey":"name","typeLabel":"string"},"dataset_default":{"type":"string","pattern":"^[A-Za-z][A-Za-z0-9_]{0,62}$","default":"default","description":"Where POST /v1/ingest/{ingest_key} (no dataset segment) stores an event none of the project's mapping rules routes: the whole payload (the identity mapping) as one record in this dataset, fanned out to destinations, the live stream, AI triggers and workflows like any other record, and charged the same single quota event. The 201 then answers routed: [\"\u003cthis dataset>\"], records: 1, fallback: true. A dataset named in the path (POST /v1/ingest/{ingest_key}/{dataset}) is written directly and endpoint URLs never use it. Must be a valid dataset name; a non-string value is stored as default. Listed with the key, carried over on rotation, and fixed at creation (#280).","uniqueKey":"dataset_default","typeLabel":"string"},"require_signature":{"type":"boolean","default":false,"description":"Only the literal true enables it. When enabled a signing secret is generated and returned once.","uniqueKey":"require_signature","typeLabel":"boolean"},"expires_at":{"oneOf":[{"type":"string","format":"date-time","description":"When the key stops authenticating, at ingest and on /v1/stream alike. Must be in the future; null means never. A key past it answers 404 'Unknown ingest key', exactly like a revoked one.","uniqueKey":"expires_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the key stops authenticating, at ingest and on /v1/stream alike. Must be in the future; null means never. A key past it answers 404 'Unknown ingest key', exactly like a revoked one.","uniqueKey":"expires_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"expires_at","typeLabel":"string\u003cdate-time> | null"},"ip_allowlist":{"oneOf":[{"type":"array","maxItems":64,"items":{"type":"string","description":"An IPv4 or IPv6 address, or a CIDR range.","uniqueKey":"ip_allowlist.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"IP addresses or CIDR ranges allowed to use this credential, validated exactly as the workspace and project allowlists are. [] or null removes the restriction (stored as null). A request must pass every allowlist that is set: this one, the project's and the workspace's. Refused requests get 403 'Source IP not allowed' and an ingest_ip_blocked audit row.","example":["203.0.113.0/24","2001:db8::/32"],"uniqueKey":"ip_allowlist.oneOf.0","typeLabel":"string[]"},{"type":"null","maxItems":64,"items":{"type":"string","description":"An IPv4 or IPv6 address, or a CIDR range."},"description":"IP addresses or CIDR ranges allowed to use this credential, validated exactly as the workspace and project allowlists are. [] or null removes the restriction (stored as null). A request must pass every allowlist that is set: this one, the project's and the workspace's. Refused requests get 403 'Source IP not allowed' and an ingest_ip_blocked audit row.","example":["203.0.113.0/24","2001:db8::/32"],"uniqueKey":"ip_allowlist.oneOf.1","typeLabel":"null"}],"uniqueKey":"ip_allowlist","typeLabel":"string[] | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"\u003cstring>","dataset_default":"default","require_signature":false,"expires_at":"2023-11-07T05:31:56Z","ip_allowlist":["203.0.113.0/24","2001:db8::/32"]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"b78d0594-1634-4a93-bec1-0a8b6b49181d":{"description":"Created. key is the full ik_live_ token and signing_secret the whsec_ value - both are shown exactly once and only the key hash / encrypted secret are stored.","content":{"application/json":{"schema":{"type":"object","required":["id","key","signing_secret"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"key":{"type":"string","description":"ik_live_ followed by 48 hex characters.","isRequired":true,"uniqueKey":"key","typeLabel":"string"},"signing_secret":{"oneOf":[{"type":"string","description":"Present only when require_signature was true; otherwise null.","isRequired":true,"uniqueKey":"signing_secret.oneOf.0","typeLabel":"string"},{"type":"null","description":"Present only when require_signature was true; otherwise null.","isRequired":true,"uniqueKey":"signing_secret.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"signing_secret","typeLabel":"string | null"},"key_prefix":{"type":"string","description":"The first 16 characters, which is all the list shows from now on.","uniqueKey":"key_prefix","typeLabel":"string"},"expires_at":{"oneOf":[{"type":"string","format":"date-time","uniqueKey":"expires_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","uniqueKey":"expires_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"expires_at","typeLabel":"string\u003cdate-time> | null"},"ip_allowlist":{"type":"array","items":{"type":"string","uniqueKey":"ip_allowlist.items.[INDEX]","typeLabel":"string"},"description":"The normalised allowlist; [] for any address.","uniqueKey":"ip_allowlist","typeLabel":"string[]"},"ingest_key":{"type":"object","required":["id","name","key_prefix","dataset_default","require_signature","ip_allowlist","created_at","last_used_at","revoked_at","expires_at","replaced_by","status"],"properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"ingest_key.id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"ingest_key.name","typeLabel":"string"},"key_prefix":{"type":"string","description":"First 16 characters of the issued token.","isRequired":true,"uniqueKey":"ingest_key.key_prefix","typeLabel":"string"},"dataset_default":{"type":"string","isRequired":true,"uniqueKey":"ingest_key.dataset_default","typeLabel":"string"},"require_signature":{"type":"integer","enum":[0,1],"isRequired":true,"uniqueKey":"ingest_key.require_signature","typeLabel":"enum\u003cinteger>"},"ip_allowlist":{"oneOf":[{"type":"string","description":"The allowlist as stored: a JSON array of IPs/CIDRs encoded as a string, or null for any address.","isRequired":true,"uniqueKey":"ingest_key.ip_allowlist.oneOf.0","typeLabel":"string"},{"type":"null","description":"The allowlist as stored: a JSON array of IPs/CIDRs encoded as a string, or null for any address.","isRequired":true,"uniqueKey":"ingest_key.ip_allowlist.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"ingest_key.ip_allowlist","typeLabel":"string | null"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"ingest_key.created_at","typeLabel":"string\u003cdate-time>"},"last_used_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"ingest_key.last_used_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"ingest_key.last_used_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"ingest_key.last_used_at","typeLabel":"string\u003cdate-time> | null"},"revoked_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"ingest_key.revoked_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"ingest_key.revoked_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"ingest_key.revoked_at","typeLabel":"string\u003cdate-time> | null"},"expires_at":{"oneOf":[{"type":"string","format":"date-time","description":"When the key stops authenticating; null means never.","isRequired":true,"uniqueKey":"ingest_key.expires_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the key stops authenticating; null means never.","isRequired":true,"uniqueKey":"ingest_key.expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"ingest_key.expires_at","typeLabel":"string\u003cdate-time> | null"},"replaced_by":{"oneOf":[{"type":"string","description":"After a rotation, the id of the key that replaced this one.","isRequired":true,"uniqueKey":"ingest_key.replaced_by.oneOf.0","typeLabel":"string"},{"type":"null","description":"After a rotation, the id of the key that replaced this one.","isRequired":true,"uniqueKey":"ingest_key.replaced_by.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"ingest_key.replaced_by","typeLabel":"string | null"},"status":{"type":"string","enum":["active","expired","revoked"],"description":"Only an active key authenticates.","isRequired":true,"uniqueKey":"ingest_key.status","typeLabel":"enum\u003cstring>"}},"description":"The created ingest key, as GET by id returns it (#201).","uniqueKey":"ingest_key","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"\u003cstring>","key":"\u003cstring>","signing_secret":"\u003cstring>","key_prefix":"\u003cstring>","expires_at":"2023-11-07T05:31:56Z","ip_allowlist":["\u003cstring>"],"ingest_key":{"id":"\u003cstring>","name":"\u003cstring>","key_prefix":"\u003cstring>","dataset_default":"\u003cstring>","require_signature":0,"ip_allowlist":"\u003cstring>","created_at":"2023-11-07T05:31:56Z","last_used_at":"2023-11-07T05:31:56Z","revoked_at":"2023-11-07T05:31:56Z","expires_at":"2023-11-07T05:31:56Z","replaced_by":"\u003cstring>","status":"active"}}}},"exampleType":"generated"}},"exampleType":"generated"},"5dfba00b-cd08-4d38-bdad-9ccfa03fc339":{"description":"Key name is required (at most 80 characters), dataset_default is not a valid dataset name, expires_at is not a future timestamp, or ip_allowlist is not an array of valid IPs/CIDRs (at most 64).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable reason.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"retry_after":{"type":"integer","description":"Seconds to wait. Present on 429.","uniqueKey":"retry_after","typeLabel":"integer"},"upgrade_url":{"type":"string","format":"uri","description":"Present on a monthly-quota 429, and on a `member_limit_reached` 403 (the console's Settings → Plan \u0026 billing).","uniqueKey":"upgrade_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","description":"Machine-readable reason, where the status alone is ambiguous. `workspace_suspended` (403): the workspace is suspended; `delivery_allowance_exhausted` (429): a replay was refused because the monthly delivery allowance is used. `endpoint_disabled` (503): the endpoint is switched off; `handshake_failed`: a provider URL-verification challenge could not be answered (#193). `missing_header`, `bad_signature`, `stale_timestamp` (401): an endpoint's provider signature check failed; `scheme` names the check. `portal_customer_mismatch` (409): a portal token was requested for, or the vendor switched on the endpoint of, a customer other than the one the portal now serves (PORT-2g); `customer_id` and `customer_name` name that customer. Agent self-registration (#331), on /v1/agents/register: `rate_limited` (429), `agent_registration_disabled` and `agent_registration_unavailable` (503), `invalid_body`, `invalid_agent_name`, `invalid_operator_contact`, `terms_not_accepted` (with `terms_version`), `proof_of_work_required`, `invalid_challenge`, `challenge_expired`, `invalid_proof_of_work`, `invalid_idempotency_key` (400), `body_too_large` (413), `already_registered`, `registration_in_progress`, `challenge_spent` (409, with `account_id`), `daily_cap_reached`, `source_daily_limit` (429), `identity_provider_error` (502), `registration_incomplete` (503).","uniqueKey":"reason","typeLabel":"string"},"code":{"type":"string","enum":["agent_scope_insufficient","insufficient_role","agent_not_permitted","member_limit_reached"],"description":"Present on a 403 to an OAuth-connected agent, and on a member-limit 403 to anyone. `agent_scope_insufficient`: the agent's grant is below what the call needs, and widening it would let the call through (see `required_scope` and `manage_url`). `insufficient_role`: the user's OWN workspace role does not allow the call, so no grant can — a workspace owner or admin has to change the user's role first, in the console under Settings → Members. `agent_not_permitted`: no connected agent or API key may do this at any scope (billing, platform admin, managing connected agents, a destination's signing secret, invites of any kind, changing a role, removing a member, transferring ownership, listing or switching a person's workspaces, and creating API keys). To a self-registered agent account nobody has claimed yet (#331) it also carries `claim_required: true`: a person must claim the workspace with the claim link from registration before anyone can do it. `member_limit_reached` (#308): the workspace already has as many members as its plan allows, so an invite cannot be created or accepted; `max_members`, `members` and `upgrade_url` say how many and where to upgrade.","uniqueKey":"code","typeLabel":"enum\u003cstring>"},"required_scope":{"type":"string","enum":["hookie:read","hookie:write","hookie:manage"],"description":"With `code`: the scope the refused call needs.","uniqueKey":"required_scope","typeLabel":"enum\u003cstring>"},"granted_scopes":{"type":"array","items":{"type":"string","uniqueKey":"granted_scopes.items.[INDEX]","typeLabel":"string"},"description":"With `code`: the scopes the agent's grant holds now.","uniqueKey":"granted_scopes","typeLabel":"string[]"},"manage_url":{"type":"string","format":"uri","description":"With `code: \"agent_scope_insufficient\"` only: the console's Settings → Connected agents page, opened on this agent (`…/#/settings/agents?client=\u003cclient_id>`), where its user widens the grant. The change applies on the agent's next request.","uniqueKey":"manage_url","typeLabel":"string\u003curi>"},"scheme":{"type":"string","description":"Present on a signature 401: the endpoint's verification scheme.","uniqueKey":"scheme","typeLabel":"string"},"max_members":{"type":"integer","description":"With `code: \"member_limit_reached\"`: the plan's member limit.","uniqueKey":"max_members","typeLabel":"integer"},"members":{"type":"integer","description":"With `code: \"member_limit_reached\"`: the workspace's members now.","uniqueKey":"members","typeLabel":"integer"},"customer_id":{"oneOf":[{"type":"string","description":"On a `portal_customer_mismatch` 409: the customer the portal already serves.","uniqueKey":"customer_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"On a `portal_customer_mismatch` 409: the customer the portal already serves.","uniqueKey":"customer_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer_id","typeLabel":"string | null"},"customer_name":{"oneOf":[{"type":"string","description":"On a `portal_customer_mismatch` 409: that customer's display name, if one was given.","uniqueKey":"customer_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"On a `portal_customer_mismatch` 409: that customer's display name, if one was given.","uniqueKey":"customer_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer_name","typeLabel":"string | null"},"account_id":{"type":"string","description":"On a 409 from POST /v1/agents/register: the agent account the earlier request created (or is creating). Never accompanied by a credential.","uniqueKey":"account_id","typeLabel":"string"},"terms_version":{"type":"string","description":"On a `terms_not_accepted` 400: the Terms version `accept_terms` must equal.","uniqueKey":"terms_version","typeLabel":"string"},"claim_required":{"type":"boolean","description":"With `code: \"agent_not_permitted\"`, to a self-registered agent account nobody has claimed (#331): the refused action needs a person, who first claims the workspace with the claim link from the registration response (`claim.url`).","uniqueKey":"claim_required","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","retry_after":123,"upgrade_url":"\u003cstring>","reason":"\u003cstring>","code":"agent_scope_insufficient","required_scope":"hookie:read","granted_scopes":["\u003cstring>"],"manage_url":"\u003cstring>","scheme":"\u003cstring>","max_members":123,"members":123,"customer_id":"\u003cstring>","customer_name":"\u003cstring>","account_id":"\u003cstring>","terms_version":"\u003cstring>","claim_required":true}}},"exampleType":"generated"}},"exampleType":"generated"},"89164974-16a2-4237-b89e-2517697f8460":{"description":"Not signed in, or the agent bearer token is invalid, unknown or revoked.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable reason.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"retry_after":{"type":"integer","description":"Seconds to wait. Present on 429.","uniqueKey":"retry_after","typeLabel":"integer"},"upgrade_url":{"type":"string","format":"uri","description":"Present on a monthly-quota 429, and on a `member_limit_reached` 403 (the console's Settings → Plan \u0026 billing).","uniqueKey":"upgrade_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","description":"Machine-readable reason, where the status alone is ambiguous. `workspace_suspended` (403): the workspace is suspended; `delivery_allowance_exhausted` (429): a replay was refused because the monthly delivery allowance is used. `endpoint_disabled` (503): the endpoint is switched off; `handshake_failed`: a provider URL-verification challenge could not be answered (#193). `missing_header`, `bad_signature`, `stale_timestamp` (401): an endpoint's provider signature check failed; `scheme` names the check. `portal_customer_mismatch` (409): a portal token was requested for, or the vendor switched on the endpoint of, a customer other than the one the portal now serves (PORT-2g); `customer_id` and `customer_name` name that customer. Agent self-registration (#331), on /v1/agents/register: `rate_limited` (429), `agent_registration_disabled` and `agent_registration_unavailable` (503), `invalid_body`, `invalid_agent_name`, `invalid_operator_contact`, `terms_not_accepted` (with `terms_version`), `proof_of_work_required`, `invalid_challenge`, `challenge_expired`, `invalid_proof_of_work`, `invalid_idempotency_key` (400), `body_too_large` (413), `already_registered`, `registration_in_progress`, `challenge_spent` (409, with `account_id`), `daily_cap_reached`, `source_daily_limit` (429), `identity_provider_error` (502), `registration_incomplete` (503).","uniqueKey":"reason","typeLabel":"string"},"code":{"type":"string","enum":["agent_scope_insufficient","insufficient_role","agent_not_permitted","member_limit_reached"],"description":"Present on a 403 to an OAuth-connected agent, and on a member-limit 403 to anyone. `agent_scope_insufficient`: the agent's grant is below what the call needs, and widening it would let the call through (see `required_scope` and `manage_url`). `insufficient_role`: the user's OWN workspace role does not allow the call, so no grant can — a workspace owner or admin has to change the user's role first, in the console under Settings → Members. `agent_not_permitted`: no connected agent or API key may do this at any scope (billing, platform admin, managing connected agents, a destination's signing secret, invites of any kind, changing a role, removing a member, transferring ownership, listing or switching a person's workspaces, and creating API keys). To a self-registered agent account nobody has claimed yet (#331) it also carries `claim_required: true`: a person must claim the workspace with the claim link from registration before anyone can do it. `member_limit_reached` (#308): the workspace already has as many members as its plan allows, so an invite cannot be created or accepted; `max_members`, `members` and `upgrade_url` say how many and where to upgrade.","uniqueKey":"code","typeLabel":"enum\u003cstring>"},"required_scope":{"type":"string","enum":["hookie:read","hookie:write","hookie:manage"],"description":"With `code`: the scope the refused call needs.","uniqueKey":"required_scope","typeLabel":"enum\u003cstring>"},"granted_scopes":{"type":"array","items":{"type":"string","uniqueKey":"granted_scopes.items.[INDEX]","typeLabel":"string"},"description":"With `code`: the scopes the agent's grant holds now.","uniqueKey":"granted_scopes","typeLabel":"string[]"},"manage_url":{"type":"string","format":"uri","description":"With `code: \"agent_scope_insufficient\"` only: the console's Settings → Connected agents page, opened on this agent (`…/#/settings/agents?client=\u003cclient_id>`), where its user widens the grant. The change applies on the agent's next request.","uniqueKey":"manage_url","typeLabel":"string\u003curi>"},"scheme":{"type":"string","description":"Present on a signature 401: the endpoint's verification scheme.","uniqueKey":"scheme","typeLabel":"string"},"max_members":{"type":"integer","description":"With `code: \"member_limit_reached\"`: the plan's member limit.","uniqueKey":"max_members","typeLabel":"integer"},"members":{"type":"integer","description":"With `code: \"member_limit_reached\"`: the workspace's members now.","uniqueKey":"members","typeLabel":"integer"},"customer_id":{"oneOf":[{"type":"string","description":"On a `portal_customer_mismatch` 409: the customer the portal already serves.","uniqueKey":"customer_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"On a `portal_customer_mismatch` 409: the customer the portal already serves.","uniqueKey":"customer_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer_id","typeLabel":"string | null"},"customer_name":{"oneOf":[{"type":"string","description":"On a `portal_customer_mismatch` 409: that customer's display name, if one was given.","uniqueKey":"customer_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"On a `portal_customer_mismatch` 409: that customer's display name, if one was given.","uniqueKey":"customer_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer_name","typeLabel":"string | null"},"account_id":{"type":"string","description":"On a 409 from POST /v1/agents/register: the agent account the earlier request created (or is creating). Never accompanied by a credential.","uniqueKey":"account_id","typeLabel":"string"},"terms_version":{"type":"string","description":"On a `terms_not_accepted` 400: the Terms version `accept_terms` must equal.","uniqueKey":"terms_version","typeLabel":"string"},"claim_required":{"type":"boolean","description":"With `code: \"agent_not_permitted\"`, to a self-registered agent account nobody has claimed (#331): the refused action needs a person, who first claims the workspace with the claim link from the registration response (`claim.url`).","uniqueKey":"claim_required","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","retry_after":123,"upgrade_url":"\u003cstring>","reason":"\u003cstring>","code":"agent_scope_insufficient","required_scope":"hookie:read","granted_scopes":["\u003cstring>"],"manage_url":"\u003cstring>","scheme":"\u003cstring>","max_members":123,"members":123,"customer_id":"\u003cstring>","customer_name":"\u003cstring>","account_id":"\u003cstring>","terms_version":"\u003cstring>","claim_required":true}}},"exampleType":"generated"}},"exampleType":"generated"},"4f7a468c-399a-44d5-9f9a-811df8df8c00":{"description":"Insufficient role (write capability required: owner, admin or developer), or a cookie-authenticated mutation missing the X-Requested-With: fetch header. Also `reason: \"workspace_suspended\"` while the workspace is suspended. For an OAuth-connected agent the body also carries `code`, `required_scope` and `granted_scopes`, plus `manage_url` when widening its grant in Settings → Connected agents would let the call through (see Error).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable reason.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"retry_after":{"type":"integer","description":"Seconds to wait. Present on 429.","uniqueKey":"retry_after","typeLabel":"integer"},"upgrade_url":{"type":"string","format":"uri","description":"Present on a monthly-quota 429, and on a `member_limit_reached` 403 (the console's Settings → Plan \u0026 billing).","uniqueKey":"upgrade_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","description":"Machine-readable reason, where the status alone is ambiguous. `workspace_suspended` (403): the workspace is suspended; `delivery_allowance_exhausted` (429): a replay was refused because the monthly delivery allowance is used. `endpoint_disabled` (503): the endpoint is switched off; `handshake_failed`: a provider URL-verification challenge could not be answered (#193). `missing_header`, `bad_signature`, `stale_timestamp` (401): an endpoint's provider signature check failed; `scheme` names the check. `portal_customer_mismatch` (409): a portal token was requested for, or the vendor switched on the endpoint of, a customer other than the one the portal now serves (PORT-2g); `customer_id` and `customer_name` name that customer. Agent self-registration (#331), on /v1/agents/register: `rate_limited` (429), `agent_registration_disabled` and `agent_registration_unavailable` (503), `invalid_body`, `invalid_agent_name`, `invalid_operator_contact`, `terms_not_accepted` (with `terms_version`), `proof_of_work_required`, `invalid_challenge`, `challenge_expired`, `invalid_proof_of_work`, `invalid_idempotency_key` (400), `body_too_large` (413), `already_registered`, `registration_in_progress`, `challenge_spent` (409, with `account_id`), `daily_cap_reached`, `source_daily_limit` (429), `identity_provider_error` (502), `registration_incomplete` (503).","uniqueKey":"reason","typeLabel":"string"},"code":{"type":"string","enum":["agent_scope_insufficient","insufficient_role","agent_not_permitted","member_limit_reached"],"description":"Present on a 403 to an OAuth-connected agent, and on a member-limit 403 to anyone. `agent_scope_insufficient`: the agent's grant is below what the call needs, and widening it would let the call through (see `required_scope` and `manage_url`). `insufficient_role`: the user's OWN workspace role does not allow the call, so no grant can — a workspace owner or admin has to change the user's role first, in the console under Settings → Members. `agent_not_permitted`: no connected agent or API key may do this at any scope (billing, platform admin, managing connected agents, a destination's signing secret, invites of any kind, changing a role, removing a member, transferring ownership, listing or switching a person's workspaces, and creating API keys). To a self-registered agent account nobody has claimed yet (#331) it also carries `claim_required: true`: a person must claim the workspace with the claim link from registration before anyone can do it. `member_limit_reached` (#308): the workspace already has as many members as its plan allows, so an invite cannot be created or accepted; `max_members`, `members` and `upgrade_url` say how many and where to upgrade.","uniqueKey":"code","typeLabel":"enum\u003cstring>"},"required_scope":{"type":"string","enum":["hookie:read","hookie:write","hookie:manage"],"description":"With `code`: the scope the refused call needs.","uniqueKey":"required_scope","typeLabel":"enum\u003cstring>"},"granted_scopes":{"type":"array","items":{"type":"string","uniqueKey":"granted_scopes.items.[INDEX]","typeLabel":"string"},"description":"With `code`: the scopes the agent's grant holds now.","uniqueKey":"granted_scopes","typeLabel":"string[]"},"manage_url":{"type":"string","format":"uri","description":"With `code: \"agent_scope_insufficient\"` only: the console's Settings → Connected agents page, opened on this agent (`…/#/settings/agents?client=\u003cclient_id>`), where its user widens the grant. The change applies on the agent's next request.","uniqueKey":"manage_url","typeLabel":"string\u003curi>"},"scheme":{"type":"string","description":"Present on a signature 401: the endpoint's verification scheme.","uniqueKey":"scheme","typeLabel":"string"},"max_members":{"type":"integer","description":"With `code: \"member_limit_reached\"`: the plan's member limit.","uniqueKey":"max_members","typeLabel":"integer"},"members":{"type":"integer","description":"With `code: \"member_limit_reached\"`: the workspace's members now.","uniqueKey":"members","typeLabel":"integer"},"customer_id":{"oneOf":[{"type":"string","description":"On a `portal_customer_mismatch` 409: the customer the portal already serves.","uniqueKey":"customer_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"On a `portal_customer_mismatch` 409: the customer the portal already serves.","uniqueKey":"customer_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer_id","typeLabel":"string | null"},"customer_name":{"oneOf":[{"type":"string","description":"On a `portal_customer_mismatch` 409: that customer's display name, if one was given.","uniqueKey":"customer_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"On a `portal_customer_mismatch` 409: that customer's display name, if one was given.","uniqueKey":"customer_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer_name","typeLabel":"string | null"},"account_id":{"type":"string","description":"On a 409 from POST /v1/agents/register: the agent account the earlier request created (or is creating). Never accompanied by a credential.","uniqueKey":"account_id","typeLabel":"string"},"terms_version":{"type":"string","description":"On a `terms_not_accepted` 400: the Terms version `accept_terms` must equal.","uniqueKey":"terms_version","typeLabel":"string"},"claim_required":{"type":"boolean","description":"With `code: \"agent_not_permitted\"`, to a self-registered agent account nobody has claimed (#331): the refused action needs a person, who first claims the workspace with the claim link from the registration response (`claim.url`).","uniqueKey":"claim_required","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","retry_after":123,"upgrade_url":"\u003cstring>","reason":"\u003cstring>","code":"agent_scope_insufficient","required_scope":"hookie:read","granted_scopes":["\u003cstring>"],"manage_url":"\u003cstring>","scheme":"\u003cstring>","max_members":123,"members":123,"customer_id":"\u003cstring>","customer_name":"\u003cstring>","account_id":"\u003cstring>","terms_version":"\u003cstring>","claim_required":true}}},"exampleType":"generated"}},"exampleType":"generated"},"d977b8c4-63a2-4ca8-816a-4d96540ed4a6":{"description":"Over this credential's burst limit (about 100 requests per 10 seconds; best-effort, counted separately at each Cloudflare location). Retry after `Retry-After` seconds.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait."}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable reason.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"retry_after":{"type":"integer","description":"Seconds to wait. Present on 429.","uniqueKey":"retry_after","typeLabel":"integer"},"upgrade_url":{"type":"string","format":"uri","description":"Present on a monthly-quota 429, and on a `member_limit_reached` 403 (the console's Settings → Plan \u0026 billing).","uniqueKey":"upgrade_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","description":"Machine-readable reason, where the status alone is ambiguous. `workspace_suspended` (403): the workspace is suspended; `delivery_allowance_exhausted` (429): a replay was refused because the monthly delivery allowance is used. `endpoint_disabled` (503): the endpoint is switched off; `handshake_failed`: a provider URL-verification challenge could not be answered (#193). `missing_header`, `bad_signature`, `stale_timestamp` (401): an endpoint's provider signature check failed; `scheme` names the check. `portal_customer_mismatch` (409): a portal token was requested for, or the vendor switched on the endpoint of, a customer other than the one the portal now serves (PORT-2g); `customer_id` and `customer_name` name that customer. Agent self-registration (#331), on /v1/agents/register: `rate_limited` (429), `agent_registration_disabled` and `agent_registration_unavailable` (503), `invalid_body`, `invalid_agent_name`, `invalid_operator_contact`, `terms_not_accepted` (with `terms_version`), `proof_of_work_required`, `invalid_challenge`, `challenge_expired`, `invalid_proof_of_work`, `invalid_idempotency_key` (400), `body_too_large` (413), `already_registered`, `registration_in_progress`, `challenge_spent` (409, with `account_id`), `daily_cap_reached`, `source_daily_limit` (429), `identity_provider_error` (502), `registration_incomplete` (503).","uniqueKey":"reason","typeLabel":"string"},"code":{"type":"string","enum":["agent_scope_insufficient","insufficient_role","agent_not_permitted","member_limit_reached"],"description":"Present on a 403 to an OAuth-connected agent, and on a member-limit 403 to anyone. `agent_scope_insufficient`: the agent's grant is below what the call needs, and widening it would let the call through (see `required_scope` and `manage_url`). `insufficient_role`: the user's OWN workspace role does not allow the call, so no grant can — a workspace owner or admin has to change the user's role first, in the console under Settings → Members. `agent_not_permitted`: no connected agent or API key may do this at any scope (billing, platform admin, managing connected agents, a destination's signing secret, invites of any kind, changing a role, removing a member, transferring ownership, listing or switching a person's workspaces, and creating API keys). To a self-registered agent account nobody has claimed yet (#331) it also carries `claim_required: true`: a person must claim the workspace with the claim link from registration before anyone can do it. `member_limit_reached` (#308): the workspace already has as many members as its plan allows, so an invite cannot be created or accepted; `max_members`, `members` and `upgrade_url` say how many and where to upgrade.","uniqueKey":"code","typeLabel":"enum\u003cstring>"},"required_scope":{"type":"string","enum":["hookie:read","hookie:write","hookie:manage"],"description":"With `code`: the scope the refused call needs.","uniqueKey":"required_scope","typeLabel":"enum\u003cstring>"},"granted_scopes":{"type":"array","items":{"type":"string","uniqueKey":"granted_scopes.items.[INDEX]","typeLabel":"string"},"description":"With `code`: the scopes the agent's grant holds now.","uniqueKey":"granted_scopes","typeLabel":"string[]"},"manage_url":{"type":"string","format":"uri","description":"With `code: \"agent_scope_insufficient\"` only: the console's Settings → Connected agents page, opened on this agent (`…/#/settings/agents?client=\u003cclient_id>`), where its user widens the grant. The change applies on the agent's next request.","uniqueKey":"manage_url","typeLabel":"string\u003curi>"},"scheme":{"type":"string","description":"Present on a signature 401: the endpoint's verification scheme.","uniqueKey":"scheme","typeLabel":"string"},"max_members":{"type":"integer","description":"With `code: \"member_limit_reached\"`: the plan's member limit.","uniqueKey":"max_members","typeLabel":"integer"},"members":{"type":"integer","description":"With `code: \"member_limit_reached\"`: the workspace's members now.","uniqueKey":"members","typeLabel":"integer"},"customer_id":{"oneOf":[{"type":"string","description":"On a `portal_customer_mismatch` 409: the customer the portal already serves.","uniqueKey":"customer_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"On a `portal_customer_mismatch` 409: the customer the portal already serves.","uniqueKey":"customer_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer_id","typeLabel":"string | null"},"customer_name":{"oneOf":[{"type":"string","description":"On a `portal_customer_mismatch` 409: that customer's display name, if one was given.","uniqueKey":"customer_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"On a `portal_customer_mismatch` 409: that customer's display name, if one was given.","uniqueKey":"customer_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer_name","typeLabel":"string | null"},"account_id":{"type":"string","description":"On a 409 from POST /v1/agents/register: the agent account the earlier request created (or is creating). Never accompanied by a credential.","uniqueKey":"account_id","typeLabel":"string"},"terms_version":{"type":"string","description":"On a `terms_not_accepted` 400: the Terms version `accept_terms` must equal.","uniqueKey":"terms_version","typeLabel":"string"},"claim_required":{"type":"boolean","description":"With `code: \"agent_not_permitted\"`, to a self-registered agent account nobody has claimed (#331): the refused action needs a person, who first claims the workspace with the claim link from the registration response (`claim.url`).","uniqueKey":"claim_required","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","retry_after":123,"upgrade_url":"\u003cstring>","reason":"\u003cstring>","code":"agent_scope_insufficient","required_scope":"hookie:read","granted_scopes":["\u003cstring>"],"manage_url":"\u003cstring>","scheme":"\u003cstring>","max_members":123,"members":123,"customer_id":"\u003cstring>","customer_name":"\u003cstring>","account_id":"\u003cstring>","terms_version":"\u003cstring>","claim_required":true}}},"exampleType":"generated"}},"exampleType":"generated"},"c9b7c88e-81b2-4754-8838-5f2ec8bb9ad1":{"description":"Internal error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable reason.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"retry_after":{"type":"integer","description":"Seconds to wait. Present on 429.","uniqueKey":"retry_after","typeLabel":"integer"},"upgrade_url":{"type":"string","format":"uri","description":"Present on a monthly-quota 429, and on a `member_limit_reached` 403 (the console's Settings → Plan \u0026 billing).","uniqueKey":"upgrade_url","typeLabel":"string\u003curi>"},"reason":{"type":"string","description":"Machine-readable reason, where the status alone is ambiguous. `workspace_suspended` (403): the workspace is suspended; `delivery_allowance_exhausted` (429): a replay was refused because the monthly delivery allowance is used. `endpoint_disabled` (503): the endpoint is switched off; `handshake_failed`: a provider URL-verification challenge could not be answered (#193). `missing_header`, `bad_signature`, `stale_timestamp` (401): an endpoint's provider signature check failed; `scheme` names the check. `portal_customer_mismatch` (409): a portal token was requested for, or the vendor switched on the endpoint of, a customer other than the one the portal now serves (PORT-2g); `customer_id` and `customer_name` name that customer. Agent self-registration (#331), on /v1/agents/register: `rate_limited` (429), `agent_registration_disabled` and `agent_registration_unavailable` (503), `invalid_body`, `invalid_agent_name`, `invalid_operator_contact`, `terms_not_accepted` (with `terms_version`), `proof_of_work_required`, `invalid_challenge`, `challenge_expired`, `invalid_proof_of_work`, `invalid_idempotency_key` (400), `body_too_large` (413), `already_registered`, `registration_in_progress`, `challenge_spent` (409, with `account_id`), `daily_cap_reached`, `source_daily_limit` (429), `identity_provider_error` (502), `registration_incomplete` (503).","uniqueKey":"reason","typeLabel":"string"},"code":{"type":"string","enum":["agent_scope_insufficient","insufficient_role","agent_not_permitted","member_limit_reached"],"description":"Present on a 403 to an OAuth-connected agent, and on a member-limit 403 to anyone. `agent_scope_insufficient`: the agent's grant is below what the call needs, and widening it would let the call through (see `required_scope` and `manage_url`). `insufficient_role`: the user's OWN workspace role does not allow the call, so no grant can — a workspace owner or admin has to change the user's role first, in the console under Settings → Members. `agent_not_permitted`: no connected agent or API key may do this at any scope (billing, platform admin, managing connected agents, a destination's signing secret, invites of any kind, changing a role, removing a member, transferring ownership, listing or switching a person's workspaces, and creating API keys). To a self-registered agent account nobody has claimed yet (#331) it also carries `claim_required: true`: a person must claim the workspace with the claim link from registration before anyone can do it. `member_limit_reached` (#308): the workspace already has as many members as its plan allows, so an invite cannot be created or accepted; `max_members`, `members` and `upgrade_url` say how many and where to upgrade.","uniqueKey":"code","typeLabel":"enum\u003cstring>"},"required_scope":{"type":"string","enum":["hookie:read","hookie:write","hookie:manage"],"description":"With `code`: the scope the refused call needs.","uniqueKey":"required_scope","typeLabel":"enum\u003cstring>"},"granted_scopes":{"type":"array","items":{"type":"string","uniqueKey":"granted_scopes.items.[INDEX]","typeLabel":"string"},"description":"With `code`: the scopes the agent's grant holds now.","uniqueKey":"granted_scopes","typeLabel":"string[]"},"manage_url":{"type":"string","format":"uri","description":"With `code: \"agent_scope_insufficient\"` only: the console's Settings → Connected agents page, opened on this agent (`…/#/settings/agents?client=\u003cclient_id>`), where its user widens the grant. The change applies on the agent's next request.","uniqueKey":"manage_url","typeLabel":"string\u003curi>"},"scheme":{"type":"string","description":"Present on a signature 401: the endpoint's verification scheme.","uniqueKey":"scheme","typeLabel":"string"},"max_members":{"type":"integer","description":"With `code: \"member_limit_reached\"`: the plan's member limit.","uniqueKey":"max_members","typeLabel":"integer"},"members":{"type":"integer","description":"With `code: \"member_limit_reached\"`: the workspace's members now.","uniqueKey":"members","typeLabel":"integer"},"customer_id":{"oneOf":[{"type":"string","description":"On a `portal_customer_mismatch` 409: the customer the portal already serves.","uniqueKey":"customer_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"On a `portal_customer_mismatch` 409: the customer the portal already serves.","uniqueKey":"customer_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer_id","typeLabel":"string | null"},"customer_name":{"oneOf":[{"type":"string","description":"On a `portal_customer_mismatch` 409: that customer's display name, if one was given.","uniqueKey":"customer_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"On a `portal_customer_mismatch` 409: that customer's display name, if one was given.","uniqueKey":"customer_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"customer_name","typeLabel":"string | null"},"account_id":{"type":"string","description":"On a 409 from POST /v1/agents/register: the agent account the earlier request created (or is creating). Never accompanied by a credential.","uniqueKey":"account_id","typeLabel":"string"},"terms_version":{"type":"string","description":"On a `terms_not_accepted` 400: the Terms version `accept_terms` must equal.","uniqueKey":"terms_version","typeLabel":"string"},"claim_required":{"type":"boolean","description":"With `code: \"agent_not_permitted\"`, to a self-registered agent account nobody has claimed (#331): the refused action needs a person, who first claims the workspace with the claim link from the registration response (`claim.url`).","uniqueKey":"claim_required","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","retry_after":123,"upgrade_url":"\u003cstring>","reason":"\u003cstring>","code":"agent_scope_insufficient","required_scope":"hookie:read","granted_scopes":["\u003cstring>"],"manage_url":"\u003cstring>","scheme":"\u003cstring>","max_members":123,"members":123,"customer_id":"\u003cstring>","customer_name":"\u003cstring>","account_id":"\u003cstring>","terms_version":"\u003cstring>","claim_required":true}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"9a9599cf-005a-4898-8fb7-7d12494043a0":{"session":{"type":"apiKey","in":"cookie","name":"hookie_session","description":"The console's sealed session cookie, set by WorkOS AuthKit. Mutating requests also require the `X-Requested-With` CSRF header.","scopes":[],"schemeName":"session"}},"29371729-3b3d-49bf-9f9c-05f88b4dac08":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"An OAuth 2.1 access token from a connected agent, audienced at the `/mcp` resource URI. The agent acts as its user, with that user's role narrowed to the granted `hookie:*` scopes. No CSRF header is required — a bearer token is not ambient credentials.","scopes":[],"schemeName":"bearerAuth"}},"f9d17e92-5ef9-413a-961a-bb092e00cd9a":{"apiKey":{"type":"http","scheme":"bearer","description":"An `hk_…` admin API key from Settings → API keys. Acts as the member who created it, capped at the key's role (viewer, developer or admin) and optionally one project. Stored as a SHA-256 hash, shown once. No CSRF header is required.","scopes":[],"schemeName":"apiKey"}}},"servers":{"0ea1ddc9-3a31-4421-86e4-db5233ac2213":{"url":"https://app.hookie.ai","description":"Production"},"d5e32d1f-0c83-4838-aa53-3e0ffb5d5c54":{"url":"https://app.preview.hookie.ai","description":"Preview"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"cookie","name":"hookie_session","description":"The console's sealed session cookie, set by WorkOS AuthKit. Mutating requests also require the `X-Requested-With` CSRF header.","scopes":[],"schemeName":"session"},"schema":{"title":"hookie_session","type":"string","description":"The console's sealed session cookie, set by WorkOS AuthKit. Mutating requests also require the `X-Requested-With` CSRF header.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"session","name":"hookie_session"}],"title":"session"},{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"An OAuth 2.1 access token from a connected agent, audienced at the `/mcp` resource URI. The agent acts as its user, with that user's role narrowed to the granted `hookie:*` scopes. No CSRF header is required — a bearer token is not ambient credentials.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"An OAuth 2.1 access token from a connected agent, audienced at the `/mcp` resource URI. The agent acts as its user, with that user's role narrowed to the granted `hookie:*` scopes. No CSRF header is required — a bearer token is not ambient credentials.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"},{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"An `hk_…` admin API key from Settings → API keys. Acts as the member who created it, capped at the key's role (viewer, developer or admin) and optionally one project. Stored as a SHA-256 hash, shown once. No CSRF header is required.","scopes":[],"schemeName":"apiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"An `hk_…` admin API key from Settings → API keys. Acts as the member who created it, capped at the key's role (viewer, developer or admin) and optionally one project. Stored as a SHA-256 hash, shown once. No CSRF header is required.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"}]},"originalFileLocation":"openapi.json"},"subdomain":"hookie-ai","siteName":"Hookie","title":"Issue an ingest key - Hookie","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-10T06:45:31.920Z","originalFileLocation":"api-reference/ingest-keys/issue-an-ingest-key.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Top-level alias: POST /admin/api/ingest-keys. Write role required.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Hookie\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/hookie-ai/swNEJiZkoA-0uCAd/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/hookie-ai/swNEJiZkoA-0uCAd/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/hookie-ai/swNEJiZkoA-0uCAd/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/hookie-ai/swNEJiZkoA-0uCAd/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/hookie-ai/swNEJiZkoA-0uCAd/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/hookie-ai/swNEJiZkoA-0uCAd/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/hookie-ai/swNEJiZkoA-0uCAd/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/hookie-ai/swNEJiZkoA-0uCAd/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/hookie-ai/swNEJiZkoA-0uCAd/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Issue an ingest key - Hookie\">\u003cmeta data-mint-head property=\"og:description\" content=\"Top-level alias: POST /admin/api/ingest-keys. Write role required.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Hookie\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.hookie.ai/api-reference/ingest-keys/issue-an-ingest-key\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://hookie-ai.mintlify.app/_mintlify/api/og/v2?division=Ingest+keys\u0026amp;title=Issue+an+ingest+key\u0026amp;description=Top-level+alias%3A+POST+%2Fadmin%2Fapi%2Fingest-keys.+Write+role+required.\u0026amp;theme=f4aa03159c73f069ac2e6bcf\u0026amp;signature=6477a77a804afc9233798154f1975c0dbd34107bec1677602c841a01d1aac393\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Issue an ingest key - Hookie\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Top-level alias: POST /admin/api/ingest-keys. Write role required.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://hookie-ai.mintlify.app/_mintlify/api/og/v2?division=Ingest+keys\u0026amp;title=Issue+an+ingest+key\u0026amp;description=Top-level+alias%3A+POST+%2Fadmin%2Fapi%2Fingest-keys.+Write+role+required.\u0026amp;theme=f4aa03159c73f069ac2e6bcf\u0026amp;signature=6477a77a804afc9233798154f1975c0dbd34107bec1677602c841a01d1aac393\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/hookie-ai/swNEJiZkoA-0uCAd/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Hookie\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2B56A1\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.hookie.ai/api-reference/ingest-keys/issue-an-ingest-key\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/ingest-keys/issue-an-ingest-key.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.hookie.ai/#organization\",\"name\":\"Hookie\",\"url\":\"https://docs.hookie.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/hookie-ai/3zmwtACPzz3wb-OX/logo/light.svg?fit=max\u0026auto=format\u0026n=3zmwtACPzz3wb-OX\u0026q=85\u0026s=3d05bb847a5407bc7e75e7270aafc101\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.hookie.ai#website\",\"name\":\"Hookie\",\"url\":\"https://docs.hookie.ai\",\"publisher\":{\"@id\":\"https://docs.hookie.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.hookie.ai/api-reference/ingest-keys/issue-an-ingest-key#webpage\",\"url\":\"https://docs.hookie.ai/api-reference/ingest-keys/issue-an-ingest-key\",\"name\":\"Issue an ingest key\",\"description\":\"Top-level alias: POST /admin/api/ingest-keys. Write role required.\",\"dateModified\":\"2026-10-10T06:45:31.920Z\",\"isPartOf\":{\"@id\":\"https://docs.hookie.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.hookie.ai/api-reference/ingest-keys/issue-an-ingest-key#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.hookie.ai/api-reference/ingest-keys/issue-an-ingest-key#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API reference\",\"item\":\"https://docs.hookie.ai/api-reference/ingest/metas-url-verification-hubchallenge-on-the-public-webhook-url\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ingest keys\",\"item\":\"https://docs.hookie.ai/api-reference/ingest-keys/list-ingest-keys\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Issue an ingest key\",\"item\":\"https://docs.hookie.ai/api-reference/ingest-keys/issue-an-ingest-key\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.hookie.ai/api-reference/ingest-keys/issue-an-ingest-key#apireference\",\"headline\":\"Issue an ingest key\",\"name\":\"Issue an ingest key\",\"description\":\"Top-level alias: POST /admin/api/ingest-keys. Write role required.\",\"url\":\"https://docs.hookie.ai/api-reference/ingest-keys/issue-an-ingest-key\",\"mainEntityOfPage\":{\"@id\":\"https://docs.hookie.ai/api-reference/ingest-keys/issue-an-ingest-key#webpage\"},\"dateModified\":\"2026-10-10T06:45:31.920Z\",\"publisher\":{\"@id\":\"https://docs.hookie.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.hookie.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Hookie\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Hookie","nav":{"global":null,"groups":[{"group":"Get started","icon":"rocket","pages":[{"title":"Overview","sidebarTitle":"Overview","icon":{"name":"info-circle","style":"regular","library":"fontawesome"},"href":"/index"},{"title":"Quickstart","icon":{"name":"shipping-fast","style":"regular","library":"fontawesome"},"href":"/quickstart"}]},{"group":"Concepts","icon":"lightbulb","pages":[{"title":"Projects","icon":"folder-tree","href":"/projects"},{"title":"Endpoints and ingest keys","icon":"inbox","href":"/endpoints-and-keys"},{"title":"Datasets and records","icon":"table","href":"/datasets-and-records"},{"title":"Rules and mappings","icon":"route","href":"/rules-and-mappings"},{"title":"Destinations and deliveries","icon":"paper-plane","href":"/destinations-and-deliveries"},{"title":"Limits and plans","icon":"gauge","href":"/limits-and-plans"},{"title":"Billing","icon":"credit-card","href":"/billing"},{"title":"Roles, API keys and connected agents","sidebarTitle":"Roles and agents","icon":"user-shield","href":"/roles-and-agents"},{"title":"Glossary","icon":"book","href":"/glossary"}]},{"group":"CLI","icon":"terminal","pages":[{"title":"CLI","sidebarTitle":"Overview","icon":"terminal","href":"/cli/index"},{"title":"Operations","icon":"screwdriver-wrench","href":"/cli/operations"},{"title":"Command reference","icon":"list","href":"/cli/commands"},{"title":"Configuration","icon":"gear","href":"/cli/configuration"}]},{"group":"Guides","icon":"book-open","pages":[{"title":"Forms","icon":"rectangle-list","href":"/forms"},{"title":"Verify signatures","icon":"signature","href":"/signatures"},{"title":"Verify provider signatures","icon":"shield-check","href":"/endpoint-verification"},{"title":"Destination types and options","sidebarTitle":"Destination options","icon":"send","href":"/destinations"},{"title":"Slack app","icon":"slack","href":"/slack-app"},{"title":"Database sources","icon":"database","href":"/database-sources"},{"title":"Ingest keys","icon":"key","href":"/ingest-keys"},{"title":"Live streaming","icon":"radio","href":"/streaming"},{"title":"Workflows \u0026 AI agents","icon":{"name":"robot","style":"regular","library":"fontawesome"},"href":"/workflows"},{"title":"Customer portal","icon":"users","href":"/customer-portal"},{"title":"Broadcast Logs","icon":"tower-broadcast","href":"/broadcast-logs"},{"title":"Analytics","icon":"chart-line","href":"/analytics"},{"title":"Team members","icon":"users","href":"/team-members"},{"title":"Connected agents","icon":"plug","href":"/connected-agents"},{"title":"Agent self-registration","icon":"robot","href":"/agent-self-registration"},{"title":"WorkOS Agent Auth","icon":"id-badge","href":"/workos-agent-auth"},{"title":"API keys","icon":"lock","href":"/api-keys"},{"title":"Data API","icon":"database","href":"/data-api"},{"title":"Delete, export and close","icon":"trash-can","href":"/data-deletion"},{"title":"API reference","icon":"code","href":"/api-reference"}]},{"group":"API reference","icon":"terminal","pages":[{"group":"Ingest","pages":[{"title":"Meta's URL verification (hub.challenge) on the public webhook URL","deprecated":null,"version":null,"openapi":"/openapi.json get /{workspace}/{project}/{webhook}","href":"/api-reference/ingest/metas-url-verification-hubchallenge-on-the-public-webhook-url"},{"title":"Ingest an event through the public webhook URL","deprecated":null,"version":null,"openapi":"/openapi.json post /{workspace}/{project}/{webhook}","href":"/api-reference/ingest/ingest-an-event-through-the-public-webhook-url"},{"title":"CORS preflight for a page's fetch() to the public webhook URL","deprecated":null,"version":null,"openapi":"/openapi.json options /{workspace}/{project}/{webhook}","href":"/api-reference/ingest/cors-preflight-for-a-pages-fetch-to-the-public-webhook-url"},{"title":"Ingest an event through the public webhook URL, naming its dataset","deprecated":null,"version":null,"openapi":"/openapi.json post /{workspace}/{project}/{webhook}/{dataset}","href":"/api-reference/ingest/ingest-an-event-through-the-public-webhook-url-naming-its-dataset"},{"title":"Ingest an event with an ingest key (PUT alias of ingestEvent)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/ingest/{ingest_key}","href":"/api-reference/ingest/ingest-an-event-with-an-ingest-key-put-alias-of-ingestevent"},{"title":"Ingest an event with an ingest key, routed by the project's mapping rules, with the key's default dataset as the fallback","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/ingest/{ingest_key}","href":"/api-reference/ingest/ingest-an-event-with-an-ingest-key-routed-by-the-projects-mapping-rules-with-the-keys-default-dataset-as-the-fallback"},{"title":"Ingest an event into a named dataset (PUT alias of ingestEventToDataset)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/ingest/{ingest_key}/{dataset}","href":"/api-reference/ingest/ingest-an-event-into-a-named-dataset-put-alias-of-ingesteventtodataset"},{"title":"Ingest an event with an ingest key straight into a named dataset","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/ingest/{ingest_key}/{dataset}","href":"/api-reference/ingest/ingest-an-event-with-an-ingest-key-straight-into-a-named-dataset"},{"title":"Ingest into a configured endpoint (PUT alias of ingestWebhookEvent)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/webhooks/{ingest_key}/{slug}","href":"/api-reference/ingest/ingest-into-a-configured-endpoint-put-alias-of-ingestwebhookevent"},{"title":"Ingest an event into a configured endpoint using an ingest key","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/{ingest_key}/{slug}","href":"/api-reference/ingest/ingest-an-event-into-a-configured-endpoint-using-an-ingest-key"}]},{"group":"Streaming","pages":[{"title":"Tail the ingest key's project live event stream over SSE or WebSocket","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/stream","href":"/api-reference/streaming/tail-the-ingest-keys-project-live-event-stream-over-sse-or-websocket"},{"title":"Tail the current workspace's live event stream over SSE or WebSocket","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/stream","href":"/api-reference/streaming/tail-the-current-workspaces-live-event-stream-over-sse-or-websocket"}]},{"group":"Customer Portal","pages":[{"title":"Get the portal context for the caller's token or session","deprecated":null,"version":null,"openapi":"/openapi.json get /portal/api/me","href":"/api-reference/customer-portal/get-the-portal-context-for-the-callers-token-or-session"},{"title":"List the dataset/event types this portal exposes","deprecated":null,"version":null,"openapi":"/openapi.json get /portal/api/event-types","href":"/api-reference/customer-portal/list-the-datasetevent-types-this-portal-exposes"},{"title":"List this customer's own destinations","deprecated":null,"version":null,"openapi":"/openapi.json get /portal/api/destinations","href":"/api-reference/customer-portal/list-this-customers-own-destinations"},{"title":"Create a destination for this customer","deprecated":null,"version":null,"openapi":"/openapi.json post /portal/api/destinations","href":"/api-reference/customer-portal/create-a-destination-for-this-customer"},{"title":"Edit, pause or resume one of this customer's destinations","deprecated":null,"version":null,"openapi":"/openapi.json put /portal/api/destinations/{id}","href":"/api-reference/customer-portal/edit-pause-or-resume-one-of-this-customers-destinations"},{"title":"Delete one of this customer's destinations","deprecated":null,"version":null,"openapi":"/openapi.json delete /portal/api/destinations/{id}","href":"/api-reference/customer-portal/delete-one-of-this-customers-destinations"},{"title":"Edit, pause or resume one of this customer's destinations","deprecated":null,"version":null,"openapi":"/openapi.json patch /portal/api/destinations/{id}","href":"/api-reference/customer-portal/edit-pause-or-resume-one-of-this-customers-destinations-1"},{"title":"List recent delivery attempts to this customer's destinations","deprecated":null,"version":null,"openapi":"/openapi.json get /portal/api/deliveries","href":"/api-reference/customer-portal/list-recent-delivery-attempts-to-this-customers-destinations"},{"title":"Trade a portal token for a session cookie","deprecated":null,"version":null,"openapi":"/openapi.json post /portal/api/session","href":"/api-reference/customer-portal/trade-a-portal-token-for-a-session-cookie"},{"title":"Sign out of the portal","deprecated":null,"version":null,"openapi":"/openapi.json delete /portal/api/session","href":"/api-reference/customer-portal/sign-out-of-the-portal"},{"title":"Show a destination's signing secret again","deprecated":null,"version":null,"openapi":"/openapi.json get /portal/api/destinations/{id}/secret","href":"/api-reference/customer-portal/show-a-destinations-signing-secret-again"},{"title":"Rotate a destination's signing secret, with an overlap","deprecated":null,"version":null,"openapi":"/openapi.json post /portal/api/destinations/{id}/rotate-secret","href":"/api-reference/customer-portal/rotate-a-destinations-signing-secret-with-an-overlap"},{"title":"End a rotation's overlap early","deprecated":null,"version":null,"openapi":"/openapi.json post /portal/api/destinations/{id}/expire-previous-secret","href":"/api-reference/customer-portal/end-a-rotations-overlap-early"},{"title":"One delivery, whole: why it failed","deprecated":null,"version":null,"openapi":"/openapi.json get /portal/api/deliveries/{id}","href":"/api-reference/customer-portal/one-delivery-whole:-why-it-failed"},{"title":"Send a delivery again","deprecated":null,"version":null,"openapi":"/openapi.json post /portal/api/deliveries/{id}/replay","href":"/api-reference/customer-portal/send-a-delivery-again"},{"title":"Example payloads for each exposed event type, and how to verify a delivery (both signature schemes)","deprecated":null,"version":null,"openapi":"/openapi.json get /portal/api/examples","href":"/api-reference/customer-portal/example-payloads-for-each-exposed-event-type-and-how-to-verify-a-delivery-both-signature-schemes"},{"title":"Table views the provider shared in the portal","deprecated":null,"version":null,"openapi":"/openapi.json get /portal/api/views","href":"/api-reference/customer-portal/table-views-the-provider-shared-in-the-portal"},{"title":"One page of a shared view, for the signed-in customer","deprecated":null,"version":null,"openapi":"/openapi.json get /portal/api/views/{id}/records","href":"/api-reference/customer-portal/one-page-of-a-shared-view-for-the-signed-in-customer"}]},{"group":"Account","pages":[{"title":"Current user, workspace and role","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/me","href":"/api-reference/account/current-user-workspace-and-role"}]},{"group":"Dashboard","pages":[{"title":"Workspace home dashboard rollup","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/dashboard/summary","href":"/api-reference/dashboard/workspace-home-dashboard-rollup"},{"title":"Bucketed activity series for the workspace","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/dashboard/timeseries","href":"/api-reference/dashboard/bucketed-activity-series-for-the-workspace"},{"title":"Analytics breakdown by project, endpoint, workflow and dataset","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/dashboard/analytics","href":"/api-reference/dashboard/analytics-breakdown-by-project-endpoint-workflow-and-dataset"}]},{"group":"Projects","pages":[{"title":"List projects in the workspace","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects","href":"/api-reference/projects/list-projects-in-the-workspace"},{"title":"Create a project","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects","href":"/api-reference/projects/create-a-project"},{"title":"Get one project with resource counts","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}","href":"/api-reference/projects/get-one-project-with-resource-counts"},{"title":"Delete a project","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/projects/{project_id}","href":"/api-reference/projects/delete-a-project"},{"title":"Rename a project or set its IP allowlist","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/projects/{project_id}","href":"/api-reference/projects/rename-a-project-or-set-its-ip-allowlist"},{"title":"Export a project's configuration","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/config","href":"/api-reference/projects/export-a-projects-configuration"},{"title":"Import a configuration into a project","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/config","href":"/api-reference/projects/import-a-configuration-into-a-project"},{"title":"Clone a project","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/clone","href":"/api-reference/projects/clone-a-project"}]},{"group":"Stats","pages":[{"title":"Traffic and delivery stats for one project","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/stats","href":"/api-reference/stats/traffic-and-delivery-stats-for-one-project"}]},{"group":"Datasets","pages":[{"title":"List datasets with record counts","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/datasets","href":"/api-reference/datasets/list-datasets-with-record-counts"},{"title":"One page of a dataset's records, whole and flattened (export shape)","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/datasets/{dataset}","href":"/api-reference/datasets/one-page-of-a-datasets-records-whole-and-flattened-export-shape"}]},{"group":"Records","pages":[{"title":"Get one record with its full payload","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/records/{id}","href":"/api-reference/records/get-one-record-with-its-full-payload"},{"title":"Delete a record and every copy of it","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/projects/{project_id}/records/{id}","href":"/api-reference/records/delete-a-record-and-every-copy-of-it"},{"title":"One page of a dataset's records, optionally through a saved view","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/datasets/{dataset}/records","href":"/api-reference/records/one-page-of-a-datasets-records-optionally-through-a-saved-view"},{"title":"Retired: records are read by dataset","deprecated":true,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/webhooks/{id}/records","href":"/api-reference/records/retired:-records-are-read-by-dataset"},{"title":"The dataset's latest purge","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/datasets/{dataset}/purge","href":"/api-reference/records/the-datasets-latest-purge"},{"title":"Delete every record in a dataset","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/datasets/{dataset}/purge","href":"/api-reference/records/delete-every-record-in-a-dataset"}]},{"group":"Submissions","pages":[{"title":"List raw submissions","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/submissions","href":"/api-reference/submissions/list-raw-submissions"},{"title":"Set a submission forward status","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/projects/{project_id}/submissions/{id}","href":"/api-reference/submissions/set-a-submission-forward-status"}]},{"group":"Rules","pages":[{"title":"List mapping rules","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/rules","href":"/api-reference/rules/list-mapping-rules"},{"title":"Create a mapping rule","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/rules","href":"/api-reference/rules/create-a-mapping-rule"},{"title":"Get one rule","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/rules/{id}","href":"/api-reference/rules/get-one-rule"},{"title":"Delete a rule","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/projects/{project_id}/rules/{id}","href":"/api-reference/rules/delete-a-rule"},{"title":"Update a rule","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/projects/{project_id}/rules/{id}","href":"/api-reference/rules/update-a-rule"},{"title":"Test conditions and mappings against a sample payload","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/rules/test","href":"/api-reference/rules/test-conditions-and-mappings-against-a-sample-payload"}]},{"group":"Webhooks","pages":[{"title":"List endpoints","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/webhooks","href":"/api-reference/webhooks/list-endpoints"},{"title":"Create an endpoint","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/webhooks","href":"/api-reference/webhooks/create-an-endpoint"},{"title":"Publish a new version of a webhook","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/webhooks/{id}/versions","href":"/api-reference/webhooks/publish-a-new-version-of-a-webhook"},{"title":"Get one webhook","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/webhooks/{id}","href":"/api-reference/webhooks/get-one-webhook"},{"title":"Delete a webhook version","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/projects/{project_id}/webhooks/{id}","href":"/api-reference/webhooks/delete-a-webhook-version"},{"title":"Change an endpoint: enabled, name, dataset, IP allowlist, form redirect, CORS origins, URL verification, signature verification","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/projects/{project_id}/webhooks/{id}","href":"/api-reference/webhooks/change-an-endpoint:-enabled-name-dataset-ip-allowlist-form-redirect-cors-origins-url-verification-signature-verification"},{"title":"Give an endpoint a new public URL, with an overlap","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/webhooks/{id}/rotate","href":"/api-reference/webhooks/give-an-endpoint-a-new-public-url-with-an-overlap"},{"title":"Replace an endpoint's provider signing secret, with an overlap","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/webhooks/{id}/rotate-verification-secret","href":"/api-reference/webhooks/replace-an-endpoints-provider-signing-secret-with-an-overlap"},{"title":"One endpoint's received and refused requests","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/webhooks/{id}/activity","href":"/api-reference/webhooks/one-endpoints-received-and-refused-requests"}]},{"group":"Record views","pages":[{"title":"List saved record views","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/record-views","href":"/api-reference/record-views/list-saved-record-views"},{"title":"Create a record view","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/record-views","href":"/api-reference/record-views/create-a-record-view"},{"title":"Get one view","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/record-views/{id}","href":"/api-reference/record-views/get-one-view"},{"title":"Delete a record view","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/projects/{project_id}/record-views/{id}","href":"/api-reference/record-views/delete-a-record-view"},{"title":"Update a record view","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/projects/{project_id}/record-views/{id}","href":"/api-reference/record-views/update-a-record-view"}]},{"group":"Ingest keys","pages":[{"title":"List ingest keys","description":"Top-level alias: GET /admin/api/ingest-keys. Readable by any role. Pages with ?limit and ?offset and returns total, limit and offset beside the array, which is unchanged (DX-6, #201).","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/ingest-keys","href":"/api-reference/ingest-keys/list-ingest-keys"},{"title":"Issue an ingest key","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/ingest-keys","href":"/api-reference/ingest-keys/issue-an-ingest-key"},{"title":"Get one ingest key","description":"The object, as one row of the list returns it, or 404. This used to answer 200 with the whole list for any id (DX-6, #201). Readable by any role.","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/ingest-keys/{id}","href":"/api-reference/ingest-keys/get-one-ingest-key"},{"title":"Revoke an ingest key","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/projects/{project_id}/ingest-keys/{id}","href":"/api-reference/ingest-keys/revoke-an-ingest-key"},{"title":"Rename an ingest key, or set its expiry or IP allowlist","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/projects/{project_id}/ingest-keys/{id}","href":"/api-reference/ingest-keys/rename-an-ingest-key-or-set-its-expiry-or-ip-allowlist"},{"title":"Rotate an ingest key with an overlap","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/ingest-keys/{id}/rotate","href":"/api-reference/ingest-keys/rotate-an-ingest-key-with-an-overlap"}]},{"group":"Destinations","pages":[{"title":"List outbound destinations","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/destinations","href":"/api-reference/destinations/list-outbound-destinations"},{"title":"Create an outbound destination","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/destinations","href":"/api-reference/destinations/create-an-outbound-destination"},{"title":"Get one destination","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/destinations/{id}","href":"/api-reference/destinations/get-one-destination"},{"title":"Delete a destination","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/projects/{project_id}/destinations/{id}","href":"/api-reference/destinations/delete-a-destination"},{"title":"Edit a destination: name, URL or type settings, on/off, dataset filter, request options, alert URL or delivery limits","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/projects/{project_id}/destinations/{id}","href":"/api-reference/destinations/edit-a-destination:-name-url-or-type-settings-onoff-dataset-filter-request-options-alert-url-or-delivery-limits"},{"title":"Reveal a destination signing secret","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/destinations/{id}/secret","href":"/api-reference/destinations/reveal-a-destination-signing-secret"},{"title":"Rotate a destination signing secret","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/destinations/{id}/rotate-secret","href":"/api-reference/destinations/rotate-a-destination-signing-secret"},{"title":"Stop signing with a destination's previous secret","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/destinations/{id}/expire-previous-secret","href":"/api-reference/destinations/stop-signing-with-a-destinations-previous-secret"}]},{"group":"Deliveries","pages":[{"title":"List outbound deliveries","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/deliveries","href":"/api-reference/deliveries/list-outbound-deliveries"},{"title":"Delivery health per destination: success rate, latency percentiles, error classes, time series","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/deliveries/metrics","href":"/api-reference/deliveries/delivery-health-per-destination:-success-rate-latency-percentiles-error-classes-time-series"},{"title":"Replay every delivery that did not arrive, by filter","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/deliveries/replay","href":"/api-reference/deliveries/replay-every-delivery-that-did-not-arrive-by-filter"},{"title":"List events whose deliveries are held past the monthly delivery allowance","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/deliveries/held","href":"/api-reference/deliveries/list-events-whose-deliveries-are-held-past-the-monthly-delivery-allowance"},{"title":"Send held deliveries now that there is room in the allowance","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/deliveries/held/release","href":"/api-reference/deliveries/send-held-deliveries-now-that-there-is-room-in-the-allowance"},{"title":"Get one delivery with its response body and every attempt","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/deliveries/{id}","href":"/api-reference/deliveries/get-one-delivery-with-its-response-body-and-every-attempt"},{"title":"Replay a delivery","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/deliveries/{id}/replay","href":"/api-reference/deliveries/replay-a-delivery"}]},{"group":"Search","pages":[{"title":"Search records (events)","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/search/events","href":"/api-reference/search/search-records-events"},{"title":"Search deliveries","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/search/deliveries","href":"/api-reference/search/search-deliveries"},{"title":"Search AI agent runs","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/search/ai-runs","href":"/api-reference/search/search-ai-agent-runs"},{"title":"Search the AI call log","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/search/ai-calls","href":"/api-reference/search/search-the-ai-call-log"},{"title":"Get one AI call in full","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/search/ai-calls/{id}","href":"/api-reference/search/get-one-ai-call-in-full"},{"title":"Search raw submissions","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/search/submissions","href":"/api-reference/search/search-raw-submissions"},{"title":"Correlate any pipeline id across the pipeline","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/search/correlate/{id}","href":"/api-reference/search/correlate-any-pipeline-id-across-the-pipeline"}]},{"group":"Audit","pages":[{"title":"Read the workspace audit log","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/audit","href":"/api-reference/audit/read-the-workspace-audit-log"},{"title":"List the actions recorded in the workspace audit log","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/audit/actions","href":"/api-reference/audit/list-the-actions-recorded-in-the-workspace-audit-log"}]},{"group":"Sources","pages":[{"title":"List inbound source connectors in a project","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/sources","href":"/api-reference/sources/list-inbound-source-connectors-in-a-project"},{"title":"Create a source connector","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/sources","href":"/api-reference/sources/create-a-source-connector"},{"title":"Get one source","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/sources/{source_id}","href":"/api-reference/sources/get-one-source"},{"title":"Delete a source connector","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/projects/{project_id}/sources/{source_id}","href":"/api-reference/sources/delete-a-source-connector"},{"title":"Update a source connector","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/projects/{project_id}/sources/{source_id}","href":"/api-reference/sources/update-a-source-connector"},{"title":"Test a source connector's connection","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/sources/{source_id}/test","href":"/api-reference/sources/test-a-source-connectors-connection"}]},{"group":"Triggers","pages":[{"title":"List agentic-AI event triggers in a project","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/triggers","href":"/api-reference/triggers/list-agentic-ai-event-triggers-in-a-project"},{"title":"Create an agentic-AI event trigger","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/triggers","href":"/api-reference/triggers/create-an-agentic-ai-event-trigger"},{"title":"Get one trigger","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/triggers/{trigger_id}","href":"/api-reference/triggers/get-one-trigger"},{"title":"Delete an AI trigger","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/projects/{project_id}/triggers/{trigger_id}","href":"/api-reference/triggers/delete-an-ai-trigger"},{"title":"Enable or disable an AI trigger","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/projects/{project_id}/triggers/{trigger_id}","href":"/api-reference/triggers/enable-or-disable-an-ai-trigger"}]},{"group":"Cron triggers","pages":[{"title":"List cron triggers in a project","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/cron-triggers","href":"/api-reference/cron-triggers/list-cron-triggers-in-a-project"},{"title":"Create a cron trigger","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/cron-triggers","href":"/api-reference/cron-triggers/create-a-cron-trigger"},{"title":"Preview a cron schedule's next fire times","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/cron-triggers/preview","href":"/api-reference/cron-triggers/preview-a-cron-schedules-next-fire-times"},{"title":"Get one cron trigger","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/cron-triggers/{cron_trigger_id}","href":"/api-reference/cron-triggers/get-one-cron-trigger"},{"title":"Delete a cron trigger","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/projects/{project_id}/cron-triggers/{cron_trigger_id}","href":"/api-reference/cron-triggers/delete-a-cron-trigger"},{"title":"Update a cron trigger","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/projects/{project_id}/cron-triggers/{cron_trigger_id}","href":"/api-reference/cron-triggers/update-a-cron-trigger"},{"title":"Fire a cron trigger once, immediately","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/cron-triggers/{cron_trigger_id}/test","href":"/api-reference/cron-triggers/fire-a-cron-trigger-once-immediately"}]},{"group":"WebSocket triggers","pages":[{"title":"List WebSocket triggers in a project","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/ws-triggers","href":"/api-reference/websocket-triggers/list-websocket-triggers-in-a-project"},{"title":"Create a WebSocket trigger","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/ws-triggers","href":"/api-reference/websocket-triggers/create-a-websocket-trigger"},{"title":"Get one ws trigger","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/ws-triggers/{ws_trigger_id}","href":"/api-reference/websocket-triggers/get-one-ws-trigger"},{"title":"Delete a WebSocket trigger","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/projects/{project_id}/ws-triggers/{ws_trigger_id}","href":"/api-reference/websocket-triggers/delete-a-websocket-trigger"},{"title":"Edit, pause or resume a WebSocket trigger","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/projects/{project_id}/ws-triggers/{ws_trigger_id}","href":"/api-reference/websocket-triggers/edit-pause-or-resume-a-websocket-trigger"},{"title":"Probe a WebSocket trigger's connection","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/ws-triggers/{ws_trigger_id}/test","href":"/api-reference/websocket-triggers/probe-a-websocket-triggers-connection"}]},{"group":"Workflows","pages":[{"title":"List workflow definitions in a project","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/workflows","href":"/api-reference/workflows/list-workflow-definitions-in-a-project"},{"title":"Create a workflow definition","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/workflows","href":"/api-reference/workflows/create-a-workflow-definition"},{"title":"Get one workflow definition","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/workflows/{workflow_id}","href":"/api-reference/workflows/get-one-workflow-definition"},{"title":"Replace a workflow definition","deprecated":null,"version":null,"openapi":"/openapi.json put /admin/api/projects/{project_id}/workflows/{workflow_id}","href":"/api-reference/workflows/replace-a-workflow-definition"},{"title":"Deactivate, or permanently delete, a workflow","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/projects/{project_id}/workflows/{workflow_id}","href":"/api-reference/workflows/deactivate-or-permanently-delete-a-workflow"},{"title":"Change part of a workflow (merge)","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/projects/{project_id}/workflows/{workflow_id}","href":"/api-reference/workflows/change-part-of-a-workflow-merge"},{"title":"List instances of one workflow","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/workflows/{workflow_id}/instances","href":"/api-reference/workflows/list-instances-of-one-workflow"},{"title":"Get a workflow instance with its step events and per-step status","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/workflow-instances/{instance_id}","href":"/api-reference/workflows/get-a-workflow-instance-with-its-step-events-and-per-step-status"},{"title":"Cancel a workflow instance","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/workflow-instances/{instance_id}/cancel","href":"/api-reference/workflows/cancel-a-workflow-instance"},{"title":"Retry a workflow instance","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/workflow-instances/{instance_id}/retry","href":"/api-reference/workflows/retry-a-workflow-instance"}]},{"group":"AI agents","pages":[{"title":"List AI agents in a project","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/ai-agents","href":"/api-reference/ai-agents/list-ai-agents-in-a-project"},{"title":"Create an AI agent","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/ai-agents","href":"/api-reference/ai-agents/create-an-ai-agent"},{"title":"Get one AI agent","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/ai-agents/{agent_id}","href":"/api-reference/ai-agents/get-one-ai-agent"},{"title":"Replace an AI agent","deprecated":null,"version":null,"openapi":"/openapi.json put /admin/api/projects/{project_id}/ai-agents/{agent_id}","href":"/api-reference/ai-agents/replace-an-ai-agent"},{"title":"Retire, or permanently delete, an AI agent","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/projects/{project_id}/ai-agents/{agent_id}","href":"/api-reference/ai-agents/retire-or-permanently-delete-an-ai-agent"},{"title":"Change an AI agent (only the fields sent)","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/projects/{project_id}/ai-agents/{agent_id}","href":"/api-reference/ai-agents/change-an-ai-agent-only-the-fields-sent"},{"title":"Models an AI trigger, agent or workflow AI step may name","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/ai-models","href":"/api-reference/ai-agents/models-an-ai-trigger-agent-or-workflow-ai-step-may-name"}]},{"group":"Portals","pages":[{"title":"The project's one customer portal","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/portal","href":"/api-reference/portals/the-projects-one-customer-portal"},{"title":"Create or update the project's customer portal","deprecated":null,"version":null,"openapi":"/openapi.json put /admin/api/projects/{project_id}/portal","href":"/api-reference/portals/create-or-update-the-projects-customer-portal"},{"title":"Remove the project's customer portal for good","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/projects/{project_id}/portal","href":"/api-reference/portals/remove-the-projects-customer-portal-for-good"},{"title":"Create or update the project's customer portal (PATCH, same as PUT)","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/projects/{project_id}/portal","href":"/api-reference/portals/create-or-update-the-projects-customer-portal-patch-same-as-put"},{"title":"List customer portals in a project","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/portals","href":"/api-reference/portals/list-customer-portals-in-a-project"},{"title":"Create a customer portal","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/portals","href":"/api-reference/portals/create-a-customer-portal"},{"title":"Get one customer portal","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/portals/{portal_id}","href":"/api-reference/portals/get-one-customer-portal"},{"title":"Update a customer portal","deprecated":null,"version":null,"openapi":"/openapi.json put /admin/api/projects/{project_id}/portals/{portal_id}","href":"/api-reference/portals/update-a-customer-portal"},{"title":"Disable a customer portal","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/projects/{project_id}/portals/{portal_id}","href":"/api-reference/portals/disable-a-customer-portal"},{"title":"Update a customer portal (PATCH, same as PUT)","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/projects/{project_id}/portals/{portal_id}","href":"/api-reference/portals/update-a-customer-portal-patch-same-as-put"},{"title":"List a portal's access tokens","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/portals/{portal_id}/tokens","href":"/api-reference/portals/list-a-portals-access-tokens"},{"title":"Issue or revoke a portal access token","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/portals/{portal_id}/tokens","href":"/api-reference/portals/issue-or-revoke-a-portal-access-token"}]},{"group":"Connected agents","pages":[{"title":"List the signed-in user's OAuth-connected coding agents","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/agents","href":"/api-reference/connected-agents/list-the-signed-in-users-oauth-connected-coding-agents"},{"title":"Revoke a connected agent","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/agents/{grant_id}","href":"/api-reference/connected-agents/revoke-a-connected-agent"},{"title":"Change what a connected agent may do","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/agents/{grant_id}","href":"/api-reference/connected-agents/change-what-a-connected-agent-may-do"}]},{"group":"SSO","pages":[{"title":"List workspace SSO configurations","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/sso","href":"/api-reference/sso/list-workspace-sso-configurations"},{"title":"Create a workspace SSO configuration (not available)","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/sso","href":"/api-reference/sso/create-a-workspace-sso-configuration-not-available"},{"title":"Replace a workspace SSO configuration (not available)","deprecated":null,"version":null,"openapi":"/openapi.json put /admin/api/sso/{sso_config_id}","href":"/api-reference/sso/replace-a-workspace-sso-configuration-not-available"},{"title":"Delete a workspace SSO configuration","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/sso/{sso_config_id}","href":"/api-reference/sso/delete-a-workspace-sso-configuration"},{"title":"Update a workspace SSO configuration (not available)","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/sso/{sso_config_id}","href":"/api-reference/sso/update-a-workspace-sso-configuration-not-available"},{"title":"Check whether an SSO configuration is complete","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/sso/{sso_config_id}/test","href":"/api-reference/sso/check-whether-an-sso-configuration-is-complete"},{"title":"Read the workspace's SSO / Directory Sync request","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/sso/requests","href":"/api-reference/sso/read-the-workspaces-sso-directory-sync-request"},{"title":"Request single sign-on or Directory Sync","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/sso/requests","href":"/api-reference/sso/request-single-sign-on-or-directory-sync"},{"title":"Cancel a pending SSO / Directory Sync request","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/sso/requests/{request_id}","href":"/api-reference/sso/cancel-a-pending-sso-directory-sync-request"},{"title":"Open the WorkOS Admin Portal to set up SSO or Directory Sync","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/sso/portal-link","href":"/api-reference/sso/open-the-workos-admin-portal-to-set-up-sso-or-directory-sync"}]},{"group":"IP allowlist","pages":[{"title":"Read the workspace-level ingest IP allowlist","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/ip-allowlist","href":"/api-reference/ip-allowlist/read-the-workspace-level-ingest-ip-allowlist"},{"title":"Replace the workspace-level ingest IP allowlist","deprecated":null,"version":null,"openapi":"/openapi.json put /admin/api/ip-allowlist","href":"/api-reference/ip-allowlist/replace-the-workspace-level-ingest-ip-allowlist"},{"title":"Replace the workspace-level ingest IP allowlist","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/ip-allowlist","href":"/api-reference/ip-allowlist/replace-the-workspace-level-ingest-ip-allowlist-1"}]},{"group":"Workspace","pages":[{"title":"The workspace's name, slug and former slugs","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/workspace","href":"/api-reference/workspace/the-workspaces-name-slug-and-former-slugs"},{"title":"Rename the workspace or change its slug","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/workspace","href":"/api-reference/workspace/rename-the-workspace-or-change-its-slug"},{"title":"List the workspace's admin API keys","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/api-keys","href":"/api-reference/workspace/list-the-workspaces-admin-api-keys"},{"title":"Create an admin API key (shown once)","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/api-keys","href":"/api-reference/workspace/create-an-admin-api-key-shown-once"},{"title":"Revoke an admin API key","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/api-keys/{key_id}","href":"/api-reference/workspace/revoke-an-admin-api-key"},{"title":"The pending workspace closure, if any","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/workspace/closure","href":"/api-reference/workspace/the-pending-workspace-closure-if-any"},{"title":"Close the workspace","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/workspace/closure","href":"/api-reference/workspace/close-the-workspace"},{"title":"Undo a pending closure","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/workspace/closure","href":"/api-reference/workspace/undo-a-pending-closure"},{"title":"Export all of the workspace's data","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/workspace/export","href":"/api-reference/workspace/export-all-of-the-workspaces-data"},{"title":"List the workspace's pending invites","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/invites","href":"/api-reference/workspace/list-the-workspaces-pending-invites"},{"title":"Create a shareable invite link","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/invites","href":"/api-reference/workspace/create-a-shareable-invite-link"},{"title":"Revoke a pending invite","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/invites/{invite_id}","href":"/api-reference/workspace/revoke-a-pending-invite"},{"title":"Join a workspace with an invite link's token","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/invites/accept","href":"/api-reference/workspace/join-a-workspace-with-an-invite-links-token"},{"title":"See what an invite link's token would join, without joining","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/invites/preview","href":"/api-reference/workspace/see-what-an-invite-links-token-would-join-without-joining"},{"title":"List the workspace's members","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/members","href":"/api-reference/workspace/list-the-workspaces-members"},{"title":"Remove a member, or leave the workspace","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/members/{user_id}","href":"/api-reference/workspace/remove-a-member-or-leave-the-workspace"},{"title":"Change a member's role","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/members/{user_id}","href":"/api-reference/workspace/change-a-members-role"},{"title":"Transfer ownership to another member","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/members/transfer-ownership","href":"/api-reference/workspace/transfer-ownership-to-another-member"},{"title":"List the workspaces the caller belongs to","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/workspaces","href":"/api-reference/workspace/list-the-workspaces-the-caller-belongs-to"},{"title":"Switch the caller's active workspace","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/workspaces/active","href":"/api-reference/workspace/switch-the-callers-active-workspace"},{"title":"The workspace's Google Workspace domain link","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/workspace/google-domain","href":"/api-reference/workspace/the-workspaces-google-workspace-domain-link"},{"title":"Link the owner's Google Workspace domain","deprecated":null,"version":null,"openapi":"/openapi.json put /admin/api/workspace/google-domain","href":"/api-reference/workspace/link-the-owners-google-workspace-domain"},{"title":"Unlink the Google Workspace domain","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/workspace/google-domain","href":"/api-reference/workspace/unlink-the-google-workspace-domain"},{"title":"Change the role people from the linked domain join with","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/workspace/google-domain","href":"/api-reference/workspace/change-the-role-people-from-the-linked-domain-join-with"},{"title":"See what a claim token would take over","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/agent-accounts/claim-preview","href":"/api-reference/workspace/see-what-a-claim-token-would-take-over"},{"title":"Take ownership of a workspace an AI agent registered","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/agent-accounts/claim","href":"/api-reference/workspace/take-ownership-of-a-workspace-an-ai-agent-registered"}]},{"group":"Billing","pages":[{"title":"Current plan, subscription and display prices","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/billing/status","href":"/api-reference/billing/current-plan-subscription-and-display-prices"},{"title":"Start a new subscription via Stripe Checkout","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/billing/subscribe","href":"/api-reference/billing/start-a-new-subscription-via-stripe-checkout"},{"title":"Renewal date, payment failures, a pending cancellation and invoices, from Stripe","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/billing/details","href":"/api-reference/billing/renewal-date-payment-failures-a-pending-cancellation-and-invoices-from-stripe"},{"title":"Open Stripe's Customer Portal for this workspace","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/billing/portal","href":"/api-reference/billing/open-stripes-customer-portal-for-this-workspace"}]},{"group":"Presets","pages":[{"title":"Outbound destination preset catalog","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/destination-presets","href":"/api-reference/presets/outbound-destination-preset-catalog"},{"title":"Inbound source preset catalog","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/source-presets","href":"/api-reference/presets/inbound-source-preset-catalog"}]},{"group":"Data API","pages":[{"title":"The datasets this key may read, and their columns","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/data","href":"/api-reference/data-api/the-datasets-this-key-may-read-and-their-columns"},{"title":"One page of an exposed dataset, exposed columns only","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/data/{dataset}","href":"/api-reference/data-api/one-page-of-an-exposed-dataset-exposed-columns-only"},{"title":"What the project exposes to the Data API, and its keys (metadata only)","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/data-api","href":"/api-reference/data-api/what-the-project-exposes-to-the-data-api-and-its-keys-metadata-only"},{"title":"Replace what the project exposes","deprecated":null,"version":null,"openapi":"/openapi.json put /admin/api/projects/{project_id}/data-api/exposures","href":"/api-reference/data-api/replace-what-the-project-exposes"},{"title":"Replace what the project exposes (PATCH, same as PUT)","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/projects/{project_id}/data-api/exposures","href":"/api-reference/data-api/replace-what-the-project-exposes-patch-same-as-put"},{"title":"Create a read-only Data API key (the plaintext is returned once)","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/data-api/keys","href":"/api-reference/data-api/create-a-read-only-data-api-key-the-plaintext-is-returned-once"},{"title":"Revoke a Data API key; it stops working immediately","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/projects/{project_id}/data-api/keys/{key_id}","href":"/api-reference/data-api/revoke-a-data-api-key;-it-stops-working-immediately"}]},{"group":"Broadcast Logs","pages":[{"title":"The project's Broadcast Logs integration (or null) and the vendor catalog","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/telemetry","href":"/api-reference/broadcast-logs/the-projects-broadcast-logs-integration-or-null-and-the-vendor-catalog"},{"title":"Start forwarding the project's logs and traces over OTLP/HTTP (JSON) to one tool","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/telemetry","href":"/api-reference/broadcast-logs/start-forwarding-the-projects-logs-and-traces-over-otlphttp-json-to-one-tool"},{"title":"Remove the integration","deprecated":null,"version":null,"openapi":"/openapi.json delete /admin/api/projects/{project_id}/telemetry","href":"/api-reference/broadcast-logs/remove-the-integration"},{"title":"Change the integration's settings or secrets, or enable / disable it","deprecated":null,"version":null,"openapi":"/openapi.json patch /admin/api/projects/{project_id}/telemetry","href":"/api-reference/broadcast-logs/change-the-integrations-settings-or-secrets-or-enable-disable-it"},{"title":"Send one test log record (and span) to a draft or the saved configuration","deprecated":null,"version":null,"openapi":"/openapi.json post /admin/api/projects/{project_id}/telemetry/test","href":"/api-reference/broadcast-logs/send-one-test-log-record-and-span-to-a-draft-or-the-saved-configuration"}]},{"group":"Observability","pages":[{"title":"A project's flagged events: filtered and routing failed","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/errors","href":"/api-reference/observability/a-projects-flagged-events:-filtered-and-routing-failed"},{"title":"One flagged event, with its whole payload","deprecated":null,"version":null,"openapi":"/openapi.json get /admin/api/projects/{project_id}/errors/{id}","href":"/api-reference/observability/one-flagged-event-with-its-whole-payload"}]},{"group":"Status","pages":[{"title":"Is the API up?","deprecated":null,"version":null,"openapi":"/openapi.json get /health","href":"/api-reference/status/is-the-api-up?"},{"title":"CORS preflight for /health","deprecated":null,"version":null,"openapi":"/openapi.json options /health","href":"/api-reference/status/cors-preflight-for-health"},{"title":"Is the API up? (headers only)","deprecated":null,"version":null,"openapi":"/openapi.json head /health","href":"/api-reference/status/is-the-api-up?-headers-only"}]},{"group":"Agents","pages":[{"title":"Get a proof-of-work challenge to register an agent","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/agents/register/challenge","href":"/api-reference/agents/get-a-proof-of-work-challenge-to-register-an-agent"},{"title":"Register an AI agent's own Hookie account","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/agents/register","href":"/api-reference/agents/register-an-ai-agents-own-hookie-account"}]},{"group":"Delivery","pages":[{"title":"An outbound delivery to a destination","version":null,"deprecated":null,"openapi":"/openapi.json webhook delivery","href":"/api-reference/delivery/an-outbound-delivery-to-a-destination"}]}]}]},"basePath":"","title":"Issue an ingest key - Hookie","buildId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","deploymentId":"dpl_345ReqzYaAjzS9QpeJemsKdb7KDj","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C8RPHPxo.js","utils-0BK-9q6z.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DfjzsUJT.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B4v9psJ4.js","snippetPresets-CpTQv-Ez.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-BNP-Fvr0.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BSgu6h1D.js","shallow-Biv1i9Gs.js","getApiPlaygroundDisplay-BoGOXhtF.js","CodeSnippet-DvQoT18_.js","CodeSnippets-Dnpa15xT.js","Page-Buji1S4J.js","getPastedJson-xAIyhUFE.js","icon-S6FBih11.js","MethodPill-SaYeUZyk.js","DuplicateIcon-Cs-p3v2Q.js","createIcon-DjCFEoHq.js","DynamicMarkdown-BcnBltEQ.js","SectionHeading-BUBl0eEF.js","axios-vUo_bRtp.js","Markdown-h4cOoD8d.js","clsx-B2v50t8t.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DJnKvr0g.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BHrrjR1K.js"]}