Reseller partner admin keys only, without Blujay-Workspace. One HTTPS endpoint receives the events you choose for every customer, current and future. Each event’s workspace_id names the customer (the same ID you send in Blujay-Workspace), and its subscription_id is this subscription’s ID. Every customer’s events are signed with this subscription’s signing_secret, shown only in this response.
customer.created, customer.paused and customer.closed are sent about your customers themselves. Customers can’t see, change or delete this subscription.
Your workspace API key, sent as Authorization: Bearer blu_.... Workspace admins can find it in the Blujay app under API.
An API key has full access to your workspace and works on every endpoint. There is no test mode: every key sends real messages and changes real data, so keep it secret and use it only from your server.
Each API key can make 600 read requests and 120 write requests per minute, plus 60 attachment requests per minute. Over a limit you get 429 RATE_LIMIT_EXCEEDED with Retry-After.
Reseller partner keys. A partner key acts for one of the partner's customers when the request names it in the Blujay-Workspace header (the customer's workspace_ ID). Without the header it reaches only /v1/partner/* and /v1/me. Each customer gets the limits above for each partner key, and all of a partner's requests together get ten times those limits; a 429 says which in error.details[0].scope (partner_customer or partner). A messaging key can read anything for a customer and change chats, messages, contacts, attachments and vCards; everything else needs an admin key (403 PARTNER_ROLE_FORBIDDEN). Paused or closing customers can be read but not changed (409 CUSTOMER_PAUSED or CUSTOMER_CLOSING). Any other workspace ID in the header returns 404 NOT_FOUND; using the header with any other credential returns 400 WORKSPACE_HEADER_NOT_ALLOWED.
2026-08-20 reports the service you asked for as requested_service and the service actually used as service.
2026-09-02 adds message parts.
2026-10-03 adds iMessage group typing with a participants snapshot, reply_to on message events, voice memos as audio parts (2026-09-02 reports them as media parts), and saved on the contact in contact.tag_added and contact.assigned.
2026-10-30 reports contacts' emoji reactions as reaction.added / reaction.removed with type custom and emoji, and stickers with type sticker and sticker. Earlier versions receive them as message.received, as before.
Earlier versions keep their original payload shapes and never receive group typing. Each event uses the subscription's version at the time the event was created, so changing the version affects only later events.
Your X-Request-ID header value, echoed back when you send one. Not included on the send responses (POST /v1/chats and POST /v1/chats/{chat_id}/messages); keep your own mapping from your request ID to the returned message ID there.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Blujay API","description":"Send and receive iMessage, RCS and SMS from your Blujay phone numbers with the Blujay API.","colors":{"primary":"#007AFF","light":"#4DA3FF","dark":"#007AFF"},"logo":{"light":"https://mintcdn.com/blujay-api/Z06BDuKbaRqwvTNY/logo/light.svg?fit=max\u0026auto=format\u0026n=Z06BDuKbaRqwvTNY\u0026q=85\u0026s=7e2d044d91197ee37ad1e32cf7c89936","dark":"https://mintcdn.com/blujay-api/Z06BDuKbaRqwvTNY/logo/dark.svg?fit=max\u0026auto=format\u0026n=Z06BDuKbaRqwvTNY\u0026q=85\u0026s=d5a73c28432c5541ee1c48a16175a845","href":"https://docs.blujay.io"},"favicon":"https://mintcdn.com/blujay-api/Z06BDuKbaRqwvTNY/favicon.png?fit=max\u0026auto=format\u0026n=Z06BDuKbaRqwvTNY\u0026q=85\u0026s=52b83434892a2ee20969e9f587e906c2","api":{"openapi":"api-reference/openapi.yaml","playground":{"display":"interactive"},"examples":{"defaults":"all","languages":["curl","javascript","python","go","ruby","php"]}},"background":{"color":{"dark":"#141414"}},"navbar":{"links":[{"href":"mailto:support@blujay.io","label":"Support"}],"primary":{"type":"button","label":"Sign up free","href":"https://app.blujay.io/?auth=register"}},"footer":{"socials":{"x":"https://x.com/blujayio","website":"https://blujay.io"},"links":[{"header":"Blujay","items":[{"label":"Help center","href":"https://support.blujay.io"},{"label":"Open Blujay","href":"https://app.blujay.io"}]}]},"fonts":{"family":"Geist"},"contextual":{"options":["copy","view","chatgpt","claude","cursor","mcp"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"blujay-api","hasAudioNarration":false,"actualSubdomain":"blujay-api","customDomains":["docs.blujay.io"],"gitSource":{"type":"github","owner":"blujayhq","repo":"api-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":"","_id":"6ada546d4fd5aea585776e0c"},"entitlements":{},"buildId":"6af3f64c47adc41223f29755","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"default","tag":"API reference","count":150},{"language":"default","tag":"Guides","count":92},{"language":"default","tag":"Errors","count":84},{"language":"default","tag":"Endpoints","count":65},{"language":"default","tag":"Contacts","count":21},{"language":"default","tag":"Messages","count":21},{"language":"default","tag":"Webhooks","count":20},{"language":"default","tag":"Chats","count":17},{"language":"default","tag":"Reseller partners","count":11},{"language":"default","tag":"Sending messages","count":11}]},"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":"custom-rbac-roles","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":"rbac-expansion","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":"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":"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":"editor-metadata","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":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"html:not(.dark) h1,html:not(.dark) h2,html:not(.dark) h3{color:#0A2540}html:not(.dark) .prose{color:#425466}#navigation-items a,#navigation-items .sidebar-group>li>button{padding-top:4px;padding-bottom:4px}#navigation-items>div:has(>.sidebar-group-header){margin-top:1.25rem}#navigation-items>div:first-child:has(>.sidebar-group-header){margin-top:0}#navigation-items .sidebar-group-header{margin-bottom:0.375rem}#navigation-items>div:only-of-type>.sidebar-group-header{display:none}#navigation-items>div:only-of-type>.sidebar-group>li+li{margin-top:0}#navigation-items>div:only-of-type>.sidebar-group>li>button{font-weight:500}#navigation-items>div:only-of-type>.sidebar-group>li>button,#navigation-items>div:only-of-type a:not([aria-current=\"page\"]),#navigation-items>div:only-of-type a:not([aria-current=\"page\"]):hover{color:#0A2540}.dark #navigation-items>div:only-of-type>.sidebar-group>li>button,.dark #navigation-items>div:only-of-type a:not([aria-current=\"page\"]),.dark #navigation-items>div:only-of-type a:not([aria-current=\"page\"]):hover{color:#fff}#navigation-items>div:only-of-type>.sidebar-group>li>ul{margin-left:1rem;padding-left:0;margin-top:0;border-left:1px solid rgb(0 0 0 / 0.14)}#navigation-items>div:only-of-type>.sidebar-group>li>ul a{padding-left:12px!important}.dark #navigation-items>div:only-of-type>.sidebar-group>li>ul{border-left-color:rgb(255 255 255 / 0.2)}#page-title{font-size:42px;line-height:1.2;font-weight:500;letter-spacing:-0.03em}#header .prose{font-size:20px;line-height:28px;letter-spacing:-0.02em}.dark #header .prose{color:rgb(255 255 255 / 0.8)}.dark #page-title{color:#fff}#content{line-height:24px;letter-spacing:-0.01em}.dark #content{color:rgb(255 255 255 / 0.8)}#content h2:not([data-component-part=\"card-title\"]){font-size:35px;line-height:42px;font-weight:500;letter-spacing:-0.03em;margin-top:48px;margin-bottom:15px}#content h3:not([data-component-part=\"card-title\"]){font-size:24px;line-height:32px;font-weight:500;letter-spacing:-0.02em;margin-top:32px;margin-bottom:12px}#content p{margin-top:16px;margin-bottom:0}#content ul,#content ol{margin-top:16px;margin-bottom:0}#content li{margin-top:0;margin-bottom:0}#content table{font-size:15px;line-height:22.5px}#content .callout{border-radius:8px;padding:14px 16px}#content .callout>.prose{font-size:16px;line-height:24px}.dark #content .callout>.prose{color:rgb(255 255 255 / 0.85)}html:not(.dark) #content .callout>.prose{color:#425466}#content .callout[class*=\"border-green\"]{background:rgb(0 122 255 / 0.05);border-color:rgb(0 122 255 / 0.25)}#content .callout[class*=\"border-green\"] svg{color:#007AFF;fill:currentColor}#content ul{padding-left:0;list-style:none}#content ul>li{margin-left:-6px}#content li+li{margin-top:8px}#content ul>li::before{content:\"\";position:absolute;width:5px;height:5px;border-radius:50%;left:15px;top:9.5px;background-color:#425466}.dark #content ul>li::before{background-color:rgb(255 255 255 / 0.8)}#content h2+*,#content h3+*{margin-top:0}#content a.link{color:#007AFF;font-weight:400;border-bottom:0;text-decoration:underline;text-decoration-color:rgb(0 122 255 / 0.4);text-underline-offset:auto}.dark #content a.link{color:#4DA3FF;text-decoration-color:rgb(77 163 255 / 0.4)}.dark #content strong{color:#fff;font-weight:700}"}],"page":{"pagePath":"api-reference/partners/create-a-partner-webhook-subscription","slug":"/api-reference/partners/create-a-partner-webhook-subscription","pageMetadata":{"title":"Create a partner webhook subscription","description":"Reseller partner `admin` keys only, without `Blujay-Workspace`. One HTTPS endpoint receives the events you choose for every customer, current and future. Each event's `workspace_id` names the customer (the same ID you send in `Blujay-Workspace`), and its `subscription_id` is this subscription's ID. Every customer's events are signed with this subscription's `signing_secret`, shown only in this response.\n\n`customer.created`, `customer.paused` and `customer.closed` are sent about your customers themselves. Customers can't see, change or delete this subscription.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/partner/webhook-subscriptions","href":"/api-reference/partners/create-a-partner-webhook-subscription","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Reseller partner \", _jsx(_components.code, {\n children: \"admin\"\n }), \" keys only, without \", _jsx(_components.code, {\n children: \"Blujay-Workspace\"\n }), \". One HTTPS endpoint receives the events you choose for every customer, current and future. Each event’s \", _jsx(_components.code, {\n children: \"workspace_id\"\n }), \" names the customer (the same ID you send in \", _jsx(_components.code, {\n children: \"Blujay-Workspace\"\n }), \"), and its \", _jsx(_components.code, {\n children: \"subscription_id\"\n }), \" is this subscription’s ID. Every customer’s events are signed with this subscription’s \", _jsx(_components.code, {\n children: \"signing_secret\"\n }), \", shown only in this response.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"customer.created\"\n }), \", \", _jsx(_components.code, {\n children: \"customer.paused\"\n }), \" and \", _jsx(_components.code, {\n children: \"customer.closed\"\n }), \" are sent about your customers themselves. Customers can’t see, change or delete this subscription.\"]\n })]\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":{"config":{},"pageMetadata":{"title":"Create a partner webhook subscription","description":"Reseller partner `admin` keys only, without `Blujay-Workspace`. One HTTPS endpoint receives the events you choose for every customer, current and future. Each event's `workspace_id` names the customer (the same ID you send in `Blujay-Workspace`), and its `subscription_id` is this subscription's ID. Every customer's events are signed with this subscription's `signing_secret`, shown only in this response.\n\n`customer.created`, `customer.paused` and `customer.closed` are sent about your customers themselves. Customers can't see, change or delete this subscription.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/partner/webhook-subscriptions","href":"/api-reference/partners/create-a-partner-webhook-subscription","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Partners"],"summary":"Create a partner webhook subscription","description":"Reseller partner `admin` keys only, without `Blujay-Workspace`. One HTTPS endpoint receives the events you choose for every customer, current and future. Each event's `workspace_id` names the customer (the same ID you send in `Blujay-Workspace`), and its `subscription_id` is this subscription's ID. Every customer's events are signed with this subscription's `signing_secret`, shown only in this response.\n\n`customer.created`, `customer.paused` and `customer.closed` are sent about your customers themselves. Customers can't see, change or delete this subscription.\n","operationId":"createPartnerWebhookSubscription","x-hidden":true,"requestBody":"6ef0a2c5-fc7f-404c-a0ee-5d800bb1ef7c","responses":{"201":"340b2251-f546-4821-a653-e9e4b0e031a9","400":"e3a8c960-31f7-4e96-9b51-9dac76eda84e","401":"02ca39d7-fa58-4e8a-90f6-9fa3b8463aa1","403":"f8e389ff-89d2-4af8-8806-4ebfd8d04489","404":"215b483f-be45-441c-9f36-72ce1a09b85a"},"security":["0e96cdc4-849e-4a38-8f18-90cb21dab38b"],"method":"post","type":"path","servers":["660565a7-87d9-4b09-af2e-872548a05c9e"],"path":"/v1/partner/webhook-subscriptions","baseUrlOptions":["https://api.blujay.io"],"title":"Create a partner webhook subscription","codeSamples":[],"requestExampleLanguages":["bash","javascript","python","go","ruby","php"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["url","event_types"],"properties":{"url":{"type":"string","examples":["https://example.com/webhooks/blujay"],"format":"uri","maxLength":2048,"description":"Your HTTPS endpoint, up to 2,048 characters. It must resolve to a public address.","isRequired":true,"uniqueKey":"url","typeLabel":"string\u003curi>"},"event_types":{"type":"array","description":"The events to send (1–100). Customer events go to this subscription; every other type is sent for every customer.","minItems":1,"maxItems":100,"items":{"oneOf":[{"type":"string","description":"Any event a workspace subscription can take, plus the customer events.","enum":["message.accepted","message.sent","message.delivered","message.read","message.failed","message.received","reaction.added","reaction.removed","phone_number.status_updated","contact.tag_added","contact.assigned","chat.typing_indicator.started","chat.typing_indicator.stopped","participant.added","participant.removed","chat.group_name_updated","message.edited","message.unsent","call.ended","call.recording_ready","phone_number.assigned","phone_number.released"],"uniqueKey":"event_types.items.[INDEX].oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Any event a workspace subscription can take, plus the customer events.","enum":["customer.created","customer.paused","customer.closed"],"uniqueKey":"event_types.items.[INDEX].oneOf.1","typeLabel":"enum\u003cstring>"}],"uniqueKey":"event_types.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"event_types","typeLabel":"enum\u003cstring>[]"},"webhook_version":{"type":"string","enum":["2026-06-14","2026-08-01","2026-08-20","2026-09-02","2026-10-03","2026-10-30"],"description":"The payload version for a subscription's events.\n- `2026-08-20` reports the service you asked for as `requested_service` and the service actually used as `service`.\n- `2026-09-02` adds message `parts`.\n- `2026-10-03` adds iMessage group typing with a `participants` snapshot, `reply_to` on message events, voice memos as `audio` parts (`2026-09-02` reports them as `media` parts), and `saved` on the `contact` in `contact.tag_added` and `contact.assigned`.\n- `2026-10-30` reports contacts' emoji reactions as `reaction.added` / `reaction.removed` with type `custom` and `emoji`, and stickers with type `sticker` and `sticker`. Earlier versions receive them as `message.received`, as before.\n\nEarlier versions keep their original payload shapes and never receive group typing. Each event uses the subscription's version at the time the event was created, so changing the version affects only later events.\n","default":"2026-10-30","uniqueKey":"webhook_version","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["active","disabled"],"default":"active","uniqueKey":"status","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"everyCustomer":{"title":"everyCustomer","value":{"url":"https://example.com/webhooks/blujay","event_types":["message.received","message.failed","customer.created","customer.paused","customer.closed"]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"340b2251-f546-4821-a653-e9e4b0e031a9":{"description":"The new subscription, including its `signing_secret`.","headers":{"X-Trace-ID":{"description":"Unique ID for this request. It matches `trace_id` in the body. Include it when you contact Blujay support.","schema":{"type":"string","examples":["trc_8f2a1c0e4b7d"],"pattern":"^trc_[A-Za-z0-9_-]+$"}}},"content":{"application/json":{"schema":{"type":"object","description":"Wraps every successful response. The result is in `data`.","required":["data","status","trace_id","timestamp"],"properties":{"status":{"type":"string","enum":["success"],"isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"trace_id":{"type":"string","examples":["trc_8f2a1c0e4b7d"],"pattern":"^trc_[A-Za-z0-9_-]+$","isRequired":true,"uniqueKey":"trace_id","typeLabel":"string"},"timestamp":{"type":"string","examples":["2026-10-14T17:01:00.000Z"],"format":"date-time","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string\u003cdate-time>"},"data":{"type":"object","description":"One endpoint that receives every customer's events. Each event's `workspace_id` names the customer.","required":["signing_secret","subscription_id","url","event_types","webhook_version","status","signing_secret_hint","created_at","updated_at"],"properties":{"subscription_id":{"type":"string","examples":["whsub_abc123"],"pattern":"^whsub_[A-Za-z0-9_-]+$","isRequired":true,"uniqueKey":"data.subscription_id","typeLabel":"string"},"url":{"type":"string","examples":["https://example.com/webhooks/blujay"],"format":"uri","isRequired":true,"uniqueKey":"data.url","typeLabel":"string\u003curi>"},"event_types":{"type":"array","items":{"oneOf":[{"type":"string","description":"Every event type that can appear on a subscription or in a webhook. Some types are recognized only so older subscriptions keep working and may never be sent. You can add only the types in `WebhookSubscribableEventType`.","enum":["message.accepted","message.sent","message.delivered","message.read","message.failed","message.received","reaction.added","reaction.removed","participant.added","participant.removed","chat.group_name_updated","phone_number.status_updated","contact.tag_added","contact.assigned","chat.typing_indicator.started","chat.typing_indicator.stopped","message.edited","message.unsent","call.ended","call.recording_ready","phone_number.assigned","phone_number.released"],"uniqueKey":"data.event_types.items.[INDEX].oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Events about your customers themselves, sent only to partner webhook subscriptions (`/v1/partner/webhook-subscriptions`). `data.customer_id` names the customer; the envelope's `workspace_id` is your own partner workspace.\n- `customer.created` is sent when you create a customer.\n- `customer.paused` is sent when Blujay pauses a customer.\n- `customer.closed` is sent when a customer is closed (status `closing` while its data can still be exported).\n","enum":["customer.created","customer.paused","customer.closed"],"uniqueKey":"data.event_types.items.[INDEX].oneOf.1","typeLabel":"enum\u003cstring>"}],"uniqueKey":"data.event_types.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"data.event_types","typeLabel":"enum\u003cstring>[]"},"webhook_version":{"type":"string","enum":["2026-06-14","2026-08-01","2026-08-20","2026-09-02","2026-10-03","2026-10-30"],"description":"The payload version for a subscription's events.\n- `2026-08-20` reports the service you asked for as `requested_service` and the service actually used as `service`.\n- `2026-09-02` adds message `parts`.\n- `2026-10-03` adds iMessage group typing with a `participants` snapshot, `reply_to` on message events, voice memos as `audio` parts (`2026-09-02` reports them as `media` parts), and `saved` on the `contact` in `contact.tag_added` and `contact.assigned`.\n- `2026-10-30` reports contacts' emoji reactions as `reaction.added` / `reaction.removed` with type `custom` and `emoji`, and stickers with type `sticker` and `sticker`. Earlier versions receive them as `message.received`, as before.\n\nEarlier versions keep their original payload shapes and never receive group typing. Each event uses the subscription's version at the time the event was created, so changing the version affects only later events.\n","isRequired":true,"uniqueKey":"data.webhook_version","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["active","disabled"],"isRequired":true,"uniqueKey":"data.status","typeLabel":"enum\u003cstring>"},"signing_secret_hint":{"type":"string","examples":["Y3OA=="],"minLength":6,"maxLength":6,"description":"Last six characters of the signing secret.","isRequired":true,"uniqueKey":"data.signing_secret_hint","typeLabel":"string"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"data.updated_at","typeLabel":"string\u003cdate-time>"},"signing_secret":{"type":"string","examples":["whsec_ZXhhbXBsZS1zZWNyZXQtZG8tbm90LXVzZS0xMjM0NTY3OA=="],"pattern":"^whsec_[A-Za-z0-9+/]+={0,2}$","description":"Shown only in this response; store it securely. Every customer's events are signed with it.","isRequired":true,"uniqueKey":"data.signing_secret","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"data","typeLabel":"object"},"client_request_id":{"type":"string","description":"Your `X-Request-ID` header value, echoed back when you send one. Not included on the send responses (`POST /v1/chats` and `POST /v1/chats/{chat_id}/messages`); keep your own mapping from your request ID to the returned message ID there.","uniqueKey":"client_request_id","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":"success","trace_id":"trc_8f2a1c0e4b7d","timestamp":"2026-10-14T17:01:00.000Z","data":{"subscription_id":"whsub_abc123","url":"https://example.com/webhooks/blujay","event_types":["message.accepted"],"webhook_version":"2026-06-14","status":"active","signing_secret_hint":"Y3OA==","created_at":"2023-11-07T05:31:56Z","updated_at":"2023-11-07T05:31:56Z","signing_secret":"whsec_ZXhhbXBsZS1zZWNyZXQtZG8tbm90LXVzZS0xMjM0NTY3OA=="},"client_request_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"e3a8c960-31f7-4e96-9b51-9dac76eda84e":{"description":"The subscription wasn't saved:\n- `UNSUPPORTED_WEBHOOK_EVENT`: an event type isn't recognized.\n- `FEATURE_NOT_ENABLED`: an event type is recognized but can't be subscribed to.\n- `WEBHOOK_URL_INVALID`: the URL isn't HTTPS, includes credentials or a fragment, or is too long.\n- `WEBHOOK_URL_UNSAFE`: the URL points to a private or blocked address.\n- `WEBHOOK_URL_UNRESOLVABLE`: the URL's host name doesn't resolve.\n- `VALIDATION_ERROR`: another field is invalid.\n","headers":{"X-Trace-ID":{"description":"Unique ID for this request. It matches `trace_id` in the body. Include it when you contact Blujay support.","schema":{"type":"string","examples":["trc_8f2a1c0e4b7d"],"pattern":"^trc_[A-Za-z0-9_-]+$"}}},"content":{"application/json":{"schema":{"type":"object","description":"Wraps every error response. Branch on `error.code`, and include `trace_id` when you contact support.","required":["status","error","trace_id","timestamp"],"properties":{"status":{"const":"error","isRequired":true,"uniqueKey":"status","typeLabel":"any"},"error":{"type":"object","required":["code","message","type","http_status","retryable","doc_url","details"],"properties":{"code":{"type":"string","description":"Stable, machine-readable error code. Branch on this value.","examples":["RATE_LIMIT_EXCEEDED","QUEUE_UNAVAILABLE","FEATURE_NOT_ENABLED"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation. It can change, so don't parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"type":{"type":"string","description":"Broad error category.","examples":["validation","auth","idempotency","rate_limit","queue","feature_gate"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"string"},"http_status":{"type":"integer","description":"The HTTP status code of the response.","enum":[400,401,403,404,409,413,415,422,429,500,502,503],"isRequired":true,"uniqueKey":"error.http_status","typeLabel":"enum\u003cinteger>"},"retryable":{"type":"boolean","description":"Whether sending the same request again later can succeed.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"doc_url":{"type":"string","format":"uri","description":"Link to documentation for this error code.","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"details":{"type":"array","description":"Extra structured context, such as the fields that failed validation or the limit you hit.","items":{"type":"object","additionalProperties":true,"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"error.details","typeLabel":"object[]"},"retry_after":{"type":"integer","minimum":1,"description":"Seconds to wait before retrying. Also sent as the `Retry-After` header.","uniqueKey":"error.retry_after","typeLabel":"integer"},"reset_at":{"type":"string","examples":["2026-10-14T17:01:00.000Z"],"format":"date-time","description":"When the limit you hit resets.","uniqueKey":"error.reset_at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"trace_id":{"type":"string","examples":["trc_8f2a1c0e4b7d"],"pattern":"^trc_[A-Za-z0-9_-]+$","isRequired":true,"uniqueKey":"trace_id","typeLabel":"string"},"timestamp":{"type":"string","examples":["2026-10-14T17:01:00.000Z"],"format":"date-time","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string\u003cdate-time>"},"client_request_id":{"type":"string","description":"Your `X-Request-ID` header value, echoed back when you send one.","uniqueKey":"client_request_id","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"unsafeUrl":{"title":"unsafeUrl","value":{"status":"error","error":{"code":"WEBHOOK_URL_UNSAFE","message":"Webhook URL must resolve to a public internet address","type":"validation","http_status":400,"retryable":false,"doc_url":"https://docs.blujay.io/errors/webhook-url-unsafe","details":[]},"trace_id":"trc_8f2a1c0e4b7d","timestamp":"2026-10-14T00:00:00.000Z"}},"unsupported":{"title":"unsupported","value":{"status":"error","error":{"code":"UNSUPPORTED_WEBHOOK_EVENT","message":"Unsupported webhook event type order.shipped","type":"validation","http_status":400,"retryable":false,"doc_url":"https://docs.blujay.io/errors/unsupported-webhook-event","details":[]},"trace_id":"trc_8f2a1c0e4b7d","timestamp":"2026-10-14T00:00:00.000Z"}},"notSubscribable":{"title":"notSubscribable","value":{"status":"error","error":{"code":"FEATURE_NOT_ENABLED","message":"Webhook event type contact.created is not available yet","type":"validation","http_status":400,"retryable":false,"doc_url":"https://docs.blujay.io/errors/feature-not-enabled","details":[]},"trace_id":"trc_8f2a1c0e4b7d","timestamp":"2026-10-14T00:00:00.000Z"}}},"exampleType":"examples"}},"exampleType":"examples"},"02ca39d7-fa58-4e8a-90f6-9fa3b8463aa1":{"description":"The API key is missing or invalid (`UNAUTHORIZED`), revoked (`API_KEY_REVOKED`) or expired (`API_KEY_EXPIRED`).","headers":{"X-Trace-ID":{"description":"Unique ID for this request. It matches `trace_id` in the body. Include it when you contact Blujay support.","schema":{"type":"string","examples":["trc_8f2a1c0e4b7d"],"pattern":"^trc_[A-Za-z0-9_-]+$"}}},"content":{"application/json":{"schema":{"type":"object","description":"Wraps every error response. Branch on `error.code`, and include `trace_id` when you contact support.","required":["status","error","trace_id","timestamp"],"properties":{"status":{"const":"error","isRequired":true,"uniqueKey":"status","typeLabel":"any"},"error":{"type":"object","required":["code","message","type","http_status","retryable","doc_url","details"],"properties":{"code":{"type":"string","description":"Stable, machine-readable error code. Branch on this value.","examples":["RATE_LIMIT_EXCEEDED","QUEUE_UNAVAILABLE","FEATURE_NOT_ENABLED"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation. It can change, so don't parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"type":{"type":"string","description":"Broad error category.","examples":["validation","auth","idempotency","rate_limit","queue","feature_gate"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"string"},"http_status":{"type":"integer","description":"The HTTP status code of the response.","enum":[400,401,403,404,409,413,415,422,429,500,502,503],"isRequired":true,"uniqueKey":"error.http_status","typeLabel":"enum\u003cinteger>"},"retryable":{"type":"boolean","description":"Whether sending the same request again later can succeed.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"doc_url":{"type":"string","format":"uri","description":"Link to documentation for this error code.","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"details":{"type":"array","description":"Extra structured context, such as the fields that failed validation or the limit you hit.","items":{"type":"object","additionalProperties":true,"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"error.details","typeLabel":"object[]"},"retry_after":{"type":"integer","minimum":1,"description":"Seconds to wait before retrying. Also sent as the `Retry-After` header.","uniqueKey":"error.retry_after","typeLabel":"integer"},"reset_at":{"type":"string","examples":["2026-10-14T17:01:00.000Z"],"format":"date-time","description":"When the limit you hit resets.","uniqueKey":"error.reset_at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"trace_id":{"type":"string","examples":["trc_8f2a1c0e4b7d"],"pattern":"^trc_[A-Za-z0-9_-]+$","isRequired":true,"uniqueKey":"trace_id","typeLabel":"string"},"timestamp":{"type":"string","examples":["2026-10-14T17:01:00.000Z"],"format":"date-time","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string\u003cdate-time>"},"client_request_id":{"type":"string","description":"Your `X-Request-ID` header value, echoed back when you send one.","uniqueKey":"client_request_id","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":"error","error":{"code":"RATE_LIMIT_EXCEEDED","message":"\u003cstring>","type":"validation","http_status":400,"retryable":true,"doc_url":"\u003cstring>","details":[{}],"retry_after":2,"reset_at":"2026-10-14T17:01:00.000Z"},"trace_id":"trc_8f2a1c0e4b7d","timestamp":"2026-10-14T17:01:00.000Z","client_request_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"f8e389ff-89d2-4af8-8806-4ebfd8d04489":{"description":"The key has the `messaging` role (`PARTNER_ROLE_FORBIDDEN`).","headers":{"X-Trace-ID":{"description":"Unique ID for this request. It matches `trace_id` in the body. Include it when you contact Blujay support.","schema":{"type":"string","examples":["trc_8f2a1c0e4b7d"],"pattern":"^trc_[A-Za-z0-9_-]+$"}}},"content":{"application/json":{"schema":{"type":"object","description":"Wraps every error response. Branch on `error.code`, and include `trace_id` when you contact support.","required":["status","error","trace_id","timestamp"],"properties":{"status":{"const":"error","isRequired":true,"uniqueKey":"status","typeLabel":"any"},"error":{"type":"object","required":["code","message","type","http_status","retryable","doc_url","details"],"properties":{"code":{"type":"string","description":"Stable, machine-readable error code. Branch on this value.","examples":["RATE_LIMIT_EXCEEDED","QUEUE_UNAVAILABLE","FEATURE_NOT_ENABLED"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation. It can change, so don't parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"type":{"type":"string","description":"Broad error category.","examples":["validation","auth","idempotency","rate_limit","queue","feature_gate"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"string"},"http_status":{"type":"integer","description":"The HTTP status code of the response.","enum":[400,401,403,404,409,413,415,422,429,500,502,503],"isRequired":true,"uniqueKey":"error.http_status","typeLabel":"enum\u003cinteger>"},"retryable":{"type":"boolean","description":"Whether sending the same request again later can succeed.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"doc_url":{"type":"string","format":"uri","description":"Link to documentation for this error code.","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"details":{"type":"array","description":"Extra structured context, such as the fields that failed validation or the limit you hit.","items":{"type":"object","additionalProperties":true,"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"error.details","typeLabel":"object[]"},"retry_after":{"type":"integer","minimum":1,"description":"Seconds to wait before retrying. Also sent as the `Retry-After` header.","uniqueKey":"error.retry_after","typeLabel":"integer"},"reset_at":{"type":"string","examples":["2026-10-14T17:01:00.000Z"],"format":"date-time","description":"When the limit you hit resets.","uniqueKey":"error.reset_at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"trace_id":{"type":"string","examples":["trc_8f2a1c0e4b7d"],"pattern":"^trc_[A-Za-z0-9_-]+$","isRequired":true,"uniqueKey":"trace_id","typeLabel":"string"},"timestamp":{"type":"string","examples":["2026-10-14T17:01:00.000Z"],"format":"date-time","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string\u003cdate-time>"},"client_request_id":{"type":"string","description":"Your `X-Request-ID` header value, echoed back when you send one.","uniqueKey":"client_request_id","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":"error","error":{"code":"RATE_LIMIT_EXCEEDED","message":"\u003cstring>","type":"validation","http_status":400,"retryable":true,"doc_url":"\u003cstring>","details":[{}],"retry_after":2,"reset_at":"2026-10-14T17:01:00.000Z"},"trace_id":"trc_8f2a1c0e4b7d","timestamp":"2026-10-14T17:01:00.000Z","client_request_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"215b483f-be45-441c-9f36-72ce1a09b85a":{"description":"The resource doesn't exist or isn't in your workspace.","headers":{"X-Trace-ID":{"description":"Unique ID for this request. It matches `trace_id` in the body. Include it when you contact Blujay support.","schema":{"type":"string","examples":["trc_8f2a1c0e4b7d"],"pattern":"^trc_[A-Za-z0-9_-]+$"}}},"content":{"application/json":{"schema":{"type":"object","description":"Wraps every error response. Branch on `error.code`, and include `trace_id` when you contact support.","required":["status","error","trace_id","timestamp"],"properties":{"status":{"const":"error","isRequired":true,"uniqueKey":"status","typeLabel":"any"},"error":{"type":"object","required":["code","message","type","http_status","retryable","doc_url","details"],"properties":{"code":{"type":"string","description":"Stable, machine-readable error code. Branch on this value.","examples":["RATE_LIMIT_EXCEEDED","QUEUE_UNAVAILABLE","FEATURE_NOT_ENABLED"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","description":"Human-readable explanation. It can change, so don't parse it.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"type":{"type":"string","description":"Broad error category.","examples":["validation","auth","idempotency","rate_limit","queue","feature_gate"],"isRequired":true,"uniqueKey":"error.type","typeLabel":"string"},"http_status":{"type":"integer","description":"The HTTP status code of the response.","enum":[400,401,403,404,409,413,415,422,429,500,502,503],"isRequired":true,"uniqueKey":"error.http_status","typeLabel":"enum\u003cinteger>"},"retryable":{"type":"boolean","description":"Whether sending the same request again later can succeed.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"doc_url":{"type":"string","format":"uri","description":"Link to documentation for this error code.","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"details":{"type":"array","description":"Extra structured context, such as the fields that failed validation or the limit you hit.","items":{"type":"object","additionalProperties":true,"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"error.details","typeLabel":"object[]"},"retry_after":{"type":"integer","minimum":1,"description":"Seconds to wait before retrying. Also sent as the `Retry-After` header.","uniqueKey":"error.retry_after","typeLabel":"integer"},"reset_at":{"type":"string","examples":["2026-10-14T17:01:00.000Z"],"format":"date-time","description":"When the limit you hit resets.","uniqueKey":"error.reset_at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"trace_id":{"type":"string","examples":["trc_8f2a1c0e4b7d"],"pattern":"^trc_[A-Za-z0-9_-]+$","isRequired":true,"uniqueKey":"trace_id","typeLabel":"string"},"timestamp":{"type":"string","examples":["2026-10-14T17:01:00.000Z"],"format":"date-time","isRequired":true,"uniqueKey":"timestamp","typeLabel":"string\u003cdate-time>"},"client_request_id":{"type":"string","description":"Your `X-Request-ID` header value, echoed back when you send one.","uniqueKey":"client_request_id","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":"error","error":{"code":"RATE_LIMIT_EXCEEDED","message":"\u003cstring>","type":"validation","http_status":400,"retryable":true,"doc_url":"\u003cstring>","details":[{}],"retry_after":2,"reset_at":"2026-10-14T17:01:00.000Z"},"trace_id":"trc_8f2a1c0e4b7d","timestamp":"2026-10-14T17:01:00.000Z","client_request_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"0e96cdc4-849e-4a38-8f18-90cb21dab38b":{"PublicApiKey":{"type":"http","scheme":"bearer","bearerFormat":"blu_...","description":"Your workspace API key, sent as `Authorization: Bearer blu_...`. Workspace admins can find it in the Blujay app under **API**.\n\nAn API key has full access to your workspace and works on every endpoint. There is no test mode: every key sends real messages and changes real data, so keep it secret and use it only from your server.\n\nEach API key can make 600 read requests and 120 write requests per minute, plus 60 attachment requests per minute. Over a limit you get `429 RATE_LIMIT_EXCEEDED` with `Retry-After`.\n\n**Reseller partner keys.** A partner key acts for one of the partner's customers when the request names it in the `Blujay-Workspace` header (the customer's `workspace_` ID). Without the header it reaches only `/v1/partner/*` and `/v1/me`. Each customer gets the limits above for each partner key, and all of a partner's requests together get ten times those limits; a `429` says which in `error.details[0].scope` (`partner_customer` or `partner`). A `messaging` key can read anything for a customer and change chats, messages, contacts, attachments and vCards; everything else needs an `admin` key (`403 PARTNER_ROLE_FORBIDDEN`). Paused or closing customers can be read but not changed (`409 CUSTOMER_PAUSED` or `CUSTOMER_CLOSING`). Any other workspace ID in the header returns `404 NOT_FOUND`; using the header with any other credential returns `400 WORKSPACE_HEADER_NOT_ALLOWED`.\n","scopes":[],"schemeName":"PublicApiKey"}}},"servers":{"660565a7-87d9-4b09-af2e-872548a05c9e":{"url":"https://api.blujay.io","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"blu_...","description":"Your workspace API key, sent as `Authorization: Bearer blu_...`. Workspace admins can find it in the Blujay app under **API**.\n\nAn API key has full access to your workspace and works on every endpoint. There is no test mode: every key sends real messages and changes real data, so keep it secret and use it only from your server.\n\nEach API key can make 600 read requests and 120 write requests per minute, plus 60 attachment requests per minute. Over a limit you get `429 RATE_LIMIT_EXCEEDED` with `Retry-After`.\n\n**Reseller partner keys.** A partner key acts for one of the partner's customers when the request names it in the `Blujay-Workspace` header (the customer's `workspace_` ID). Without the header it reaches only `/v1/partner/*` and `/v1/me`. Each customer gets the limits above for each partner key, and all of a partner's requests together get ten times those limits; a `429` says which in `error.details[0].scope` (`partner_customer` or `partner`). A `messaging` key can read anything for a customer and change chats, messages, contacts, attachments and vCards; everything else needs an `admin` key (`403 PARTNER_ROLE_FORBIDDEN`). Paused or closing customers can be read but not changed (`409 CUSTOMER_PAUSED` or `CUSTOMER_CLOSING`). Any other workspace ID in the header returns `404 NOT_FOUND`; using the header with any other credential returns `400 WORKSPACE_HEADER_NOT_ALLOWED`.\n","scopes":[],"schemeName":"PublicApiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Your workspace API key, sent as `Authorization: Bearer blu_...`. Workspace admins can find it in the Blujay app under **API**.\n\nAn API key has full access to your workspace and works on every endpoint. There is no test mode: every key sends real messages and changes real data, so keep it secret and use it only from your server.\n\nEach API key can make 600 read requests and 120 write requests per minute, plus 60 attachment requests per minute. Over a limit you get `429 RATE_LIMIT_EXCEEDED` with `Retry-After`.\n\n**Reseller partner keys.** A partner key acts for one of the partner's customers when the request names it in the `Blujay-Workspace` header (the customer's `workspace_` ID). Without the header it reaches only `/v1/partner/*` and `/v1/me`. Each customer gets the limits above for each partner key, and all of a partner's requests together get ten times those limits; a `429` says which in `error.details[0].scope` (`partner_customer` or `partner`). A `messaging` key can read anything for a customer and change chats, messages, contacts, attachments and vCards; everything else needs an `admin` key (`403 PARTNER_ROLE_FORBIDDEN`). Paused or closing customers can be read but not changed (`409 CUSTOMER_PAUSED` or `CUSTOMER_CLOSING`). Any other workspace ID in the header returns `404 NOT_FOUND`; using the header with any other credential returns `400 WORKSPACE_HEADER_NOT_ALLOWED`.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"PublicApiKey","name":"Authorization"}],"title":"PublicApiKey"}]},"originalFileLocation":"api-reference/openapi.yaml"},"subdomain":"blujay-api","siteName":"Blujay API","title":"Create a partner webhook subscription - Blujay API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-11T01:31:24.174Z","originalFileLocation":"api-reference/partners/create-a-partner-webhook-subscription.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=\"Reseller partner admin keys only, without Blujay-Workspace. One HTTPS endpoint receives the events you choose for every customer, current and future. Each event\u0026#x27;s workspace_id names the customer (the same ID you send in Blujay-Workspace), and its subscription_id is this subscription\u0026#x27;s ID. Every customer\u0026#x27;s events are signed with this subscription\u0026#x27;s signing_secret, shown only in this response. customer.created, customer.paused and customer.closed are sent about your customers themselves. Customers can\u0026#x27;t see, change or delete this subscription.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Blujay API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/blujay-api/ME8eQTARhlNFGeGt/_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/blujay-api/ME8eQTARhlNFGeGt/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/blujay-api/ME8eQTARhlNFGeGt/_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/blujay-api/ME8eQTARhlNFGeGt/_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/blujay-api/ME8eQTARhlNFGeGt/_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/blujay-api/ME8eQTARhlNFGeGt/_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/blujay-api/ME8eQTARhlNFGeGt/_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/blujay-api/ME8eQTARhlNFGeGt/_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/blujay-api/ME8eQTARhlNFGeGt/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create a partner webhook subscription - Blujay API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Reseller partner admin keys only, without Blujay-Workspace. One HTTPS endpoint receives the events you choose for every customer, current and future. Each event\u0026#x27;s workspace_id names the customer (the same ID you send in Blujay-Workspace), and its subscription_id is this subscription\u0026#x27;s ID. Every customer\u0026#x27;s events are signed with this subscription\u0026#x27;s signing_secret, shown only in this response. customer.created, customer.paused and customer.closed are sent about your customers themselves. Customers can\u0026#x27;t see, change or delete this subscription.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Blujay API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.blujay.io/api-reference/partners/create-a-partner-webhook-subscription\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://blujay-api.mintlify.site/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Create+a+partner+webhook+subscription\u0026amp;description=Reseller+partner+%60admin%60+keys+only%2C+without+%60Blujay-Workspace%60.+One+HTTPS+endpoint+receives+the+events+you+choose+for+every+customer%2C+current+and+future.+Each+e\u0026amp;theme=fd31e5cf5d981648caebe5b9\u0026amp;signature=5812ef79a2350087f11e8b1be4f6b8348e713ab043a5ec1b26ea366338fe6744\">\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=\"Create a partner webhook subscription - Blujay API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Reseller partner admin keys only, without Blujay-Workspace. One HTTPS endpoint receives the events you choose for every customer, current and future. Each event\u0026#x27;s workspace_id names the customer (the same ID you send in Blujay-Workspace), and its subscription_id is this subscription\u0026#x27;s ID. Every customer\u0026#x27;s events are signed with this subscription\u0026#x27;s signing_secret, shown only in this response. customer.created, customer.paused and customer.closed are sent about your customers themselves. Customers can\u0026#x27;t see, change or delete this subscription.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://blujay-api.mintlify.site/_mintlify/api/og/v2?division=Documentation\u0026amp;title=Create+a+partner+webhook+subscription\u0026amp;description=Reseller+partner+%60admin%60+keys+only%2C+without+%60Blujay-Workspace%60.+One+HTTPS+endpoint+receives+the+events+you+choose+for+every+customer%2C+current+and+future.+Each+e\u0026amp;theme=fd31e5cf5d981648caebe5b9\u0026amp;signature=5812ef79a2350087f11e8b1be4f6b8348e713ab043a5ec1b26ea366338fe6744\">\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/blujay-api/ME8eQTARhlNFGeGt/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Blujay API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#007AFF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.blujay.io/api-reference/partners/create-a-partner-webhook-subscription\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/partners/create-a-partner-webhook-subscription.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Blujay API\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Blujay API\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/partners/create-a-partner-webhook-subscription.md","siteName":"Blujay API","nav":{"global":null,"tabs":[{"tab":"Guides","groups":[{"group":"Guides","pages":[{"group":"Blujay API","expanded":true,"pages":[{"title":"Blujay API","sidebarTitle":"Introduction","href":""}]},{"group":"Get Started","expanded":true,"pages":[{"title":"Quickstart","href":"/quickstart"},{"title":"Authentication","href":"/authentication"},{"title":"Key Concepts","href":"/key-concepts"},{"title":"SDKs","href":"/sdks"},{"title":"AI Coding Agents","href":"/build-with-ai"},{"title":"MCP Server","href":"/mcp-server"},{"title":"Best Practices","href":"/best-practices"}]},{"group":"Messages","expanded":true,"pages":[{"title":"Messaging","sidebarTitle":"Overview","href":"/messaging/overview"},{"title":"Sending Messages","href":"/messaging/send-messages"},{"title":"Receiving Messages","href":"/messaging/receive-messages"},{"title":"Message Status","href":"/messaging/lifecycle"},{"title":"Attachments","href":"/messaging/media"},{"title":"Voice Memos","href":"/messaging/voice-memos"},{"title":"Contact Cards","href":"/messaging/contact-cards"},{"title":"Rich Link Previews","href":"/messaging/rich-link-previews"},{"title":"Reactions","href":"/messaging/reactions"},{"title":"Threaded Replies","href":"/messaging/replies"},{"title":"Message Effects","href":"/messaging/effects"},{"title":"Edit and Unsend","href":"/messaging/edit-and-unsend"}]},{"group":"Chats","expanded":true,"pages":[{"title":"Chats","sidebarTitle":"Overview","href":"/chats/overview"},{"title":"Number Lookup","href":"/messaging/choosing-a-service"},{"title":"Group Chats","href":"/messaging/group-chats"},{"title":"Typing and Read Receipts","href":"/messaging/typing-and-read-receipts"},{"title":"Name and Photo Sharing","href":"/messaging/name-and-photo"}]},{"group":"Numbers and Plans","expanded":true,"pages":[{"title":"Phone Numbers","href":"/phone-numbers"},{"title":"Plan Limits","href":"/plans"}]},{"group":"Contacts","expanded":true,"pages":[{"title":"Contacts","href":"/contacts"},{"title":"Opt-Outs","href":"/opt-outs"},{"title":"Workflows","href":"/workflows"}]},{"group":"Calls","expanded":true,"pages":[{"title":"Calls and Recordings","href":"/messaging/calls"}]},{"group":"Webhooks","expanded":true,"pages":[{"title":"Webhooks","sidebarTitle":"Overview","href":"/webhooks/overview"},{"title":"Verifying Signatures","href":"/webhooks/verify-signatures"},{"title":"Event Types","href":"/webhooks/events"},{"title":"Delivery and Retries","href":"/webhooks/delivery"},{"title":"Versions","href":"/webhooks/versions"}]},{"group":"Going Live","expanded":true,"pages":[{"title":"Making Requests","href":"/making-requests"},{"title":"Sending Rules","href":"/messaging/sending-rules"},{"title":"Rate Limits","href":"/rate-limits"},{"title":"Idempotency","href":"/idempotency"},{"title":"Debugging","href":"/debugging"}]},{"group":"Partners","expanded":true,"pages":[{"title":"Partner Accounts","href":"/partners/overview"}]},{"group":"Help","expanded":true,"pages":[{"title":"Examples","href":"/examples"},{"title":"FAQ","href":"/faq"},{"title":"Glossary","href":"/glossary"},{"title":"Support","href":"/support"}]}]}]},{"tab":"API reference","groups":[{"group":"Overview","pages":[{"title":"API reference","href":"/api-reference/introduction"}]},{"group":"Endpoints","pages":[{"group":"Auth","pages":[{"title":"Get the current credential","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/me","href":"/api-reference/auth/get-the-current-credential"}]},{"group":"Chats","pages":[{"title":"List chats","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/chats","href":"/api-reference/chats/list-chats"},{"title":"Create a chat and send the first message","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/chats","href":"/api-reference/chats/create-a-chat-and-send-the-first-message"},{"title":"Get a chat","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/chats/{chat_id}","href":"/api-reference/chats/get-a-chat"},{"title":"Rename a group chat or set its photo","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/chats/{chat_id}","href":"/api-reference/chats/rename-a-group-chat-or-set-its-photo"},{"title":"Download a group chat's photo","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/chats/{chat_id}/icon","href":"/api-reference/chats/download-a-group-chats-photo"},{"title":"Leave a group chat","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/chats/{chat_id}/leave","href":"/api-reference/chats/leave-a-group-chat"},{"title":"List group participants","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/chats/{chat_id}/participants","href":"/api-reference/chats/list-group-participants"},{"title":"Add a group participant","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/chats/{chat_id}/participants","href":"/api-reference/chats/add-a-group-participant"},{"title":"Remove a group participant","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/chats/{chat_id}/participants","href":"/api-reference/chats/remove-a-group-participant"},{"title":"Start a typing indicator","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/chats/{chat_id}/typing","href":"/api-reference/chats/start-a-typing-indicator"},{"title":"Stop a typing indicator","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/chats/{chat_id}/typing","href":"/api-reference/chats/stop-a-typing-indicator"},{"title":"Mark a chat as read","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/chats/{chat_id}/read","href":"/api-reference/chats/mark-a-chat-as-read"}]},{"group":"Messages","pages":[{"title":"List messages in a chat","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/chats/{chat_id}/messages","href":"/api-reference/messages/list-messages-in-a-chat"},{"title":"Send a message","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/chats/{chat_id}/messages","href":"/api-reference/messages/send-a-message"},{"title":"List messages","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/messages","href":"/api-reference/messages/list-messages"},{"title":"Get a message","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/messages/{message_id}","href":"/api-reference/messages/get-a-message"},{"title":"Edit a message","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/messages/{message_id}","href":"/api-reference/messages/edit-a-message"},{"title":"List a reply thread","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/messages/{message_id}/thread","href":"/api-reference/messages/list-a-reply-thread"},{"title":"Unsend a message","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/messages/{message_id}/unsend","href":"/api-reference/messages/unsend-a-message"},{"title":"Add a reaction","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/messages/{message_id}/reactions","href":"/api-reference/messages/add-a-reaction"},{"title":"Remove a reaction","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/messages/{message_id}/reactions/{type}","href":"/api-reference/messages/remove-a-reaction"}]},{"group":"Phone Numbers","pages":[{"title":"List phone numbers","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/phone-numbers","href":"/api-reference/phone-numbers/list-phone-numbers"},{"title":"Get a phone number","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/phone-numbers/{phone_number_id}","href":"/api-reference/phone-numbers/get-a-phone-number"},{"title":"Get a number's iMessage name and photo","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/phone-numbers/{phone_number_id}/contact-card","href":"/api-reference/phone-numbers/get-a-numbers-imessage-name-and-photo"},{"title":"Set a number's iMessage name and photo","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /v1/phone-numbers/{phone_number_id}/contact-card","href":"/api-reference/phone-numbers/set-a-numbers-imessage-name-and-photo"},{"title":"Turn off a number's iMessage name and photo","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/phone-numbers/{phone_number_id}/contact-card","href":"/api-reference/phone-numbers/turn-off-a-numbers-imessage-name-and-photo"},{"title":"Download a number's iMessage photo","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/phone-numbers/{phone_number_id}/contact-card/photo","href":"/api-reference/phone-numbers/download-a-numbers-imessage-photo"}]},{"group":"Capability","pages":[{"title":"Check iMessage, RCS or SMS support","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/capability/evaluate_service","href":"/api-reference/capability/check-imessage-rcs-or-sms-support"}]},{"group":"Team Members","pages":[{"title":"List assignable team members","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/team-members/assignable","href":"/api-reference/team-members/list-assignable-team-members"}]},{"group":"Partners","pages":[]},{"group":"Workflows","pages":[{"title":"List workflows","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/workflows","href":"/api-reference/workflows/list-workflows"},{"title":"Enroll a contact in a workflow","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/workflows/{workflow_id}/enrollments","href":"/api-reference/workflows/enroll-a-contact-in-a-workflow"}]},{"group":"Contacts","pages":[{"title":"List contacts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/contacts","href":"/api-reference/contacts/list-contacts"},{"title":"Create a contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/contacts","href":"/api-reference/contacts/create-a-contact"},{"title":"Create or update a contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/contacts/import","href":"/api-reference/contacts/create-or-update-a-contact"},{"title":"Search contacts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/contacts/search","href":"/api-reference/contacts/search-contacts"},{"title":"Get a contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/contacts/{contact_id}","href":"/api-reference/contacts/get-a-contact"},{"title":"Delete a contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/contacts/{contact_id}","href":"/api-reference/contacts/delete-a-contact"},{"title":"Update a contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/contacts/{contact_id}","href":"/api-reference/contacts/update-a-contact"},{"title":"Add a tag to a contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/contacts/{contact_id}/tags","href":"/api-reference/contacts/add-a-tag-to-a-contact"},{"title":"List a contact's notes","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/contacts/{contact_id}/notes","href":"/api-reference/contacts/list-a-contacts-notes"},{"title":"Add a note to a contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/contacts/{contact_id}/notes","href":"/api-reference/contacts/add-a-note-to-a-contact"},{"title":"Mark a contact completed","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/contacts/{contact_id}/stage","href":"/api-reference/contacts/mark-a-contact-completed"},{"title":"Assign a contact to a team member","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/contacts/{contact_id}/assignee","href":"/api-reference/contacts/assign-a-contact-to-a-team-member"},{"title":"Opt out a contact","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/contacts/{contact_id}/suppress","href":"/api-reference/contacts/opt-out-a-contact"},{"title":"Remove a contact's opt-out","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/contacts/{contact_id}/unsuppress","href":"/api-reference/contacts/remove-a-contacts-opt-out"},{"title":"Opt out a phone number or email","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/contacts/suppressions","href":"/api-reference/contacts/opt-out-a-phone-number-or-email"}]},{"group":"Attachments","pages":[{"title":"Upload an attachment","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/attachments","href":"/api-reference/attachments/upload-an-attachment"},{"title":"Get an attachment","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/attachments/{attachment_id}","href":"/api-reference/attachments/get-an-attachment"},{"title":"Delete an attachment","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/attachments/{attachment_id}","href":"/api-reference/attachments/delete-an-attachment"},{"title":"Download an attachment","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/attachments/{attachment_id}/content","href":"/api-reference/attachments/download-an-attachment"}]},{"group":"Calls","pages":[{"title":"Download a call recording","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/calls/{call_id}/recording","href":"/api-reference/calls/download-a-call-recording"}]},{"group":"vCards","pages":[{"title":"List saved vCards","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/vcards","href":"/api-reference/vcards/list-saved-vcards"},{"title":"Save a vCard","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/vcards","href":"/api-reference/vcards/save-a-vcard"},{"title":"Get a saved vCard","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/vcards/{vcard_id}","href":"/api-reference/vcards/get-a-saved-vcard"},{"title":"Delete a saved vCard","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/vcards/{vcard_id}","href":"/api-reference/vcards/delete-a-saved-vcard"},{"title":"Update a saved vCard","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/vcards/{vcard_id}","href":"/api-reference/vcards/update-a-saved-vcard"}]},{"group":"Webhooks","pages":[{"title":"List webhook subscriptions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/webhook-subscriptions","href":"/api-reference/webhooks/list-webhook-subscriptions"},{"title":"Create a webhook subscription","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/webhook-subscriptions","href":"/api-reference/webhooks/create-a-webhook-subscription"},{"title":"Get a webhook subscription","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/webhook-subscriptions/{subscription_id}","href":"/api-reference/webhooks/get-a-webhook-subscription"},{"title":"Delete a webhook subscription","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/webhook-subscriptions/{subscription_id}","href":"/api-reference/webhooks/delete-a-webhook-subscription"},{"title":"Update a webhook subscription","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/webhook-subscriptions/{subscription_id}","href":"/api-reference/webhooks/update-a-webhook-subscription"},{"title":"List webhook delivery attempts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/webhook-subscriptions/{subscription_id}/deliveries","href":"/api-reference/webhooks/list-webhook-delivery-attempts"},{"title":"Replay a webhook event","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/webhook-subscriptions/{subscription_id}/events/{event_id}/replay","href":"/api-reference/webhooks/replay-a-webhook-event"},{"title":"Webhook event","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook publicEvent","href":"/api-reference/webhooks/webhook-event"}]}]},{"group":"Errors","pages":[{"title":"Errors","href":"/errors/index"},{"group":"Request errors","pages":[{"title":"VALIDATION_ERROR","sidebarTitle":"VALIDATION_ERROR","href":"/errors/validation-error"},{"title":"INVALID_PUBLIC_ID","sidebarTitle":"INVALID_PUBLIC_ID","href":"/errors/invalid-public-id"},{"title":"INVALID_CURSOR","sidebarTitle":"INVALID_CURSOR","href":"/errors/invalid-cursor"},{"title":"NOT_FOUND","sidebarTitle":"NOT_FOUND","href":"/errors/not-found"},{"title":"FEATURE_NOT_ENABLED","sidebarTitle":"FEATURE_NOT_ENABLED","href":"/errors/feature-not-enabled"}]},{"group":"Authentication","pages":[{"title":"UNAUTHORIZED","sidebarTitle":"UNAUTHORIZED","href":"/errors/unauthorized"},{"title":"API_KEY_REVOKED","sidebarTitle":"API_KEY_REVOKED","href":"/errors/api-key-revoked"},{"title":"API_KEY_EXPIRED","sidebarTitle":"API_KEY_EXPIRED","href":"/errors/api-key-expired"},{"title":"OAUTH_TOKEN_INVALID","sidebarTitle":"OAUTH_TOKEN_INVALID","href":"/errors/oauth-token-invalid"},{"title":"OAUTH_SCOPE_REQUIRED","sidebarTitle":"OAUTH_SCOPE_REQUIRED","href":"/errors/oauth-scope-required"},{"title":"OAUTH_ROUTE_NOT_ENABLED","sidebarTitle":"OAUTH_ROUTE_NOT_ENABLED","href":"/errors/oauth-route-not-enabled"}]},{"group":"Idempotency","pages":[{"title":"IDEMPOTENCY_REQUEST_MISMATCH","sidebarTitle":"IDEMPOTENCY_REQUEST_MISMATCH","href":"/errors/idempotency-request-mismatch"},{"title":"IDEMPOTENCY_KEY_MISMATCH","sidebarTitle":"IDEMPOTENCY_KEY_MISMATCH","href":"/errors/idempotency-key-mismatch"},{"title":"IDEMPOTENCY_IN_PROGRESS","sidebarTitle":"IDEMPOTENCY_IN_PROGRESS","href":"/errors/idempotency-in-progress"}]},{"group":"Rate limits and capacity","pages":[{"title":"RATE_LIMIT_EXCEEDED","sidebarTitle":"RATE_LIMIT_EXCEEDED","href":"/errors/rate-limit-exceeded"},{"title":"QUEUE_FULL","sidebarTitle":"QUEUE_FULL","href":"/errors/queue-full"},{"title":"ATTACHMENT_CAPACITY_EXCEEDED","sidebarTitle":"ATTACHMENT_CAPACITY_EXCEEDED","href":"/errors/attachment-capacity-exceeded"}]},{"group":"Sending messages","pages":[{"title":"EMAIL_REQUIRES_IMESSAGE","sidebarTitle":"EMAIL_REQUIRES_IMESSAGE","href":"/errors/email-requires-imessage"},{"title":"FIRST_MESSAGE_LINK_NOT_ALLOWED","sidebarTitle":"FIRST_MESSAGE_LINK_NOT_ALLOWED","href":"/errors/first-message-link-not-allowed"},{"title":"PRE_REPLY_CONTENT_BLOCKED","sidebarTitle":"PRE_REPLY_CONTENT_BLOCKED","href":"/errors/pre-reply-content-blocked"},{"title":"PRE_REPLY_LENGTH_EXCEEDED","sidebarTitle":"PRE_REPLY_LENGTH_EXCEEDED","href":"/errors/pre-reply-length-exceeded"},{"title":"PRE_REPLY_LIMIT_REACHED","sidebarTitle":"PRE_REPLY_LIMIT_REACHED","href":"/errors/pre-reply-limit-reached"},{"title":"RECIPIENT_SUPPRESSED","sidebarTitle":"RECIPIENT_SUPPRESSED","href":"/errors/recipient-suppressed"},{"title":"CONTACT_NOT_VERIFIED","sidebarTitle":"CONTACT_NOT_VERIFIED","href":"/errors/contact-not-verified"},{"title":"CONTACT_MUST_TEXT_FIRST","sidebarTitle":"CONTACT_MUST_TEXT_FIRST","href":"/errors/contact-must-text-first"},{"title":"SENDER_SUSPENDED","sidebarTitle":"SENDER_SUSPENDED","href":"/errors/sender-suspended"},{"title":"SENDER_RETIRED","sidebarTitle":"SENDER_RETIRED","href":"/errors/sender-retired"},{"title":"FROM_NUMBER_REQUIRED","sidebarTitle":"FROM_NUMBER_REQUIRED","href":"/errors/from-number-required"}]},{"group":"Chats and groups","pages":[{"title":"UNSUPPORTED_CHAT_OPERATION","sidebarTitle":"UNSUPPORTED_CHAT_OPERATION","href":"/errors/unsupported-chat-operation"},{"title":"REPLY_TARGET_NOT_FOUND","sidebarTitle":"REPLY_TARGET_NOT_FOUND","href":"/errors/reply-target-not-found"},{"title":"REPLY_TARGET_NOT_IN_CHAT","sidebarTitle":"REPLY_TARGET_NOT_IN_CHAT","href":"/errors/reply-target-not-in-chat"},{"title":"REPLY_TARGET_NOT_REPLYABLE","sidebarTitle":"REPLY_TARGET_NOT_REPLYABLE","href":"/errors/reply-target-not-replyable"},{"title":"REPLY_TARGET_NOT_SENT","sidebarTitle":"REPLY_TARGET_NOT_SENT","href":"/errors/reply-target-not-sent"},{"title":"PHONE_NUMBER_REQUIRED","sidebarTitle":"PHONE_NUMBER_REQUIRED","href":"/errors/phone-number-required"},{"title":"LAST_PHONE_NUMBER_IN_GROUP","sidebarTitle":"LAST_PHONE_NUMBER_IN_GROUP","href":"/errors/last-phone-number-in-group"},{"title":"GROUP_MINIMUM_PARTICIPANTS","sidebarTitle":"GROUP_MINIMUM_PARTICIPANTS","href":"/errors/group-minimum-participants"},{"title":"PHONE_NUMBER_HAS_SCHEDULED_MESSAGES","sidebarTitle":"PHONE_NUMBER_HAS_SCHEDULED_MESSAGES","href":"/errors/phone-number-has-scheduled-messages"},{"title":"PHONE_NUMBER_HAS_MESSAGES_SENDING","sidebarTitle":"PHONE_NUMBER_HAS_MESSAGES_SENDING","href":"/errors/phone-number-has-messages-sending"}]},{"group":"Edit and unsend","pages":[{"title":"MESSAGE_NOT_SENT_YET","sidebarTitle":"MESSAGE_NOT_SENT_YET","href":"/errors/message-not-sent-yet"},{"title":"MESSAGE_NOT_EDITABLE","sidebarTitle":"MESSAGE_NOT_EDITABLE","href":"/errors/message-not-editable"},{"title":"EDIT_WINDOW_EXPIRED","sidebarTitle":"EDIT_WINDOW_EXPIRED","href":"/errors/edit-window-expired"},{"title":"EDIT_LIMIT_REACHED","sidebarTitle":"EDIT_LIMIT_REACHED","href":"/errors/edit-limit-reached"},{"title":"UNSEND_WINDOW_EXPIRED","sidebarTitle":"UNSEND_WINDOW_EXPIRED","href":"/errors/unsend-window-expired"},{"title":"EDIT_UNCHANGED","sidebarTitle":"EDIT_UNCHANGED","href":"/errors/edit-unchanged"},{"title":"SENDER_UNAVAILABLE","sidebarTitle":"SENDER_UNAVAILABLE","href":"/errors/sender-unavailable"},{"title":"CHANGE_REJECTED","sidebarTitle":"CHANGE_REJECTED","href":"/errors/change-rejected"},{"title":"CHANGE_UNCONFIRMED","sidebarTitle":"CHANGE_UNCONFIRMED","href":"/errors/change-unconfirmed"}]},{"group":"Media","pages":[{"title":"ATTACHMENT_NOT_READY","sidebarTitle":"ATTACHMENT_NOT_READY","href":"/errors/attachment-not-ready"},{"title":"ATTACHMENT_UPLOAD_INVALID","sidebarTitle":"ATTACHMENT_UPLOAD_INVALID","href":"/errors/attachment-upload-invalid"},{"title":"ATTACHMENT_TOO_LARGE","sidebarTitle":"ATTACHMENT_TOO_LARGE","href":"/errors/attachment-too-large"},{"title":"UNSUPPORTED_ATTACHMENT_TYPE","sidebarTitle":"UNSUPPORTED_ATTACHMENT_TYPE","href":"/errors/unsupported-attachment-type"},{"title":"ATTACHMENT_FETCH_FAILED","sidebarTitle":"ATTACHMENT_FETCH_FAILED","href":"/errors/attachment-fetch-failed"},{"title":"ATTACHMENT_STORAGE_UNAVAILABLE","sidebarTitle":"ATTACHMENT_STORAGE_UNAVAILABLE","href":"/errors/attachment-storage-unavailable"},{"title":"VOICE_MEMO_UNREADABLE","sidebarTitle":"VOICE_MEMO_UNREADABLE","href":"/errors/voice-memo-unreadable"},{"title":"VOICE_MEMO_PROCESSING_UNAVAILABLE","sidebarTitle":"VOICE_MEMO_PROCESSING_UNAVAILABLE","href":"/errors/voice-memo-processing-unavailable"},{"title":"RECORDING_UNAVAILABLE","sidebarTitle":"RECORDING_UNAVAILABLE","href":"/errors/recording-unavailable"}]},{"group":"Contacts","pages":[{"title":"CONTACT_ALREADY_EXISTS","sidebarTitle":"CONTACT_ALREADY_EXISTS","href":"/errors/contact-already-exists"},{"title":"CONTACT_PHONE_LOCKED","sidebarTitle":"CONTACT_PHONE_LOCKED","href":"/errors/contact-phone-locked"},{"title":"CONTACT_MATCH_CONFLICT","sidebarTitle":"CONTACT_MATCH_CONFLICT","href":"/errors/contact-match-conflict"}]},{"group":"Workflows","pages":[{"title":"WORKFLOW_LIFECYCLE_ERROR","sidebarTitle":"WORKFLOW_LIFECYCLE_ERROR","href":"/errors/workflow-lifecycle-error"},{"title":"WORKFLOW_VALIDATION_ERROR","sidebarTitle":"WORKFLOW_VALIDATION_ERROR","href":"/errors/workflow-validation-error"}]},{"group":"Webhooks","pages":[{"title":"UNSUPPORTED_WEBHOOK_EVENT","sidebarTitle":"UNSUPPORTED_WEBHOOK_EVENT","href":"/errors/unsupported-webhook-event"},{"title":"WEBHOOK_URL_INVALID","sidebarTitle":"WEBHOOK_URL_INVALID","href":"/errors/webhook-url-invalid"},{"title":"WEBHOOK_URL_UNSAFE","sidebarTitle":"WEBHOOK_URL_UNSAFE","href":"/errors/webhook-url-unsafe"},{"title":"WEBHOOK_URL_UNRESOLVABLE","sidebarTitle":"WEBHOOK_URL_UNRESOLVABLE","href":"/errors/webhook-url-unresolvable"},{"title":"WEBHOOK_VERSION_UNSUPPORTED","sidebarTitle":"WEBHOOK_VERSION_UNSUPPORTED","href":"/errors/webhook-version-unsupported"},{"title":"WEBHOOK_SUBSCRIPTION_INACTIVE","sidebarTitle":"WEBHOOK_SUBSCRIPTION_INACTIVE","href":"/errors/webhook-subscription-inactive"},{"title":"WEBHOOK_PHONE_NUMBER_EXCLUDED","sidebarTitle":"WEBHOOK_PHONE_NUMBER_EXCLUDED","href":"/errors/webhook-phone-number-excluded"}]},{"group":"Server and availability","pages":[{"title":"CAPABILITY_CHECK_UNAVAILABLE","sidebarTitle":"CAPABILITY_CHECK_UNAVAILABLE","href":"/errors/capability-check-unavailable"},{"title":"QUEUE_UNAVAILABLE","sidebarTitle":"QUEUE_UNAVAILABLE","href":"/errors/queue-unavailable"},{"title":"PHONE_NUMBER_UNAVAILABLE","sidebarTitle":"PHONE_NUMBER_UNAVAILABLE","href":"/errors/phone-number-unavailable"},{"title":"INTERNAL_ERROR","sidebarTitle":"INTERNAL_ERROR","href":"/errors/internal-error"}]},{"group":"Reseller partners","pages":[{"title":"WORKSPACE_HEADER_NOT_ALLOWED","sidebarTitle":"WORKSPACE_HEADER_NOT_ALLOWED","href":"/errors/workspace-header-not-allowed"},{"title":"WORKSPACE_HEADER_REQUIRED","sidebarTitle":"WORKSPACE_HEADER_REQUIRED","href":"/errors/workspace-header-required"},{"title":"PARTNER_ROLE_FORBIDDEN","sidebarTitle":"PARTNER_ROLE_FORBIDDEN","href":"/errors/partner-role-forbidden"},{"title":"CUSTOMER_PAUSED","sidebarTitle":"CUSTOMER_PAUSED","href":"/errors/customer-paused"},{"title":"CUSTOMER_CLOSING","sidebarTitle":"CUSTOMER_CLOSING","href":"/errors/customer-closing"},{"title":"EMBED_PARENT_ORIGIN_NOT_REGISTERED","sidebarTitle":"EMBED_PARENT_ORIGIN_NOT_REGISTERED","href":"/errors/embed-parent-origin-not-registered"},{"title":"EMBED_UNAVAILABLE","sidebarTitle":"EMBED_UNAVAILABLE","href":"/errors/embed-unavailable"},{"title":"CUSTOMER_EXTERNAL_REFERENCE_CONFLICT","sidebarTitle":"CUSTOMER_EXTERNAL_REFERENCE_CONFLICT","href":"/errors/customer-external-reference-conflict"},{"title":"AREA_CODE_UNAVAILABLE","sidebarTitle":"AREA_CODE_UNAVAILABLE","href":"/errors/area-code-unavailable"},{"title":"NO_PHONE_NUMBERS_AVAILABLE","sidebarTitle":"NO_PHONE_NUMBERS_AVAILABLE","href":"/errors/no-phone-numbers-available"},{"title":"TEAM_MEMBER_EMAIL_CONFLICT","sidebarTitle":"TEAM_MEMBER_EMAIL_CONFLICT","href":"/errors/team-member-email-conflict"}]}]}]}]},"basePath":"","title":"Create a partner webhook subscription - Blujay API","buildId":"dpl_596ePT575z4qnAFksq1biRW97aLY","deploymentId":"dpl_596ePT575z4qnAFksq1biRW97aLY","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C9Wu0MeN.js","utils-jWgu-6Qf.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DBD8f9qn.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BGuX1ui5.js","snippetPresets-Evy63nQB.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BQHO1lnV.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-B6C8m-t_.js","shallow-BG4cT0fH.js","getApiPlaygroundDisplay-CgEPrE-D.js","CodeSnippet-CU8JyZ9N.js","CodeSnippets-BnxHU32T.js","Page-D6S0Yh6q.js","getPastedJson-CwiYOonh.js","icon-DYDpWmDf.js","MethodPill-C-J-l7_c.js","DuplicateIcon-B6ARwg9w.js","createIcon-Dsv4MtDq.js","DynamicMarkdown-CtasenyM.js","SectionHeading-YNcgYwjB.js","axios-vUo_bRtp.js","Markdown-CwLx6PAg.js","clsx-C3kuh_dz.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CmKHfscc.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-U3mI6Ljh.js"]}