{"openapi":"3.1.0","info":{"title":"DoubleTick (BYOK) API","version":"0.1.0","description":"DoubleTick (BYOK) lets an AI assistant read your own DoubleTick data through the DoubleTick API with a key you supply (DoubleTick public API key). Read-only: 6 tools (list_channels, get_wallet_balance, list_templates, list_broadcast_groups, list_roles, list_webhooks). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever sent...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-doubletick.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-doubletick/docs"},"termsOfService":"https://connectorbay.com/byok-doubletick/terms"},"servers":[{"url":"https://byok-doubletick.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-doubletick/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 connected WhatsApp channels with WhatsApp number, display name, status and public business profile (about, desc","description":"List the connected WhatsApp channels with WhatsApp number, display name, status and public business profile (about, description, address, email, websites, category). Use for \"Which WhatsApp numbers are connected to my DoubleTick account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"waba_number":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only the channel with this WhatsApp number.","title":"Waba Number"}},"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/get_wallet_balance":{"post":{"operationId":"get_wallet_balance","summary":"Show the DoubleTick wallet balance and currency. Use for \"How much balance is left in my DoubleTick wallet\".","description":"Show the DoubleTick wallet balance and currency. Use for \"How much balance is left in my DoubleTick wallet\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_wallet_balanceArguments","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_templates":{"post":{"operationId":"list_templates","summary":"List WhatsApp message templates with name, language, category, approval status, components, buttons and WhatsApp number.","description":"List WhatsApp message templates with name, language, category, approval status, components, buttons and WhatsApp number. Use for \"Which WhatsApp templates are approved on DoubleTick\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"enum":["APPROVED","REJECTED","PENDING","PAUSED","ALL"],"type":"string"},{"type":"null"}],"default":null,"description":"Template status.","title":"Status"},"name":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Template name.","title":"Name"},"language":{"anyOf":[{"maxLength":12,"type":"string"},{"type":"null"}],"default":null,"description":"Language code, default en.","title":"Language"},"category":{"anyOf":[{"enum":["MARKETING","UTILITY"],"type":"string"},{"type":"null"}],"default":null,"description":"Template category.","title":"Category"},"waba_phone_numbers":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"WhatsApp number in international format.","title":"Waba Phone Numbers"},"all_waba_phone_numbers":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"true returns templates of all WhatsApp numbers.","title":"All Waba Phone Numbers"}},"title":"list_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/list_broadcast_groups":{"post":{"operationId":"list_broadcast_groups","summary":"List the broadcast groups with name, member count, type, creation time and last message time, paged by cursor. Members a","description":"List the broadcast groups with name, member count, type, creation time and last message time, paged by cursor. Members are not returned. Use for \"How many people are in each of my DoubleTick broadcast groups\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Only groups whose name matches this text.","title":"Search"},"order_by":{"anyOf":[{"enum":["NAME","DATE_CREATED"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by NAME or DATE_CREATED.","title":"Order By"},"direction":{"anyOf":[{"enum":["ASCENDING","DESCENDING"],"type":"string"},{"type":"null"}],"default":null,"description":"ASCENDING or DESCENDING.","title":"Direction"},"after_group_id":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Continue after this group id (from the previous page).","title":"After Group Id"},"after_group_name":{"anyOf":[{"maxLength":120,"type":"string"},{"type":"null"}],"default":null,"description":"Continue after this group name.","title":"After Group Name"}},"title":"list_broadcast_groupsArguments","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_roles":{"post":{"operationId":"list_roles","summary":"List the team roles with title, description, whether custom, type and the permissions each grants. Use for \"Which roles ","description":"List the team roles with title, description, whether custom, type and the permissions each grants. Use for \"Which roles and permissions exist on my DoubleTick account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_rolesArguments","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_webhooks":{"post":{"operationId":"list_webhooks","summary":"List the registered webhooks with name, subscribed event types, WhatsApp numbers and integration count. Webhook URLs are","description":"List the registered webhooks with name, subscribed event types, WhatsApp numbers and integration count. Webhook URLs are not returned. Use for \"Which DoubleTick events are my webhooks subscribed to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sort_by":{"anyOf":[{"enum":["name","url","createdBy","integrationCount"],"type":"string"},{"type":"null"}],"default":"name","description":"Sort by name, url, createdBy or integrationCount.","title":"Sort By"},"sort_direction":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":"ASC","description":"ASC or DESC.","title":"Sort Direction"}},"title":"list_webhooksArguments","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}}}}