{"openapi":"3.1.0","info":{"title":"Wati (BYOK) API","version":"0.1.0","description":"Wati (BYOK) lets an AI assistant read your own Wati data through the Wati API with a key you supply (Wati API access token (scopes such as contactsv3:read and messagetemplate:read)). Read-only: 11 tools (list_channels, list_contacts, get_contact, count_contacts, list_message_templates, get_message_template, list_campaigns, get_campaign, list_campaign_recipients, get_campaigns_overview,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-wati.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-wati/docs"},"termsOfService":"https://connectorbay.com/byok-wati/terms"},"servers":[{"url":"https://byok-wati.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-wati/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_channels":{"post":{"operationId":"list_channels","summary":"List the messaging channels (WhatsApp, Instagram, Messenger) connected to the workspace. Use for \"Which channels are con","description":"List the messaging channels (WhatsApp, Instagram, Messenger) connected to the workspace. Use for \"Which channels are connected to my Wati account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_number":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page Number"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Items per page (1 to 100, default 20).","title":"Page Size"}},"title":"list_channelsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_contacts":{"post":{"operationId":"list_contacts","summary":"List contacts with phone, status, opt-in flags, teams, segments and custom attributes, 100 per page at most. Use for \"Wh","description":"List contacts with phone, status, opt-in flags, teams, segments and custom attributes, 100 per page at most. Use for \"Who are my Wati contacts that opted in\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_number":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page Number"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Items per page (1 to 100, default 20).","title":"Page Size"}},"title":"list_contactsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_contact":{"post":{"operationId":"get_contact","summary":"Get one contact by contact id, phone number (such as 14155552671) or channel:phone (such as MyChannel:14155552671). Use ","description":"Get one contact by contact id, phone number (such as 14155552671) or channel:phone (such as MyChannel:14155552671). Use for \"Show the Wati contact with phone number 14155552671\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"target":{"description":"Contact id, phone number, or Channel:PhoneNumber.","maxLength":200,"title":"Target","type":"string"}},"required":["target"],"title":"get_contactArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/count_contacts":{"post":{"operationId":"count_contacts","summary":"Count contacts, optionally only those created between two dates. Use for \"How many contacts does my Wati account have\".","description":"Count contacts, optionally only those created between two dates. Use for \"How many contacts does my Wati account have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only contacts created on or after this date (ISO 8601).","title":"Date From"},"date_to":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only contacts created on or before this date (ISO 8601).","title":"Date To"}},"title":"count_contactsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_message_templates":{"post":{"operationId":"list_message_templates","summary":"List WhatsApp message templates with category, approval status, quality rating, language and body text. Use for \"Which W","description":"List WhatsApp message templates with category, approval status, quality rating, language and body text. Use for \"Which Wati message templates are approved\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"channel":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Name or phone number of the channel; the default channel when omitted.","title":"Channel"},"page_number":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page Number"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Items per page (1 to 100, default 20).","title":"Page Size"}},"title":"list_message_templatesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_message_template":{"post":{"operationId":"get_message_template","summary":"Get one message template by id with its header, body, footer, buttons and approval status. Use for \"Show Wati message te","description":"Get one message template by id with its header, body, footer, buttons and approval status. Use for \"Show Wati message template 6532a1b2c3d4e5f6a7b8c9d0\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"template_id":{"description":"Template id from list_message_templates.","maxLength":200,"title":"Template Id","type":"string"}},"required":["template_id"],"title":"get_message_templateArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_campaigns":{"post":{"operationId":"list_campaigns","summary":"List broadcast campaigns with name, status, template and schedule. Use for \"Which Wati broadcasts were scheduled recentl","description":"List broadcast campaigns with name, status, template and schedule. Use for \"Which Wati broadcasts were scheduled recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"channel":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Name or phone number of the channel; the default channel when omitted.","title":"Channel"},"page_number":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page Number"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Items per page (1 to 100, default 20).","title":"Page Size"}},"title":"list_campaignsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_campaign":{"post":{"operationId":"get_campaign","summary":"Get one broadcast campaign with delivery statistics: recipients, sent, delivered, read, replied and failed counts. Use f","description":"Get one broadcast campaign with delivery statistics: recipients, sent, delivered, read, replied and failed counts. Use for \"How did Wati campaign 6532a1b2c3d4e5f6a7b8c9d1 perform\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"broadcast_id":{"description":"Campaign (broadcast) id from list_campaigns.","maxLength":200,"title":"Broadcast Id","type":"string"}},"required":["broadcast_id"],"title":"get_campaignArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_campaign_recipients":{"post":{"operationId":"list_campaign_recipients","summary":"List the recipients of a campaign with their delivery status and failure code. Use for \"Who failed to receive Wati campa","description":"List the recipients of a campaign with their delivery status and failure code. Use for \"Who failed to receive Wati campaign 6532a1b2c3d4e5f6a7b8c9d1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"broadcast_id":{"description":"Campaign (broadcast) id.","maxLength":200,"title":"Broadcast Id","type":"string"},"page_number":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page Number"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Items per page (1 to 100, default 20).","title":"Page Size"}},"required":["broadcast_id"],"title":"list_campaign_recipientsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_campaigns_overview":{"post":{"operationId":"get_campaigns_overview","summary":"Totals across campaigns in a date range: queued, sent, delivered, opened, replied and failed messages. Use for \"How many","description":"Totals across campaigns in a date range: queued, sent, delivered, opened, replied and failed messages. Use for \"How many Wati broadcast messages were delivered in January 2026\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"description":"Start date (ISO 8601).","maxLength":200,"title":"Date From","type":"string"},"date_to":{"description":"End date (ISO 8601).","maxLength":200,"title":"Date To","type":"string"},"channel":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Name or phone number of the channel; the default channel when omitted.","title":"Channel"},"search_string":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only campaigns whose name matches this text.","title":"Search String"}},"required":["date_from","date_to"],"title":"get_campaigns_overviewArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_call_logs":{"post":{"operationId":"list_call_logs","summary":"List WhatsApp call logs with direction, status, duration, operator and time; filter by direction, duration and dates. Us","description":"List WhatsApp call logs with direction, status, duration, operator and time; filter by direction, duration and dates. Use for \"Which inbound calls did my Wati account get last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"direction":{"anyOf":[{"enum":["inbound","outbound"],"type":"string"},{"type":"null"}],"default":null,"description":"inbound or outbound.","title":"Direction"},"operator_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only calls handled by this operator (email or identifier).","title":"Operator Id"},"min_duration":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Minimum call length in seconds.","title":"Min Duration"},"max_duration":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Maximum call length in seconds.","title":"Max Duration"},"start_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Calls after this time (ISO 8601).","title":"Start Date"},"end_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Calls before this time (ISO 8601).","title":"End Date"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Records to return (1 to 100, default 20).","title":"Limit"},"offset":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Records to skip (default 0).","title":"Offset"}},"title":"list_call_logsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}