{"openapi":"3.1.0","info":{"title":"Campaign Monitor (BYOK) API","version":"0.1.0","description":"Campaign Monitor (BYOK) lets an AI assistant read your own Campaign Monitor data through the Campaign Monitor API with a key you supply (API key). Read-only: 11 tools (list_clients, list_sent_campaigns, list_scheduled_campaigns, list_draft_campaigns, list_client_lists, list_client_segments, list_templates, get_list_stats, get_list_details, get_campaign_summary, get_campaign_email_client_usage)....\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-campaignmonitor.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-campaignmonitor/docs"},"termsOfService":"https://connectorbay.com/byok-campaignmonitor/terms"},"servers":[{"url":"https://byok-campaignmonitor.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-campaignmonitor/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_clients":{"post":{"operationId":"list_clients","summary":"List the clients (sub-accounts) of the Campaign Monitor account with their ids and names. Use for \"Which clients are in ","description":"List the clients (sub-accounts) of the Campaign Monitor account with their ids and names. Use for \"Which clients are in my Campaign Monitor account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_clientsArguments","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_sent_campaigns":{"post":{"operationId":"list_sent_campaigns","summary":"List a client's sent campaigns with subject, sender, send date, recipient count and tags, newest first by default. Use f","description":"List a client's sent campaigns with subject, sender, send date, recipient count and tags, newest first by default. Use for \"What campaigns did this Campaign Monitor client send recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"client_id":{"description":"Client id (the ClientID from list_clients).","maxLength":64,"title":"Client Id","type":"string"},"sent_from_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only campaigns sent on or after this date, YYYY-MM-DD.","title":"Sent From Date"},"sent_to_date":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only campaigns sent on or before this date, YYYY-MM-DD.","title":"Sent To Date"},"tags":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated campaign tags to filter by.","title":"Tags"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"pagesize":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Campaigns per page (1 to 1000).","title":"Pagesize"},"order_direction":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"asc or desc by send date.","title":"Order Direction"}},"required":["client_id"],"title":"list_sent_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/list_scheduled_campaigns":{"post":{"operationId":"list_scheduled_campaigns","summary":"List a client's scheduled campaigns with send time and time zone. Use for \"What campaigns are scheduled to go out for th","description":"List a client's scheduled campaigns with send time and time zone. Use for \"What campaigns are scheduled to go out for this Campaign Monitor client\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"client_id":{"description":"Client id (the ClientID from list_clients).","maxLength":64,"title":"Client Id","type":"string"}},"required":["client_id"],"title":"list_scheduled_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/list_draft_campaigns":{"post":{"operationId":"list_draft_campaigns","summary":"List a client's draft campaigns. Use for \"Which draft campaigns does this Campaign Monitor client have\".","description":"List a client's draft campaigns. Use for \"Which draft campaigns does this Campaign Monitor client have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"client_id":{"description":"Client id (the ClientID from list_clients).","maxLength":64,"title":"Client Id","type":"string"}},"required":["client_id"],"title":"list_draft_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/list_client_lists":{"post":{"operationId":"list_client_lists","summary":"List a client's subscriber lists with ids and names. Use for \"What subscriber lists does this Campaign Monitor client ha","description":"List a client's subscriber lists with ids and names. Use for \"What subscriber lists does this Campaign Monitor client have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"client_id":{"description":"Client id (the ClientID from list_clients).","maxLength":64,"title":"Client Id","type":"string"}},"required":["client_id"],"title":"list_client_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_client_segments":{"post":{"operationId":"list_client_segments","summary":"List a client's segments with the list each belongs to. Use for \"What segments exist for this Campaign Monitor client\".","description":"List a client's segments with the list each belongs to. Use for \"What segments exist for this Campaign Monitor client\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"client_id":{"description":"Client id (the ClientID from list_clients).","maxLength":64,"title":"Client Id","type":"string"}},"required":["client_id"],"title":"list_client_segmentsArguments","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 a client's email templates with preview and screenshot links. Use for \"Which email templates does this Campaign Mon","description":"List a client's email templates with preview and screenshot links. Use for \"Which email templates does this Campaign Monitor client have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"client_id":{"description":"Client id (the ClientID from list_clients).","maxLength":64,"title":"Client Id","type":"string"}},"required":["client_id"],"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_list_stats":{"post":{"operationId":"get_list_stats","summary":"Get a list's subscriber counts: total active, new today, this week and this month, unsubscribes, deletions and bounces. ","description":"Get a list's subscriber counts: total active, new today, this week and this month, unsubscribes, deletions and bounces. Use for \"How many active subscribers does this Campaign Monitor list have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"list_id":{"description":"Subscriber list id (the ListID from list_client_lists).","maxLength":64,"title":"List Id","type":"string"}},"required":["list_id"],"title":"get_list_statsArguments","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_list_details":{"post":{"operationId":"get_list_details","summary":"Get a list's title, opt-in setting and unsubscribe setting. Use for \"What are the settings of this Campaign Monitor list","description":"Get a list's title, opt-in setting and unsubscribe setting. Use for \"What are the settings of this Campaign Monitor list\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"list_id":{"description":"Subscriber list id (the ListID from list_client_lists).","maxLength":64,"title":"List Id","type":"string"}},"required":["list_id"],"title":"get_list_detailsArguments","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_summary":{"post":{"operationId":"get_campaign_summary","summary":"Get a sent campaign's totals: recipients, opens, unique opens, clicks, unsubscribes, bounces, spam complaints, forwards.","description":"Get a sent campaign's totals: recipients, opens, unique opens, clicks, unsubscribes, bounces, spam complaints, forwards. Use for \"How did this Campaign Monitor campaign perform\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"campaign_id":{"description":"Campaign id (the CampaignID from list_sent_campaigns).","maxLength":64,"title":"Campaign Id","type":"string"}},"required":["campaign_id"],"title":"get_campaign_summaryArguments","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_email_client_usage":{"post":{"operationId":"get_campaign_email_client_usage","summary":"Get which email clients (and versions) recipients opened a campaign with, with share and subscriber counts. Use for \"Whi","description":"Get which email clients (and versions) recipients opened a campaign with, with share and subscriber counts. Use for \"Which email apps did people use to open this Campaign Monitor campaign\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"campaign_id":{"description":"Campaign id (the CampaignID from list_sent_campaigns).","maxLength":64,"title":"Campaign Id","type":"string"}},"required":["campaign_id"],"title":"get_campaign_email_client_usageArguments","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}}}}