{
"code": "ERROR",
"message": "The phone is off or its server is unreachable — or the send failed within the wait window (code MESSAGE_SEND_FAILED): WhatsApp rejected the message (ack -1), or the phone gave up before it reached WhatsApp, for example because the number is not on WhatsApp. details carry unique_id, org_phone, chat_id, ack -1 and the failure reason when one was reported, plus message_id when a message record exists. Retry from another phone via the x-phone header.",
"status": 400
}
{
"code": "RATE_LIMIT_ERROR",
"message": "You can only make 100 requests per second",
"status": 429
}
{
"code": "UNKNOWN_ERROR",
"message": "Internal server error",
"status": 500
}
Message APIs
Send Sync Message
Sends a message like POST /message/send (including automatic phone selection for group chats when x-phone is omitted), then waits up to sync_timeout seconds (default 20) for WhatsApp to accept or reject the message. When accepted in time the response carries the sent message record (status sent). When the send fails in time — WhatsApp rejected it (ack -1), or the phone gave up before it reached WhatsApp, for example because the number is not on WhatsApp — the request fails with a 400 MESSAGE_SEND_FAILED error carrying the reason, so the caller can retry — typically from another phone via the x-phone header. Otherwise it falls back to the asynchronous queued response.
TypeScript
import { PeriskopeApi } from '@periskope/periskope-client';const client = new PeriskopeApi({ authToken: 'YOUR_API_KEY', phone: '919876543210', // the phone to act with (x-phone)});async function main() { const response = await client.messages.sendMessageSync({ chat_id: '911111111111@c.us', }); console.log(response);}main();
{
"code": "ERROR",
"message": "The phone is off or its server is unreachable — or the send failed within the wait window (code MESSAGE_SEND_FAILED): WhatsApp rejected the message (ack -1), or the phone gave up before it reached WhatsApp, for example because the number is not on WhatsApp. details carry unique_id, org_phone, chat_id, ack -1 and the failure reason when one was reported, plus message_id when a message record exists. Retry from another phone via the x-phone header.",
"status": 400
}
Your Periskope API token, sent as Authorization: Bearer <token>. Generate one from the Periskope dashboard under Settings → API & Webhooks. API access requires an active Pro or Enterprise plan.
Phone to send from: country code + number without symbols or spaces (e.g. 911111111111), or a phone_id (phone-xxxxxxxxxxxx). Required for 1-1 chats. For group chats it can be omitted — a connected phone that is in the group is selected automatically, within the token's phone scopes.
Chat to send the message to. For group chats, the chat_id ending with @g.us; for 1-1 chats, country code + number of the contact, optionally suffixed with @c.us (e.g. 911111111111 or 911111111111@c.us).
The text body of the message, or the caption when media is provided. Supports the basic WhatsApp markdown formatting (bold, italic, strikethrough, monospace).
Media to send — a document, image, video, audio file or voice note. Provide either a public url or base64 filedata. The message text, when given, becomes the caption.
How long to wait for the send confirmation, in seconds (1-60). When the message is not confirmed within this window the response falls back to the asynchronous shape. Defaults to 20.
Required range: 1 <= x <= 60
Example:
20
Response
The sent message when WhatsApp accepted it within sync_timeout, otherwise the queued response
Option 1
Option 2
The sent message when WhatsApp accepted it within sync_timeout, otherwise the asynchronous queued response
A WhatsApp message record. Responses may include additional raw fields of the underlying record (id, author, links, location, vcards, is_forwarded, has_media, message_ticket_id, ...).
Show child attributes
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Periskope Docs","colors":{"primary":"#15803D","light":"#15803D"},"logo":{"light":"https://mintcdn.com/bharatkumarramesh/Sq5VlnE2OgDOCH8s/logo/periskope-logo-full.svg?fit=max\u0026auto=format\u0026n=Sq5VlnE2OgDOCH8s\u0026q=85\u0026s=cace2e822ea7c0cd2a98b9d946baa593","dark":"https://mintcdn.com/bharatkumarramesh/Sq5VlnE2OgDOCH8s/logo/periskope-logo-full.svg?fit=max\u0026auto=format\u0026n=Sq5VlnE2OgDOCH8s\u0026q=85\u0026s=cace2e822ea7c0cd2a98b9d946baa593"},"favicon":"https://mintcdn.com/bharatkumarramesh/4Au0rGi6EzWXLRIt/logo/periskope-logo.svg?fit=max\u0026auto=format\u0026n=4Au0rGi6EzWXLRIt\u0026q=85\u0026s=275c52e578008a630d9a4c6e150100a0","api":{"playground":{"display":"none"}},"appearance":{"strict":true},"navbar":{"links":[{"href":"https://www.postman.com/periskope/workspace/periskope-platform-api","label":"Postman API collection"},{"href":"https://what.sapp.link/periskope","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://console.periskope.app"}},"footer":{"socials":{"twitter":"https://twitter.com/periskope_app","linkedin":"https://www.linkedin.com/company/periskope-app","youtube":"https://www.youtube.com/@PeriskopeApp"}},"integrations":{"gtm":{"tagId":"GTM-N9SPZLGR"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"bharatkumarramesh","hasAudioNarration":false,"actualSubdomain":"bharatkumarramesh","customDomains":["docs.periskope.app"],"gitSource":{"type":"github","owner":"periskope-org","repo":"docs-mintlify","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae453c63ba31227325d7ed4","collectionId":"be170988-7fa0-4ea3-b624-add5b3ee55b6","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae453c63ba31227325d7ed4"},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6ae453c63ba31227325d7ed4","clientVersion":"0.0.4067","searchFilterCounts":[{"language":"default","tag":"APIs \u0026 Webhooks","count":136},{"language":"default","tag":"Documentation","count":68},{"language":"default","tag":"Webhooks","count":21},{"language":"default","tag":"API","count":14},{"language":"default","tag":"Message APIs","count":14},{"language":"default","tag":"Chat APIs","count":13},{"language":"default","tag":"AI Agent","count":11},{"language":"default","tag":"Manage WhatsApp Groups, 1:1 Chats \u0026 Communities","count":11},{"language":"default","tag":"Objects","count":10},{"language":"default","tag":"Group Settings APIs","count":9}]},"assistantConfig":{},"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":"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":"vite-origin","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":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".image-container{max-width:50%;margin:0 auto}"}],"page":{"pagePath":"api-reference/message/send-message-sync","slug":"/api-reference/message/send-message-sync","pageMetadata":{"title":"Send Sync Message","openapi":"api-reference/openapi-generated.json POST /v1/message/send-sync","description":"Sends a message like POST /message/send (including automatic phone selection for group chats when x-phone is omitted), then waits up to sync_timeout seconds (default 20) for WhatsApp to accept or reject the message. When accepted in time the response carries the sent message record (status sent). When the send fails in time — WhatsApp rejected it (ack -1), or the phone gave up before it reached WhatsApp, for example because the number is not on WhatsApp — the request fails with a 400 MESSAGE_SEND_FAILED error carrying the reason, so the caller can retry — typically from another phone via the x-phone header. Otherwise it falls back to the asynchronous queued response.","href":"/api-reference/message/send-message-sync"},"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: \"Sends a message like POST /message/send (including automatic phone selection for group chats when x-phone is omitted), then waits up to sync_timeout seconds (default 20) for WhatsApp to accept or reject the message. When accepted in time the response carries the sent message record (status sent). When the send fails in time — WhatsApp rejected it (ack -1), or the phone gave up before it reached WhatsApp, for example because the number is not on WhatsApp — the request fails with a 400 MESSAGE_SEND_FAILED error carrying the reason, so the caller can retry — typically from another phone via the x-phone header. Otherwise it falls back to the asynchronous queued response.\"\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":"Send Sync Message","openapi":"api-reference/openapi-generated.json POST /v1/message/send-sync","description":"Sends a message like POST /message/send (including automatic phone selection for group chats when x-phone is omitted), then waits up to sync_timeout seconds (default 20) for WhatsApp to accept or reject the message. When accepted in time the response carries the sent message record (status sent). When the send fails in time — WhatsApp rejected it (ack -1), or the phone gave up before it reached WhatsApp, for example because the number is not on WhatsApp — the request fails with a 400 MESSAGE_SEND_FAILED error carrying the reason, so the caller can retry — typically from another phone via the x-phone header. Otherwise it falls back to the asynchronous queued response.","href":"/api-reference/message/send-message-sync"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"sendMessageSync","summary":"Send a message and wait for confirmation","description":"Sends a message like POST /message/send (including automatic phone selection for group chats when x-phone is omitted), then waits up to sync_timeout seconds (default 20) for WhatsApp to accept or reject the message. When accepted in time the response carries the sent message record (status sent). When the send fails in time — WhatsApp rejected it (ack -1), or the phone gave up before it reached WhatsApp, for example because the number is not on WhatsApp — the request fails with a 400 MESSAGE_SEND_FAILED error carrying the reason, so the caller can retry — typically from another phone via the x-phone header. Otherwise it falls back to the asynchronous queued response.","tags":["Messages"],"security":["22c5a5f0-e1f6-4f75-94bb-89a576e1d471"],"parameters":["88ae64c3-4782-49d0-a731-d4f2166fb0c3"],"requestBody":"cc6a32a3-9fb3-4a5a-823b-bef62c4900b4","responses":{"200":"4d3d4e9b-b5fd-4177-8a12-bfa264564f44","400":"7e6a4b9a-a50f-45a0-96b9-428e5d3bc999","401":"4658ef3b-b10b-4b5e-bbdd-6b95e662f887","404":"b2753457-9e92-49ba-b63c-5a61291a3bbd","422":"a608fba9-a542-4f02-b3c8-462c07bf83fe","429":"b33dde48-5ccf-40f1-83c6-43894457b23e","500":"609a4075-3117-4828-ac3c-82f6a8368c62"},"x-codeSamples":[{"lang":"typescript","label":"TypeScript","source":"import { PeriskopeApi } from '@periskope/periskope-client';\n\nconst client = new PeriskopeApi({\n authToken: 'YOUR_API_KEY',\n phone: '919876543210', // the phone to act with (x-phone)\n});\n\nasync function main() {\n const response = await client.messages.sendMessageSync({\n chat_id: '911111111111@c.us',\n });\n console.log(response);\n}\n\nmain();"},{"lang":"bash","label":"cURL","source":"curl -X POST 'https://api.periskope.app/v1/message/send-sync' \\\n -H 'Authorization: Bearer YOUR_API_KEY' \\\n -H 'x-phone: 919876543210' \\\n -H 'Content-Type: application/json' \\\n -d '{\n \"chat_id\": \"911111111111@c.us\"\n }'"}],"method":"post","type":"path","servers":["09897b52-aa53-4c89-80d0-59fbc0f457de"],"path":"/v1/message/send-sync","baseUrlOptions":["https://api.periskope.app"],"title":"Send a message and wait for confirmation","codeSamples":[{"label":"TypeScript","lang":"typescript","source":"import { PeriskopeApi } from '@periskope/periskope-client';\n\nconst client = new PeriskopeApi({\n authToken: 'YOUR_API_KEY',\n phone: '919876543210', // the phone to act with (x-phone)\n});\n\nasync function main() {\n const response = await client.messages.sendMessageSync({\n chat_id: '911111111111@c.us',\n });\n console.log(response);\n}\n\nmain();"},{"label":"cURL","lang":"bash","source":"curl -X POST 'https://api.periskope.app/v1/message/send-sync' \\\n -H 'Authorization: Bearer YOUR_API_KEY' \\\n -H 'x-phone: 919876543210' \\\n -H 'Content-Type: application/json' \\\n -d '{\n \"chat_id\": \"911111111111@c.us\"\n }'"}],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated"},"dependencies":{"parameters":{"88ae64c3-4782-49d0-a731-d4f2166fb0c3":{"schema":{"type":"string","example":"919876543210","description":"Phone to send from: country code + number without symbols or spaces (e.g. 911111111111), or a phone_id (phone-xxxxxxxxxxxx). Required for 1-1 chats. For group chats it can be omitted — a connected phone that is in the group is selected automatically, within the token's phone scopes.","isRequired":false,"uniqueKey":"","typeLabel":"string"},"required":false,"description":"Phone to send from: country code + number without symbols or spaces (e.g. 911111111111), or a phone_id (phone-xxxxxxxxxxxx). Required for 1-1 chats. For group chats it can be omitted — a connected phone that is in the group is selected automatically, within the token's phone scopes.","name":"x-phone","in":"header"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"chat_id":{"type":"string","minLength":1,"description":"Chat to send the message to. For group chats, the chat_id ending with @g.us; for 1-1 chats, country code + number of the contact, optionally suffixed with @c.us (e.g. 911111111111 or 911111111111@c.us).","example":"911111111111@c.us","isRequired":true,"uniqueKey":"chat_id","typeLabel":"string"},"message":{"type":"string","description":"The text body of the message, or the caption when media is provided. Supports the basic WhatsApp markdown formatting (*bold*, _italic_, ~strikethrough~, ```monospace```).","example":"Hello World","uniqueKey":"message","typeLabel":"string"},"media":{"type":"object","properties":{"type":{"type":"string","enum":["image","video","document","audio","ptt"],"description":"Kind of media being sent: 'image', 'video', 'document', 'audio', or 'ptt' (push-to-talk voice note). Determines the message_type of the resulting message.","example":"image","isRequired":true,"uniqueKey":"media.type","typeLabel":"enum\u003cstring>"},"url":{"type":"string","description":"Publicly accessible URL that hosts the content to be sent. Provide either url or filedata, not both.","example":"https://example.com/files/image.png","uniqueKey":"media.url","typeLabel":"string"},"filedata":{"type":"string","description":"Raw bytes of the file, encoded as base64. Alternative to url — provide either url or filedata, not both.","example":"iVBORw0KGgoAAAANSUhEUgAA...","uniqueKey":"media.filedata","typeLabel":"string"},"mimetype":{"type":"string","description":"MIME type of the media file (e.g. image/png, video/mp4, text/csv). Recommended when sending filedata.","example":"image/png","uniqueKey":"media.mimetype","typeLabel":"string"},"filename":{"type":"string","description":"Filename of the media, shown in the chat (mainly relevant for document messages). Defaults to the last path segment of url.","example":"image.png","uniqueKey":"media.filename","typeLabel":"string"}},"required":["type"],"description":"Media to send — a document, image, video, audio file or voice note. Provide either a public url or base64 filedata. The message text, when given, becomes the caption.","uniqueKey":"media","typeLabel":"object"},"poll":{"type":"object","properties":{"pollName":{"type":"string","minLength":1,"description":"The question or title of the poll","example":"Which day suits everyone for the demo?","isRequired":true,"uniqueKey":"poll.pollName","typeLabel":"string"},"pollOptions":{"type":"array","items":{"type":"string","uniqueKey":"poll.pollOptions.items.[INDEX]","typeLabel":"string"},"minItems":2,"maxItems":12,"description":"The answer options of the poll — between 2 and 12 entries","example":["Monday","Wednesday","Friday"],"isRequired":true,"uniqueKey":"poll.pollOptions","typeLabel":"string[]"},"options":{"type":"object","properties":{"allowMultipleAnswers":{"type":"boolean","description":"When true, respondents can select multiple options. Defaults to single choice.","example":true,"uniqueKey":"poll.options.allowMultipleAnswers","typeLabel":"boolean"},"pollId":{"type":"string","description":"Optional unique identifier of the poll — useful to correlate the same poll sent across multiple chats","example":"poll-2026-demo-day","uniqueKey":"poll.options.pollId","typeLabel":"string"}},"description":"Additional options of the poll","uniqueKey":"poll.options","typeLabel":"object"}},"required":["pollName","pollOptions"],"description":"Poll to send instead of a plain message. The resulting message has message_type poll_creation.","uniqueKey":"poll","typeLabel":"object"},"reply_to":{"type":"string","description":"message_id of an existing message in the chat to reply to. The sent message quotes it.","example":"true_911111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","uniqueKey":"reply_to","typeLabel":"string"},"options":{"type":"object","properties":{"hide_url_preview":{"type":"boolean","description":"When true, disables the automatic link preview for URLs contained in the message","example":true,"uniqueKey":"options.hide_url_preview","typeLabel":"boolean"},"mention_all":{"type":"boolean","description":"When true, mentions every participant of the group (WhatsApp @all). Ignored for non-group chats","example":true,"uniqueKey":"options.mention_all","typeLabel":"boolean"}},"description":"Additional sending options","uniqueKey":"options","typeLabel":"object"},"sync_timeout":{"type":"integer","minimum":1,"maximum":60,"description":"How long to wait for the send confirmation, in seconds (1-60). When the message is not confirmed within this window the response falls back to the asynchronous shape. Defaults to 20.","example":20,"uniqueKey":"sync_timeout","typeLabel":"integer"}},"required":["chat_id"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"chat_id":"911111111111@c.us","message":"Hello World","reply_to":"true_911111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","options":{"hide_url_preview":true,"mention_all":true},"sync_timeout":20}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"4d3d4e9b-b5fd-4177-8a12-bfa264564f44":{"description":"The sent message when WhatsApp accepted it within sync_timeout, otherwise the queued response","content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"The sent message when WhatsApp accepted it within sync_timeout, otherwise the asynchronous queued response","properties":{"status":{"type":"string","enum":["sent"],"description":"WhatsApp accepted the message within the wait window (message.ack is 1 or higher)","uniqueKey":"oneOf.0.status","typeLabel":"enum\u003cstring>"},"unique_id":{"type":"string","description":"Provisional id assigned when the message was queued","example":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","uniqueKey":"oneOf.0.unique_id","typeLabel":"string"},"message":{"type":"object","properties":{"message_id":{"type":"string","description":"WhatsApp message id, in the form \u003cfrom_me>_\u003cchat_id>_\u003chash>. Accepted wherever a message_id path parameter is expected.","example":"true_911111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","uniqueKey":"oneOf.0.message.message_id","typeLabel":"string"},"unique_id":{"type":"string","description":"Provisional id assigned when the message was queued via the API — the same value returned by POST /message/send. Also accepted wherever a message_id path parameter is expected. null for messages that did not originate from the API.","example":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","uniqueKey":"oneOf.0.message.unique_id","typeLabel":"string"},"org_id":{"type":"string","description":"Id of the organization the message belongs to","example":"00000000-0000-0000-0000-000000000000","uniqueKey":"oneOf.0.message.org_id","typeLabel":"string"},"org_phone":{"type":"string","description":"Org phone (WhatsApp account) the message was sent or received on, suffixed with @c.us","example":"911111111111@c.us","uniqueKey":"oneOf.0.message.org_phone","typeLabel":"string"},"chat_id":{"type":"string","description":"Chat the message belongs to — \u003ccountrycode>\u003cnumber>@c.us for 1-1 chats, \u003cgroup-id>@g.us for group chats","example":"120363000000000000@g.us","uniqueKey":"oneOf.0.message.chat_id","typeLabel":"string"},"body":{"type":"string","description":"Text content of the message, or the caption for media messages. null when the message has no text.","example":"Hello World","uniqueKey":"oneOf.0.message.body","typeLabel":"string"},"message_type":{"type":"string","description":"Content type of the message: 'chat' for text, or e.g. 'image', 'video', 'document', 'audio', 'ptt', 'poll_creation', 'location', 'vcard'","example":"chat","uniqueKey":"oneOf.0.message.message_type","typeLabel":"string"},"timestamp":{"type":"string","description":"When the message was sent, as an ISO 8601 timestamp","example":"2026-01-15T09:30:00+00:00","uniqueKey":"oneOf.0.message.timestamp","typeLabel":"string"},"from_me":{"type":"boolean","description":"Whether the message was sent by the org phone (true) or received from the contact (false)","example":true,"uniqueKey":"oneOf.0.message.from_me","typeLabel":"boolean"},"ack":{"type":"string","description":"Delivery acknowledgement level as a string: '-1' failed, '0' pending, '1' sent, '2'/'3' delivered, '4' read, '5' played. null when unknown.","example":"3","uniqueKey":"oneOf.0.message.ack","typeLabel":"string"},"performed_by":{"type":"string","description":"Who triggered the message from Periskope: a member's email, or 'api' when sent via the API. null for messages sent from the phone itself.","example":"api","uniqueKey":"oneOf.0.message.performed_by","typeLabel":"string"},"sender_phone":{"type":"string","description":"chat_id of the actual sender — in group chats this is the participant who sent the message","example":"911111111111@c.us","uniqueKey":"oneOf.0.message.sender_phone","typeLabel":"string"},"quoted_message_id":{"type":"string","description":"message_id of the message this one replies to (set via reply_to when sending). null when not a reply.","example":null,"uniqueKey":"oneOf.0.message.quoted_message_id","typeLabel":"string"},"broadcast_id":{"type":"string","description":"Id of the broadcast that produced this message, when it was sent via POST /message/broadcast. null otherwise.","example":null,"uniqueKey":"oneOf.0.message.broadcast_id","typeLabel":"string"},"is_deleted":{"type":"boolean","description":"Whether the message has been deleted for everyone. null when never deleted.","example":null,"uniqueKey":"oneOf.0.message.is_deleted","typeLabel":"boolean"},"media":{"type":"object","properties":{"path":{"type":"string","description":"URL of the media content","example":"https://example.com/files/image.png","uniqueKey":"oneOf.0.message.media.path","typeLabel":"string"},"mimetype":{"type":"string","description":"MIME type of the media file","example":"image/png","uniqueKey":"oneOf.0.message.media.mimetype","typeLabel":"string"},"filename":{"type":"string","description":"Filename of the media — the filename provided when sending, or one derived from the url","example":"image.png","uniqueKey":"oneOf.0.message.media.filename","typeLabel":"string"},"size":{"type":"number","description":"Size of the media file in bytes, when known","example":24576,"uniqueKey":"oneOf.0.message.media.size","typeLabel":"number"},"dimensions":{"type":"object","properties":{"width":{"type":"number","description":"Width in pixels","uniqueKey":"oneOf.0.message.media.dimensions.width","typeLabel":"number"},"height":{"type":"number","description":"Height in pixels","uniqueKey":"oneOf.0.message.media.dimensions.height","typeLabel":"number"},"ar":{"type":"number","description":"Aspect ratio (width / height)","uniqueKey":"oneOf.0.message.media.dimensions.ar","typeLabel":"number"}},"description":"Pixel dimensions of the media, for images and videos","uniqueKey":"oneOf.0.message.media.dimensions","typeLabel":"object"},"thumbnail":{"type":"string","description":"Thumbnail of the media, when generated","uniqueKey":"oneOf.0.message.media.thumbnail","typeLabel":"string"}},"description":"Media attached to the message. null for text-only messages.","uniqueKey":"oneOf.0.message.media","typeLabel":"object"},"mentioned_ids":{"type":"array","items":{"type":"string","uniqueKey":"oneOf.0.message.mentioned_ids.items.[INDEX]","typeLabel":"string"},"description":"chat_ids of the participants mentioned in the message","example":[],"uniqueKey":"oneOf.0.message.mentioned_ids","typeLabel":"string[]"},"prev_body":{"type":"string","description":"Previous text content, kept when the message was edited. null when never edited.","example":null,"uniqueKey":"oneOf.0.message.prev_body","typeLabel":"string"},"sent_message_id":{"type":"string","description":"Internal queue job id (queue_id) that produced this message when it was sent through the message queue. null otherwise.","example":"00000000-0000-0000-0000-000000000000","uniqueKey":"oneOf.0.message.sent_message_id","typeLabel":"string"},"delivery_info":{"type":"object","properties":{"delivered":{"type":"object","additionalProperties":{"type":"number","uniqueKey":"oneOf.0.message.delivery_info.delivered.additionalProperties","typeLabel":"number"},"description":"Map of recipient chat_id to the epoch-millisecond timestamp the message was delivered to them","example":{"911111111111@c.us":1737967705196},"uniqueKey":"oneOf.0.message.delivery_info.delivered","typeLabel":"object"},"read":{"type":"object","additionalProperties":{"type":"number","uniqueKey":"oneOf.0.message.delivery_info.read.additionalProperties","typeLabel":"number"},"description":"Map of recipient chat_id to the epoch-millisecond timestamp they read the message","example":{"911111111111@c.us":1737967704763},"uniqueKey":"oneOf.0.message.delivery_info.read","typeLabel":"object"},"pending":{"type":"array","items":{"type":"string","uniqueKey":"oneOf.0.message.delivery_info.pending.items.[INDEX]","typeLabel":"string"},"description":"chat_ids of recipients the message has not reached yet","example":[],"uniqueKey":"oneOf.0.message.delivery_info.pending","typeLabel":"string[]"},"delivered_count":{"type":"number","description":"Number of recipients the message was delivered to","example":1,"uniqueKey":"oneOf.0.message.delivery_info.delivered_count","typeLabel":"number"},"read_count":{"type":"number","description":"Number of recipients who read the message","example":1,"uniqueKey":"oneOf.0.message.delivery_info.read_count","typeLabel":"number"}},"description":"Per-recipient delivery and read receipts. null when no receipts have been recorded.","uniqueKey":"oneOf.0.message.delivery_info","typeLabel":"object"},"poll_info":{"type":"object","description":"The poll definition ({pollName, pollOptions, options}) for poll_creation messages. null otherwise.","uniqueKey":"oneOf.0.message.poll_info","typeLabel":"object"},"poll_results":{"type":"object","description":"Votes cast on the poll, as a map of option name to voters. null for non-poll messages.","uniqueKey":"oneOf.0.message.poll_results","typeLabel":"object"},"flag_status":{"type":"boolean","description":"Whether the message is currently flagged for follow-up in Periskope. null when never flagged.","example":null,"uniqueKey":"oneOf.0.message.flag_status","typeLabel":"boolean"},"updated_at":{"type":"string","description":"When the message record was last updated, as an ISO 8601 timestamp","example":"2026-01-15T09:35:38.221+00:00","uniqueKey":"oneOf.0.message.updated_at","typeLabel":"string"},"reactions":{"type":"array","items":{"type":"object","properties":{"reaction_id":{"type":"string","description":"Unique id of the reaction (a WhatsApp message_id)","example":"true_911111111111@c.us_AAAAAAAAAAAAAAAAAAAAAA","uniqueKey":"oneOf.0.message.reactions.items.[INDEX].reaction_id","typeLabel":"string"},"message_id":{"type":"string","description":"message_id of the message the reaction belongs to","example":"true_911111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","uniqueKey":"oneOf.0.message.reactions.items.[INDEX].message_id","typeLabel":"string"},"unique_id":{"type":"string","description":"unique_id of the message the reaction belongs to. null when not known.","example":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","uniqueKey":"oneOf.0.message.reactions.items.[INDEX].unique_id","typeLabel":"string"},"chat_id":{"type":"string","description":"Chat the reaction happened in","example":"911111111111@c.us","uniqueKey":"oneOf.0.message.reactions.items.[INDEX].chat_id","typeLabel":"string"},"org_id":{"type":"string","description":"Id of the organization the reaction belongs to","example":"00000000-0000-0000-0000-000000000000","uniqueKey":"oneOf.0.message.reactions.items.[INDEX].org_id","typeLabel":"string"},"org_phone":{"type":"string","description":"Org phone (WhatsApp account) that observed the reaction, suffixed with @c.us","example":"911111111111@c.us","uniqueKey":"oneOf.0.message.reactions.items.[INDEX].org_phone","typeLabel":"string"},"sender_id":{"type":"string","description":"chat_id of the person who reacted","example":"911111111111@c.us","uniqueKey":"oneOf.0.message.reactions.items.[INDEX].sender_id","typeLabel":"string"},"reaction":{"type":"string","description":"The reaction emoji. An empty string or null means the reaction was removed.","example":"😄","uniqueKey":"oneOf.0.message.reactions.items.[INDEX].reaction","typeLabel":"string"},"read":{"type":"boolean","description":"Whether the reaction has been seen. null when unknown.","example":true,"uniqueKey":"oneOf.0.message.reactions.items.[INDEX].read","typeLabel":"boolean"},"timestamp":{"type":"string","description":"When the reaction happened, as an ISO 8601 timestamp","example":"2026-01-15T09:31:57.008+00:00","uniqueKey":"oneOf.0.message.reactions.items.[INDEX].timestamp","typeLabel":"string"}},"description":"A reaction placed on a message","uniqueKey":"oneOf.0.message.reactions.items.[INDEX]","typeLabel":"object"},"description":"Reactions placed on the message. Present on GET /message/{message_id}; an empty array when there are none.","uniqueKey":"oneOf.0.message.reactions","typeLabel":"object[]"}},"description":"A WhatsApp message record. Responses may include additional raw fields of the underlying record (id, author, links, location, vcards, is_forwarded, has_media, message_ticket_id, ...).","uniqueKey":"oneOf.0.message","typeLabel":"object"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"The sent message when WhatsApp accepted it within sync_timeout, otherwise the asynchronous queued response","properties":{"status":{"type":"string","enum":["queued"],"description":"Always queued — messages are not sent synchronously, they are queued on the phone and submitted in the background","uniqueKey":"oneOf.1.status","typeLabel":"enum\u003cstring>"},"unique_id":{"type":"string","description":"Provisional id of the message. Use it with GET /message/{unique_id}/status to track delivery, or with GET /message/{message_id} once processed. The resulting message record carries it as unique_id.","example":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","uniqueKey":"oneOf.1.unique_id","typeLabel":"string"},"queue_id":{"type":"string","description":"Id of the queue job on the phone. The resulting message record carries it as sent_message_id, and the queue endpoints accept it as queue_id.","example":"00000000-0000-0000-0000-000000000000","uniqueKey":"oneOf.1.queue_id","typeLabel":"string"},"queue_position":{"type":"number","description":"Position of the job in the send queue at the moment it was enqueued (0 = next in line)","example":0,"uniqueKey":"oneOf.1.queue_position","typeLabel":"number"},"track_by":{"type":"object","properties":{"unique_id":{"type":"string","description":"Ready-to-use path for tracking the message by unique_id","example":"GET /messages/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/status","uniqueKey":"oneOf.1.track_by.unique_id","typeLabel":"string"}},"description":"Convenience pointers for tracking the message","uniqueKey":"oneOf.1.track_by","typeLabel":"object"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"default":{"title":"default","value":{"status":"sent","unique_id":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","message":{"message_id":"true_911111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","unique_id":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","org_id":"00000000-0000-0000-0000-000000000000","org_phone":"911111111111@c.us","chat_id":"120363000000000000@g.us","body":"Hello World","message_type":"chat","timestamp":"2026-01-15T09:30:00+00:00","from_me":true,"ack":"3","performed_by":"api","sender_phone":"911111111111@c.us","quoted_message_id":null,"broadcast_id":null,"is_deleted":null,"media":{"path":"https://example.com/files/image.png","mimetype":"image/png","filename":"image.png","size":24576,"dimensions":{"width":null,"height":null,"ar":null},"thumbnail":null},"mentioned_ids":[],"prev_body":null,"sent_message_id":"00000000-0000-0000-0000-000000000000","delivery_info":{"delivered":{"911111111111@c.us":1737967705196},"read":{"911111111111@c.us":1737967704763},"pending":[],"delivered_count":1,"read_count":1},"poll_info":{},"poll_results":{},"flag_status":null,"updated_at":"2026-01-15T09:35:38.221+00:00","reactions":[{"reaction_id":"true_911111111111@c.us_AAAAAAAAAAAAAAAAAAAAAA","message_id":"true_911111111111@c.us_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","unique_id":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","chat_id":"911111111111@c.us","org_id":"00000000-0000-0000-0000-000000000000","org_phone":"911111111111@c.us","sender_id":"911111111111@c.us","reaction":"😄","read":true,"timestamp":"2026-01-15T09:31:57.008+00:00"}]}}}},"exampleType":"examples"}},"exampleType":"examples"},"7e6a4b9a-a50f-45a0-96b9-428e5d3bc999":{"description":"The phone is off or its server is unreachable — or the send failed within the wait window (code MESSAGE_SEND_FAILED): WhatsApp rejected the message (ack -1), or the phone gave up before it reached WhatsApp, for example because the number is not on WhatsApp. details carry unique_id, org_phone, chat_id, ack -1 and the failure reason when one was reported, plus message_id when a message record exists. Retry from another phone via the x-phone header.","content":{"application/json":{"examples":{"error":{"title":"error","value":{"code":"ERROR","message":"The phone is off or its server is unreachable — or the send failed within the wait window (code MESSAGE_SEND_FAILED): WhatsApp rejected the message (ack -1), or the phone gave up before it reached WhatsApp, for example because the number is not on WhatsApp. details carry unique_id, org_phone, chat_id, ack -1 and the failure reason when one was reported, plus message_id when a message record exists. Retry from another phone via the x-phone header.","status":400}}},"schema":{"type":"object","properties":{"code":{"type":"string","example":"ERROR","uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","example":"The phone is off or its server is unreachable — or the send failed within the wait window (code MESSAGE_SEND_FAILED): WhatsApp rejected the message (ack -1), or the phone gave up before it reached WhatsApp, for example because the number is not on WhatsApp. details carry unique_id, org_phone, chat_id, ack -1 and the failure reason when one was reported, plus message_id when a message record exists. Retry from another phone via the x-phone header.","uniqueKey":"message","typeLabel":"string"},"status":{"type":"integer","example":400,"uniqueKey":"status","typeLabel":"integer"}},"example":{"code":"ERROR","message":"The phone is off or its server is unreachable — or the send failed within the wait window (code MESSAGE_SEND_FAILED): WhatsApp rejected the message (ack -1), or the phone gave up before it reached WhatsApp, for example because the number is not on WhatsApp. details carry unique_id, org_phone, chat_id, ack -1 and the failure reason when one was reported, plus message_id when a message record exists. Retry from another phone via the x-phone header.","status":400},"uniqueKey":"","typeLabel":"object"},"exampleType":"examples"}},"exampleType":"examples"},"4658ef3b-b10b-4b5e-bbdd-6b95e662f887":{"description":"Invalid, expired or missing API token","content":{"application/json":{"examples":{"error":{"title":"error","value":{"code":"UNAUTHORIZED_ERROR","message":"Invalid bearer auth token","status":401}}},"schema":{"type":"object","properties":{"code":{"type":"string","example":"UNAUTHORIZED_ERROR","uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","example":"Invalid bearer auth token","uniqueKey":"message","typeLabel":"string"},"status":{"type":"integer","example":401,"uniqueKey":"status","typeLabel":"integer"}},"example":{"code":"UNAUTHORIZED_ERROR","message":"Invalid bearer auth token","status":401},"uniqueKey":"","typeLabel":"object"},"exampleType":"examples"}},"exampleType":"examples"},"b2753457-9e92-49ba-b63c-5a61291a3bbd":{"description":"x-phone omitted and the group chat was not found on any phone of the org","content":{"application/json":{"examples":{"error":{"title":"error","value":{"code":"NOT_FOUND_ERROR","message":"x-phone omitted and the group chat was not found on any phone of the org","status":404}}},"schema":{"type":"object","properties":{"code":{"type":"string","example":"NOT_FOUND_ERROR","uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","example":"x-phone omitted and the group chat was not found on any phone of the org","uniqueKey":"message","typeLabel":"string"},"status":{"type":"integer","example":404,"uniqueKey":"status","typeLabel":"integer"}},"example":{"code":"NOT_FOUND_ERROR","message":"x-phone omitted and the group chat was not found on any phone of the org","status":404},"uniqueKey":"","typeLabel":"object"},"exampleType":"examples"}},"exampleType":"examples"},"a608fba9-a542-4f02-b3c8-462c07bf83fe":{"description":"Request validation failed","content":{"application/json":{"examples":{"error":{"title":"error","value":{"code":"VALIDATION_ERROR","message":"Request validation failed","status":422,"fields":{"body.chat_id":{"message":"chat_id is required"}}}}},"schema":{"type":"object","properties":{"code":{"type":"string","example":"VALIDATION_ERROR","uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","example":"Request validation failed","uniqueKey":"message","typeLabel":"string"},"status":{"type":"integer","example":422,"uniqueKey":"status","typeLabel":"integer"},"fields":{"type":"object","additionalProperties":{"type":"object","properties":{"message":{"type":"string","uniqueKey":"fields.additionalProperties.message","typeLabel":"string"},"value":{"oneOf":[{}],"uniqueKey":"fields.additionalProperties.value","typeLabel":"any"}},"uniqueKey":"fields.additionalProperties","typeLabel":"object"},"example":{"body.chat_id":{"message":"chat_id is required"}},"uniqueKey":"fields","typeLabel":"object"}},"example":{"code":"VALIDATION_ERROR","message":"Request validation failed","status":422,"fields":{"body.chat_id":{"message":"chat_id is required"}}},"uniqueKey":"","typeLabel":"object"},"exampleType":"examples"}},"exampleType":"examples"},"b33dde48-5ccf-40f1-83c6-43894457b23e":{"description":"Rate limit exceeded","content":{"application/json":{"examples":{"error":{"title":"error","value":{"code":"RATE_LIMIT_ERROR","message":"You can only make 100 requests per second","status":429}}},"schema":{"type":"object","properties":{"code":{"type":"string","example":"RATE_LIMIT_ERROR","uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","example":"You can only make 100 requests per second","uniqueKey":"message","typeLabel":"string"},"status":{"type":"integer","example":429,"uniqueKey":"status","typeLabel":"integer"}},"example":{"code":"RATE_LIMIT_ERROR","message":"You can only make 100 requests per second","status":429},"uniqueKey":"","typeLabel":"object"},"exampleType":"examples"}},"exampleType":"examples"},"609a4075-3117-4828-ac3c-82f6a8368c62":{"description":"Internal server error","content":{"application/json":{"examples":{"error":{"title":"error","value":{"code":"UNKNOWN_ERROR","message":"Internal server error","status":500}}},"schema":{"type":"object","properties":{"code":{"type":"string","example":"UNKNOWN_ERROR","uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","example":"Internal server error","uniqueKey":"message","typeLabel":"string"},"status":{"type":"integer","example":500,"uniqueKey":"status","typeLabel":"integer"}},"example":{"code":"UNKNOWN_ERROR","message":"Internal server error","status":500},"uniqueKey":"","typeLabel":"object"},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"22c5a5f0-e1f6-4f75-94bb-89a576e1d471":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Your Periskope API token, sent as `Authorization: Bearer \u003ctoken>`. Generate one from the Periskope dashboard under **Settings → API \u0026 Webhooks**. API access requires an active Pro or Enterprise plan.","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"09897b52-aa53-4c89-80d0-59fbc0f457de":{"url":"https://api.periskope.app"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Your Periskope API token, sent as `Authorization: Bearer \u003ctoken>`. Generate one from the Periskope dashboard under **Settings → API \u0026 Webhooks**. API access requires an active Pro or Enterprise plan.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Your Periskope API token, sent as `Authorization: Bearer \u003ctoken>`. Generate one from the Periskope dashboard under **Settings → API \u0026 Webhooks**. API access requires an active Pro or Enterprise plan.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"api-reference/openapi-generated.json"},"subdomain":"bharatkumarramesh","siteName":"Periskope Docs","title":"Send Sync Message - Periskope Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-05T14:08:14.399Z","originalFileLocation":"api-reference/message/send-message-sync.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=\"Sends a message like POST /message/send (including automatic phone selection for group chats when x-phone is omitted), then waits up to sync_timeout seconds (default 20) for WhatsApp to accept or reject the message. When accepted in time the response carries the sent message record (status sent). When the send fails in time — WhatsApp rejected it (ack -1), or the phone gave up before it reached WhatsApp, for example because the number is not on WhatsApp — the request fails with a 400 MESSAGE_SEND_FAILED error carrying the reason, so the caller can retry — typically from another phone via the x-phone header. Otherwise it falls back to the asynchronous queued response.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Periskope Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/bharatkumarramesh/xEFzGZM_csru_Nms/_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/bharatkumarramesh/xEFzGZM_csru_Nms/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/bharatkumarramesh/xEFzGZM_csru_Nms/_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/bharatkumarramesh/xEFzGZM_csru_Nms/_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/bharatkumarramesh/xEFzGZM_csru_Nms/_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/bharatkumarramesh/xEFzGZM_csru_Nms/_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/bharatkumarramesh/xEFzGZM_csru_Nms/_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/bharatkumarramesh/xEFzGZM_csru_Nms/_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/bharatkumarramesh/xEFzGZM_csru_Nms/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Send Sync Message - Periskope Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Sends a message like POST /message/send (including automatic phone selection for group chats when x-phone is omitted), then waits up to sync_timeout seconds (default 20) for WhatsApp to accept or reject the message. When accepted in time the response carries the sent message record (status sent). When the send fails in time — WhatsApp rejected it (ack -1), or the phone gave up before it reached WhatsApp, for example because the number is not on WhatsApp — the request fails with a 400 MESSAGE_SEND_FAILED error carrying the reason, so the caller can retry — typically from another phone via the x-phone header. Otherwise it falls back to the asynchronous queued response.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Periskope Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.periskope.app/api-reference/message/send-message-sync\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://bharatkumarramesh.mintlify.app/_mintlify/api/og/v2?division=Message+APIs\u0026amp;title=Send+Sync+Message\u0026amp;description=Sends+a+message+like+POST+%2Fmessage%2Fsend+%28including+automatic+phone+selection+for+group+chats+when+x-phone+is+omitted%29%2C+then+waits+up+to+sync_timeout+seconds+%28de\u0026amp;theme=42ac27e6aa5a1e2c22bc4538\u0026amp;signature=a8648e44f302838694fbc076c659bc939c20838833011dbde7375d98803f0403\">\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=\"Send Sync Message - Periskope Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Sends a message like POST /message/send (including automatic phone selection for group chats when x-phone is omitted), then waits up to sync_timeout seconds (default 20) for WhatsApp to accept or reject the message. When accepted in time the response carries the sent message record (status sent). When the send fails in time — WhatsApp rejected it (ack -1), or the phone gave up before it reached WhatsApp, for example because the number is not on WhatsApp — the request fails with a 400 MESSAGE_SEND_FAILED error carrying the reason, so the caller can retry — typically from another phone via the x-phone header. Otherwise it falls back to the asynchronous queued response.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://bharatkumarramesh.mintlify.app/_mintlify/api/og/v2?division=Message+APIs\u0026amp;title=Send+Sync+Message\u0026amp;description=Sends+a+message+like+POST+%2Fmessage%2Fsend+%28including+automatic+phone+selection+for+group+chats+when+x-phone+is+omitted%29%2C+then+waits+up+to+sync_timeout+seconds+%28de\u0026amp;theme=42ac27e6aa5a1e2c22bc4538\u0026amp;signature=a8648e44f302838694fbc076c659bc939c20838833011dbde7375d98803f0403\">\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/bharatkumarramesh/xEFzGZM_csru_Nms/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Periskope Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#15803D\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.periskope.app/api-reference/message/send-message-sync\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/message/send-message-sync.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.periskope.app/#organization\",\"name\":\"Periskope Docs\",\"url\":\"https://docs.periskope.app\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/bharatkumarramesh/Sq5VlnE2OgDOCH8s/logo/periskope-logo-full.svg?fit=max\u0026auto=format\u0026n=Sq5VlnE2OgDOCH8s\u0026q=85\u0026s=cace2e822ea7c0cd2a98b9d946baa593\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.periskope.app#website\",\"name\":\"Periskope Docs\",\"url\":\"https://docs.periskope.app\",\"publisher\":{\"@id\":\"https://docs.periskope.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.periskope.app/api-reference/message/send-message-sync#webpage\",\"url\":\"https://docs.periskope.app/api-reference/message/send-message-sync\",\"name\":\"Send Sync Message\",\"description\":\"Sends a message like POST /message/send (including automatic phone selection for group chats when x-phone is omitted), then waits up to sync_timeout seconds (default 20) for WhatsApp to accept or reject the message. When accepted in time the response carries the sent message record (status sent). When the send fails in time — WhatsApp rejected it (ack -1), or the phone gave up before it reached WhatsApp, for example because the number is not on WhatsApp — the request fails with a 400 MESSAGE_SEND_FAILED error carrying the reason, so the caller can retry — typically from another phone via the x-phone header. Otherwise it falls back to the asynchronous queued response.\",\"dateModified\":\"2026-10-05T14:08:14.399Z\",\"isPartOf\":{\"@id\":\"https://docs.periskope.app#website\"},\"breadcrumb\":{\"@id\":\"https://docs.periskope.app/api-reference/message/send-message-sync#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.periskope.app/api-reference/message/send-message-sync#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Message APIs\",\"item\":\"https://docs.periskope.app/api-reference/message/send-message\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Send Sync Message\",\"item\":\"https://docs.periskope.app/api-reference/message/send-message-sync\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.periskope.app/api-reference/message/send-message-sync#apireference\",\"headline\":\"Send Sync Message\",\"name\":\"Send Sync Message\",\"description\":\"Sends a message like POST /message/send (including automatic phone selection for group chats when x-phone is omitted), then waits up to sync_timeout seconds (default 20) for WhatsApp to accept or reject the message. When accepted in time the response carries the sent message record (status sent). When the send fails in time — WhatsApp rejected it (ack -1), or the phone gave up before it reached WhatsApp, for example because the number is not on WhatsApp — the request fails with a 400 MESSAGE_SEND_FAILED error carrying the reason, so the caller can retry — typically from another phone via the x-phone header. Otherwise it falls back to the asynchronous queued response.\",\"url\":\"https://docs.periskope.app/api-reference/message/send-message-sync\",\"mainEntityOfPage\":{\"@id\":\"https://docs.periskope.app/api-reference/message/send-message-sync#webpage\"},\"dateModified\":\"2026-10-05T14:08:14.399Z\",\"publisher\":{\"@id\":\"https://docs.periskope.app/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.periskope.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Periskope Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Periskope Docs","nav":{"global":null,"anchors":[{"anchor":"Documentation","icon":"book-open","pages":[{"title":"Documentation","href":"/get-started/introduction"}]},{"anchor":"APIs \u0026 Webhooks","icon":"webhook","groups":[{"group":"API","pages":[{"title":"Introduction","href":"/api-reference/introduction"},{"title":"Authorization","href":"/api-reference/authorization"},{"title":"SDK","href":"/api-reference/sdk"},{"group":"Objects","pages":[{"title":"The Chat Object","href":"/api-reference/objects/the-chat-object"},{"title":"The Chat Notification Object","href":"/api-reference/objects/the-chat-notification-object"},{"title":"The Call Object","href":"/api-reference/objects/the-call-object"},{"title":"The Reaction Object","href":"/api-reference/objects/the-reaction-object"},{"title":"The Message Object","href":"/api-reference/objects/the-message-object"},{"title":"The Contact Object","href":"/api-reference/objects/the-contact-object"},{"title":"The Ticket Info Object","href":"/api-reference/objects/the-ticket-info-object"},{"title":"The Task Object","href":"/api-reference/objects/the-task-object"},{"title":"The Phone Object","href":"/api-reference/objects/the-phone-object"},{"title":"The Note Object","href":"/api-reference/objects/the-note-object"}]},{"title":"WhatsApp Message Ack Status","href":"/api-reference/delivery-status"}]},{"group":"Chat APIs","icon":"comments","pages":[{"title":"Get Chat By ID","openapi":"api-reference/openapi-generated.json GET /v1/chats/{chat_id}","href":"/api-reference/chat/get-chat-by-id"},{"title":"Get Messages in a Chat","openapi":"api-reference/openapi-generated.json GET /v1/chats/{chat_id}/messages","href":"/api-reference/chat/get-messages-in-chat"},{"title":"Get Private Notes in a Chat","openapi":"api-reference/openapi-generated.json GET /v1/chats/{chat_id}/notes","href":"/api-reference/chat/get-private-notes-in-chat"},{"title":"Get Notifications in a Chat","openapi":"api-reference/openapi-generated.json GET /v1/chats/{chat_id}/notifications","href":"/api-reference/chat/get-notifications-in-chat"},{"title":"List All Chats","openapi":"api-reference/openapi-generated.json GET /v1/chats","href":"/api-reference/chat/list-all-chats"},{"title":"List All Messages","openapi":"api-reference/openapi-generated.json GET /v1/chats/messages","href":"/api-reference/chat/list-all-messages"},{"title":"List All Notifications","openapi":"api-reference/openapi-generated.json GET /v1/chats/notifications","href":"/api-reference/chat/list-all-notifications"},{"title":"Update Chat Labels","openapi":"api-reference/openapi-generated.json PATCH /v1/chats/labels","href":"/api-reference/chat/update-chat-labels"},{"title":"Update Chat","openapi":"api-reference/openapi-generated.json PATCH /v1/chats/{chat_id}","href":"/api-reference/chat/update-chat"},{"title":"Mark chat as read","openapi":"api-reference/openapi-generated.json POST /v1/chats/{chat_id}/read","href":"/api-reference/chat/mark-read"},{"title":"Update Chat Access","openapi":"api-reference/openapi-generated.json PATCH /v1/chats/access","href":"/api-reference/chat/override-chat-access"},{"title":"Get Chat Audit Logs","openapi":"api-reference/openapi-generated.json GET /v1/chats/{chat_id}/audit-logs","href":"/api-reference/chat/get-chat-audit-logs"},{"title":"Update Chat AI Settings","openapi":"api-reference/openapi-generated.json PATCH /v1/chats/{chat_id}/ai","href":"/api-reference/chat/update-chat-ai-settings"}]},{"group":"Group Settings APIs","pages":[{"title":"Create Group","openapi":"api-reference/openapi-generated.json POST /v1/chats/create","href":"/api-reference/chat/create-group"},{"title":"Generate a new invite link for a chat","openapi":"api-reference/openapi-generated.json POST /v1/chats/{chat_id}/invite","href":"/api-reference/chat/refresh-invite"},{"title":"Add Participant to Group","openapi":"api-reference/openapi-generated.json POST /v1/chats/{chat_id}/add","href":"/api-reference/chat/add-participant"},{"title":"Remove Participant from Group","openapi":"api-reference/openapi-generated.json POST /v1/chats/{chat_id}/remove","href":"/api-reference/chat/remove-participant"},{"title":"Promote Participant to Admin","openapi":"api-reference/openapi-generated.json POST /v1/chats/{chat_id}/promote","href":"/api-reference/chat/promote-participant-to-admin"},{"title":"Demote Participant to Member","openapi":"api-reference/openapi-generated.json POST /v1/chats/{chat_id}/demote","href":"/api-reference/chat/demote-participant-to-member"},{"title":"Update Group Settings","openapi":"api-reference/openapi-generated.json POST /v1/chats/{chat_id}/settings","href":"/api-reference/chat/update-group-settings"},{"title":"Accept Group Invite","openapi":"api-reference/openapi-generated.json POST /v1/chats/accept-invite","href":"/api-reference/chat/accept-group-invite"},{"title":"Leave Group","openapi":"api-reference/openapi-generated.json POST /v1/chats/{chat_id}/leave","href":"/api-reference/chat/leave-group"}]},{"group":"Message APIs","icon":"comment","pages":[{"title":"Send Message","openapi":"api-reference/openapi-generated.json POST /v1/message/send","description":"Sends a message (text, media and/or poll) to a chat from the phone in the x-phone header. For group chats the header can be omitted — a connected phone that is in the group is selected automatically, within the token's phone scopes. Sending is asynchronous — track the returned unique_id via GET /message/{unique_id}/status.","href":"/api-reference/message/send-message"},{"title":"Send Sync Message","openapi":"api-reference/openapi-generated.json POST /v1/message/send-sync","href":"/api-reference/message/send-message-sync"},{"title":"Broadcast Message","openapi":"api-reference/openapi-generated.json POST /v1/message/broadcast","description":"Sends the same message (text, media or poll) to many chats — from chat_ids, or every chat carrying the given label. One credit per recipient; rejected up front when credits are insufficient.","href":"/api-reference/message/broadcast-message"},{"title":"Delete a Broadcast","openapi":"api-reference/openapi-generated.json DELETE /v1/message/broadcast/{broadcast_id}","href":"/api-reference/message/delete-broadcast"},{"title":"Delete Message","openapi":"api-reference/openapi-generated.json POST /v1/message/{message_id}/delete","href":"/api-reference/message/delete-message"},{"title":"Edit Message","openapi":"api-reference/openapi-generated.json POST /v1/message/{message_id}/edit","href":"/api-reference/message/edit-message"},{"title":"Forward Message","openapi":"api-reference/openapi-generated.json POST /v1/message/{message_id}/forward","href":"/api-reference/message/forward-message"},{"title":"Get Message","openapi":"api-reference/openapi-generated.json GET /v1/message/{message_id}","href":"/api-reference/message/get-message"},{"title":"React to Message","openapi":"api-reference/openapi-generated.json POST /v1/message/{message_id}/react","href":"/api-reference/message/react-to-message"},{"title":"Pin Message","openapi":"api-reference/openapi-generated.json POST /v1/message/{message_id}/pin","href":"/api-reference/message/pin-message"},{"title":"Get Message Status","openapi":"api-reference/openapi-generated.json GET /v1/message/{unique_id}/status","href":"/api-reference/message/message-status"},{"title":"List All Message Queues","openapi":"api-reference/openapi-generated.json POST /v1/message/queues","href":"/api-reference/message/list-queue-jobs"},{"title":"Get Status of Message Queues","openapi":"api-reference/openapi-generated.json GET /v1/message/queues/health","href":"/api-reference/message/queue-health"},{"title":"Purge Message Queues","openapi":"api-reference/openapi-generated.json POST /v1/message/queues/purge","href":"/api-reference/message/purge-queue-jobs"}]},{"group":"Scheduled Message APIs","pages":[{"title":"List Scheduled Messages","openapi":"api-reference/openapi-generated.json GET /v1/message/scheduled","href":"/api-reference/scheduled-messages/list-scheduled-messages"},{"title":"Schedule a Message","openapi":"api-reference/openapi-generated.json POST /v1/message/scheduled","href":"/api-reference/scheduled-messages/schedule-message"},{"title":"Get Scheduled Message","openapi":"api-reference/openapi-generated.json GET /v1/message/scheduled/{scheduled_id}","href":"/api-reference/scheduled-messages/get-scheduled-message"},{"title":"Update Scheduled Message","openapi":"api-reference/openapi-generated.json PATCH /v1/message/scheduled/{scheduled_id}","href":"/api-reference/scheduled-messages/update-scheduled-message"},{"title":"Delete Scheduled Message","openapi":"api-reference/openapi-generated.json DELETE /v1/message/scheduled/{scheduled_id}","href":"/api-reference/scheduled-messages/delete-scheduled-message"},{"title":"List Scheduled Message Runs","openapi":"api-reference/openapi-generated.json GET /v1/message/scheduled/{scheduled_id}/occurrences","href":"/api-reference/scheduled-messages/list-scheduled-message-occurrences"}]},{"group":"Call APIs","icon":"phone-volume","pages":[{"title":"List Calls","openapi":"api-reference/openapi-generated.json GET /v1/calls","href":"/api-reference/calls/list-calls"},{"title":"Get Call","openapi":"api-reference/openapi-generated.json GET /v1/calls/{call_id}","href":"/api-reference/calls/get-call"}]},{"group":"Media APIs","icon":"photo-film","pages":[{"title":"Migrate Media URL","api":"POST https://api.periskope.app/v1/media/migrate-url","href":"/api-reference/media/migrate-url"},{"title":"Migrate Media URLs (Batch)","api":"POST https://api.periskope.app/v1/media/migrate-url/batch","href":"/api-reference/media/migrate-url-batch"}]},{"group":"Contact APIs","icon":"phone","pages":[{"title":"Get Contact By ID","openapi":"api-reference/openapi-generated.json GET /v1/contacts/{contact_id}","href":"/api-reference/contacts/get-contact-by-id"},{"title":"Get Contacts","openapi":"api-reference/openapi-generated.json GET /v1/contacts","href":"/api-reference/contacts/get-contacts"},{"title":"Update Contact Labels","openapi":"api-reference/openapi-generated.json PATCH /v1/contacts/labels","href":"/api-reference/contacts/update-contact-labels"},{"title":"Update Contact","openapi":"api-reference/openapi-generated.json PATCH /v1/contacts/{contact_id}","href":"/api-reference/contacts/update-contact"},{"title":"Create Contact","openapi":"api-reference/openapi-generated.json POST /v1/contacts/create","href":"/api-reference/contacts/create-contact"},{"title":"Check Contact Exists","openapi":"api-reference/openapi-generated.json POST /v1/contacts/check","href":"/api-reference/contacts/check-contact"}]},{"group":"Ticket APIs","icon":"ticket","pages":[{"title":"Get Ticket By ID","openapi":"api-reference/openapi-generated.json GET /v1/tickets/{ticket_id}","href":"/api-reference/tickets/get-ticket-by-id"},{"title":"Get Tickets","openapi":"api-reference/openapi-generated.json GET /v1/tickets","href":"/api-reference/tickets/get-tickets"},{"title":"Update Ticket","openapi":"api-reference/openapi-generated.json PATCH /v1/tickets/{ticket_id}","href":"/api-reference/tickets/update-ticket"},{"title":"Create Ticket","openapi":"api-reference/openapi-generated.json POST /v1/tickets/create","href":"/api-reference/tickets/create-ticket"},{"title":"Get Ticket Audit Logs","openapi":"api-reference/openapi-generated.json GET /v1/tickets/{ticket_id}/audit-logs","href":"/api-reference/tickets/get-ticket-audit-logs"}]},{"group":"Custom Property APIs","icon":"list-dropdown","pages":[{"title":"Get All Custom Properties","openapi":"api-reference/openapi-generated.json GET /v1/properties","href":"/api-reference/properties/get-all-custom-properties"},{"title":"Get Custom Property","openapi":"api-reference/openapi-generated.json GET /v1/properties/{property_id}","href":"/api-reference/properties/get-custom-property"},{"title":"Create Custom Property","openapi":"api-reference/openapi-generated.json POST /v1/properties/create","href":"/api-reference/properties/create-custom-property"},{"title":"Update Custom Property","openapi":"api-reference/openapi-generated.json POST /v1/properties/{property_id}","href":"/api-reference/properties/update-custom-property"},{"title":"Update Property Options","openapi":"api-reference/openapi-generated.json POST /v1/properties/{property_id}/options","href":"/api-reference/properties/update-property-options"},{"title":"Delete Custom Properties","openapi":"api-reference/openapi-generated.json DELETE /v1/properties","href":"/api-reference/properties/delete-custom-property"}]},{"group":"Task APIs","icon":"list-check","pages":[{"title":"Get Task By ID","openapi":"api-reference/openapi-generated.json GET /v1/tasks/{task_id}","href":"/api-reference/tasks/get-task-by-id"},{"title":"Get All Tasks","openapi":"api-reference/openapi-generated.json GET /v1/tasks","href":"/api-reference/tasks/get-tasks"},{"title":"Create Task","openapi":"api-reference/openapi-generated.json POST /v1/tasks/create","href":"/api-reference/tasks/create-task"},{"title":"Update Task","openapi":"api-reference/openapi-generated.json PATCH /v1/tasks/{task_id}","href":"/api-reference/tasks/update-task"}]},{"group":"Queue APIs","icon":"list","pages":[{"title":"Fetch Queue Jobs","openapi":"api-reference/openapi-generated.json GET /v1/queue/jobs","href":"/api-reference/queues/fetch-queue-jobs"},{"title":"Get Broadcast Status","openapi":"api-reference/openapi-generated.json GET /v1/queue/broadcast","href":"/api-reference/queues/get-broadcast-status"},{"title":"Get Queue Status","openapi":"api-reference/openapi-generated.json GET /v1/queue","href":"/api-reference/queues/get-queue-status"},{"title":"Purge Queue","openapi":"api-reference/openapi-generated.json DELETE /v1/queue/purge","href":"/api-reference/queues/purge-queue"}]},{"group":"Phone APIs","icon":"phone","pages":[{"title":"Get phone","openapi":"api-reference/openapi-generated.json GET /v1/phones","href":"/api-reference/phones/get-phone"},{"title":"Get All Phones","openapi":"api-reference/openapi-generated.json GET /v1/phones/all","href":"/api-reference/phones/get-all-phones"},{"title":"Get QR","openapi":"api-reference/openapi-generated.json GET /v1/phones/qr","href":"/api-reference/phones/get-qr"},{"title":"Reset Phone","openapi":"api-reference/openapi-generated.json POST /v1/phones/reset","href":"/api-reference/phones/reset-phone"},{"title":"Restart Phone","openapi":"api-reference/openapi-generated.json POST /v1/phones/restart","href":"/api-reference/phones/restart-phone"},{"title":"Resync Phone","openapi":"api-reference/openapi-generated.json POST /v1/phones/resync","href":"/api-reference/phones/resync-phone"},{"title":"Update phone","openapi":"api-reference/openapi-generated.json PATCH /v1/phones/update","href":"/api-reference/phones/update-phone"},{"title":"Create Phone","openapi":"api-reference/openapi-generated.json POST /v1/phones/create","href":"/api-reference/phones/create-phone"},{"title":"Delete Phone","openapi":"api-reference/openapi-generated.json DELETE /v1/phones/delete","href":"/api-reference/phones/delete-phone"}]},{"group":"Notes APIs","icon":"comment","pages":[{"title":"Send Private Notes","openapi":"api-reference/openapi-generated.json POST /v1/notes/create","href":"/api-reference/notes/create-private-notes"},{"title":"Get Private Note","openapi":"api-reference/openapi-generated.json GET /v1/notes/{note_id}","href":"/api-reference/notes/get-private-note"},{"title":"List All Private Notes","openapi":"api-reference/openapi-generated.json GET /v1/notes","href":"/api-reference/notes/list-all-private-notes"}]},{"group":"Reaction APIs","icon":"comment","pages":[{"title":"Get Reactions","openapi":"api-reference/openapi-generated.json GET /v1/reactions","href":"/api-reference/reactions/get-reactions"}]},{"group":"Knowledge Base APIs","icon":"brain","pages":[{"title":"Get All Knowledge Base Items","openapi":"api-reference/openapi-generated.json GET /v1/knowledge-base","href":"/api-reference/knowledge-base/get-all-knowledge-base"},{"title":"Get FAQ by ID","openapi":"api-reference/openapi-generated.json GET /v1/knowledge-base/faq/{context_id}","href":"/api-reference/knowledge-base/get-faq-by-id"},{"title":"Create FAQ","openapi":"api-reference/openapi-generated.json POST /v1/knowledge-base/faq/create","href":"/api-reference/knowledge-base/create-faq"},{"title":"Update FAQ","openapi":"api-reference/openapi-generated.json PATCH /v1/knowledge-base/faq/{context_id}","href":"/api-reference/knowledge-base/update-faq"},{"title":"Delete FAQ","openapi":"api-reference/openapi-generated.json DELETE /v1/knowledge-base/faq/{context_id}","href":"/api-reference/knowledge-base/delete-faq"},{"title":"Get Document by ID","openapi":"api-reference/openapi-generated.json GET /v1/knowledge-base/document/{document_id}","href":"/api-reference/knowledge-base/get-document-by-id"},{"title":"Create Document","openapi":"api-reference/openapi-generated.json POST /v1/knowledge-base/document/create","href":"/api-reference/knowledge-base/create-document"},{"title":"Delete Document","openapi":"api-reference/openapi-generated.json DELETE /v1/knowledge-base/document/{document_id}","href":"/api-reference/knowledge-base/delete-document"}]},{"group":"Member APIs","icon":"user-group","pages":[{"title":"Invite Members","openapi":"api-reference/openapi-generated.json POST /v1/members/invite","href":"/api-reference/members/invite-members"},{"title":"Update Member Access","openapi":"api-reference/openapi-generated.json PATCH /v1/members/access","href":"/api-reference/members/update-member-access"},{"title":"Delete Member","openapi":"api-reference/openapi-generated.json DELETE /v1/members/{email_id}","href":"/api-reference/members/delete-member"}]},{"group":"AI APIs","icon":"robot","pages":[{"title":"Trigger AI Reply","openapi":"api-reference/openapi-generated.json POST /v1/ai/reply","href":"/api-reference/ai/trigger-ai-reply"}]},{"group":"Webhook APIs","icon":"webhook","pages":[{"title":"List Webhooks","openapi":"api-reference/openapi-generated.json GET /v1/webhooks","href":"/api-reference/webhooks/list-webhooks"},{"title":"Create Webhook","openapi":"api-reference/openapi-generated.json POST /v1/webhooks","href":"/api-reference/webhooks/create-webhook"},{"title":"Get Webhook by ID","openapi":"api-reference/openapi-generated.json GET /v1/webhooks/{id}","href":"/api-reference/webhooks/get-webhook-by-id"},{"title":"Update Webhook","openapi":"api-reference/openapi-generated.json PATCH /v1/webhooks/{id}","href":"/api-reference/webhooks/update-webhook"},{"title":"Delete Webhook","openapi":"api-reference/openapi-generated.json DELETE /v1/webhooks/{id}","href":"/api-reference/webhooks/delete-webhook"}]},{"group":"Webhooks","pages":[{"title":"Introduction","href":"/api-reference/webhooks/introduction"},{"title":"chat.created","icon":"comments","href":"/api-reference/webhooks/chat.created"},{"title":"chat.notification.created","icon":"comments","href":"/api-reference/webhooks/chat.notification.created"},{"title":"chat.custom-properties.updated","icon":"comments","href":"/api-reference/webhooks/chat.custom-properties.updated"},{"title":"message.created","icon":"comment","href":"/api-reference/webhooks/message.created"},{"title":"message.updated","icon":"comment","href":"/api-reference/webhooks/message.updated"},{"title":"message.deleted","icon":"comment","href":"/api-reference/webhooks/message.deleted"},{"title":"message.ack.updated","icon":"comment","href":"/api-reference/webhooks/message.ack.updated"},{"title":"message.ticket.attached","icon":"comment","href":"/api-reference/webhooks/message.ticket.attached"},{"title":"message.flagged","icon":"comment","href":"/api-reference/webhooks/message.flagged"},{"title":"message.unflagged","icon":"comment","href":"/api-reference/webhooks/message.unflagged"},{"title":"note.created","icon":"comment","href":"/api-reference/webhooks/note.created"},{"title":"reaction.created","icon":"face-smile","href":"/api-reference/webhooks/reaction.created"},{"title":"reaction.updated","icon":"face-smile","href":"/api-reference/webhooks/reaction.updated"},{"title":"ticket.created","icon":"tag","href":"/api-reference/webhooks/ticket.created"},{"title":"ticket.updated","icon":"tag","href":"/api-reference/webhooks/ticket.updated"},{"title":"ticket.deleted","icon":"tag","href":"/api-reference/webhooks/ticket.deleted"},{"title":"org.phone.updated","icon":"phone","href":"/api-reference/webhooks/org.phone.updated"},{"title":"org.phone.connected","icon":"phone","href":"/api-reference/webhooks/org.phone.connected"},{"title":"org.phone.disconnected","icon":"phone","href":"/api-reference/webhooks/org.phone.disconnected"},{"title":"org.phone.qr","icon":"phone","href":"/api-reference/webhooks/org.phone.qr"}]}]},{"anchor":"Free Tools","icon":"toolbox","href":"https://tools.periskope.app"}]},"basePath":"","title":"Send Sync Message - Periskope Docs","buildId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","deploymentId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DX1Meug0.js","utils-B_OMIQVC.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-ChxhRPMa.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CuKvD8Iv.js","snippetPresets-C5d7p2hp.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CfHcE8m4.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C1zZV314.js","shallow-CmQhqCJn.js","getApiPlaygroundDisplay-YRo9s1O7.js","CodeSnippet-RN1MTdfk.js","CodeSnippets-DKLPHxJA.js","Page-BAvA99GL.js","getPastedJson-bz0M41mU.js","icon-CsmhpPrv.js","MethodPill-CNGsVE77.js","DuplicateIcon-DilfU_Z2.js","createIcon-BdsYzQck.js","DynamicMarkdown-CbqEDjbV.js","SectionHeading-O6hXpFCN.js","axios-vUo_bRtp.js","Markdown-nKm-uidQ.js","clsx-ClVdStUn.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CIQkMg3R.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-ImrFS4Fy.js"]}