{"openapi":"3.1.0","info":{"title":"Zenvia (BYOK) API","version":"0.1.0","description":"Zenvia (BYOK) lets an AI assistant read your own Zenvia data through the Zenvia API with a key you supply (Zenvia API token). Read-only: 9 tools (list_templates, get_template, list_webhook_subscriptions, list_tickets, list_ticket_status_changes, list_contact_lists, list_contact_batches, list_contact_custom_fields, get_platform_status). The BYOK key travels with each request, is used for that one...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-zenvia.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-zenvia/docs"},"termsOfService":"https://connectorbay.com/byok-zenvia/terms"},"servers":[{"url":"https://byok-zenvia.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-zenvia/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_templates":{"post":{"operationId":"list_templates","summary":"List message templates (WhatsApp, SMS, RCS, e-mail, Facebook) with channel, category, approval status and quality score.","description":"List message templates (WhatsApp, SMS, RCS, e-mail, Facebook) with channel, category, approval status and quality score. Use for \"Which of my Zenvia WhatsApp templates are approved\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"channel":{"anyOf":[{"enum":["WHATSAPP","SMS","RCS","EMAIL","FACEBOOK"],"type":"string"},{"type":"null"}],"default":null,"description":"Only templates of this channel.","title":"Channel"},"status":{"anyOf":[{"enum":["WAITING_REVIEW","REJECTED","WAITING_APPROVAL","APPROVED","PAUSED","DISABLED"],"type":"string"},{"type":"null"}],"default":null,"description":"Only templates with this status.","title":"Status"},"sender_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only templates of this sender id.","title":"Sender Id"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"size":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Items per page (1 to 500).","title":"Size"}},"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/get_template":{"post":{"operationId":"get_template","summary":"Get one message template by id with its body text, header, status and review comments. Use for \"Show the text and review","description":"Get one message template by id with its body text, header, status and review comments. Use for \"Show the text and review status of Zenvia template 7a3f0c12-aaaa-4bbb-8ccc-0123456789ab\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"template_id":{"description":"Id of the template (from list_templates).","maxLength":200,"title":"Template Id","type":"string"}},"required":["template_id"],"title":"get_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_webhook_subscriptions":{"post":{"operationId":"list_webhook_subscriptions","summary":"List webhook subscriptions (event type, status, version, target URL) that receive Zenvia events; request headers and cre","description":"List webhook subscriptions (event type, status, version, target URL) that receive Zenvia events; request headers and credentials are left out. Use for \"Which webhooks are active on my Zenvia account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_webhook_subscriptionsArguments","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_tickets":{"post":{"operationId":"list_tickets","summary":"List support tickets with subject, status, urgency, category, owner team and response and solution times. Use for \"Which","description":"List support tickets with subject, status, urgency, category, owner team and response and solution times. Use for \"Which Zenvia support tickets are still open\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Items per page (1 to 100).","title":"Size"},"status_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Only tickets with this numeric status id.","title":"Status Id"},"created_at":{"anyOf":[{"maxLength":32,"type":"string"},{"type":"null"}],"default":null,"description":"Only tickets created on this date (YYYY-MM-DD).","title":"Created At"},"updated_at":{"anyOf":[{"maxLength":32,"type":"string"},{"type":"null"}],"default":null,"description":"Only tickets updated on this date (YYYY-MM-DD).","title":"Updated At"}},"title":"list_ticketsArguments","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_ticket_status_changes":{"post":{"operationId":"list_ticket_status_changes","summary":"List the status changes of one support ticket in order, to see how it progressed. Use for \"How did Zenvia ticket T-1001 ","description":"List the status changes of one support ticket in order, to see how it progressed. Use for \"How did Zenvia ticket T-1001 move through statuses\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"ticket_id":{"description":"Id of the ticket (from list_tickets).","maxLength":200,"title":"Ticket Id","type":"string"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Items per page (1 to 100).","title":"Size"}},"required":["ticket_id"],"title":"list_ticket_status_changesArguments","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_contact_lists":{"post":{"operationId":"list_contact_lists","summary":"List contact lists (static audiences) with name, size and dates; contacts themselves are not returned. Use for \"How many","description":"List contact lists (static audiences) with name, size and dates; contacts themselves are not returned. Use for \"How many contacts are in each of my Zenvia lists\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, starting at 0.","title":"Page"},"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Items per page (1 to 100).","title":"Size"}},"title":"list_contact_listsArguments","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_contact_batches":{"post":{"operationId":"list_contact_batches","summary":"List contact import batches with file name, status, line count and processed or failed record counts. Use for \"Did my la","description":"List contact import batches with file name, status, line count and processed or failed record counts. Use for \"Did my last Zenvia contact import succeed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Items per page (1 to 100).","title":"Size"}},"title":"list_contact_batchesArguments","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_contact_custom_fields":{"post":{"operationId":"list_contact_custom_fields","summary":"List the custom contact data fields defined on the account with their type. Use for \"What custom contact fields exist in","description":"List the custom contact data fields defined on the account with their type. Use for \"What custom contact fields exist in Zenvia\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, starting at 0.","title":"Page"},"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Items per page (1 to 100).","title":"Size"}},"title":"list_contact_custom_fieldsArguments","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_platform_status":{"post":{"operationId":"get_platform_status","summary":"Show the live status of Zenvia platform groups and components (UP, WARNING, DOWN). Use for \"Is the Zenvia platform up ri","description":"Show the live status of Zenvia platform groups and components (UP, WARNING, DOWN). Use for \"Is the Zenvia platform up right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_platform_statusArguments","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}}}}