{"openapi":"3.1.0","info":{"title":"Dotdigital (BYOK) API","version":"0.1.0","description":"Dotdigital (BYOK) lets an AI assistant read your own Dotdigital data through the Dotdigital API with a key you supply (API user email (apiuser-...@apiconnector.com)). Read-only: 10 tools (list_campaigns, list_campaigns_with_activity_since, get_campaign_summary, get_campaign_metrics, list_address_books, get_address_book, list_segments, list_data_fields, list_templates, list_programs). The BYOK key...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-dotdigital.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-dotdigital/docs"},"termsOfService":"https://connectorbay.com/byok-dotdigital/terms"},"servers":[{"url":"https://byok-dotdigital.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-dotdigital/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_campaigns":{"post":{"operationId":"list_campaigns","summary":"List email campaigns with id, name, subject, from name and address, split-test flag and status. Message bodies are not r","description":"List email campaigns with id, name, subject, from name and address, split-test flag and status. Message bodies are not returned. Use for \"What email campaigns do I have in Dotdigital\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"description":"Your Dotdigital region id: r1 (Europe), r2 (North America) or r3 (Asia Pacific). Using another region's host returns 403; the API users page in your account shows the right endpoint.","enum":["r1","r2","r3"],"title":"Region","type":"string"},"select":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 1000).","title":"Select"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Skip"}},"required":["region"],"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/list_campaigns_with_activity_since":{"post":{"operationId":"list_campaigns_with_activity_since","summary":"List sent campaigns that had opens, clicks or other activity after a date. Use for \"Which Dotdigital campaigns had activ","description":"List sent campaigns that had opens, clicks or other activity after a date. Use for \"Which Dotdigital campaigns had activity since 1 October 2026\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"description":"Your Dotdigital region id: r1 (Europe), r2 (North America) or r3 (Asia Pacific). Using another region's host returns 403; the API users page in your account shows the right endpoint.","enum":["r1","r2","r3"],"title":"Region","type":"string"},"date":{"description":"Date in ISO 8601 form, for example 2026-10-01.","maxLength":200,"title":"Date","type":"string"},"select":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 1000).","title":"Select"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Skip"}},"required":["region","date"],"title":"list_campaigns_with_activity_sinceArguments","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 the reporting summary of one campaign: sent, delivered, opens, clicks, bounces, unsubscribes, complaints and the mai","description":"Get the reporting summary of one campaign: sent, delivered, opens, clicks, bounces, unsubscribes, complaints and the main percentages. Use for \"How did Dotdigital campaign 12345 perform\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"description":"Your Dotdigital region id: r1 (Europe), r2 (North America) or r3 (Asia Pacific). Using another region's host returns 403; the API users page in your account shows the right endpoint.","enum":["r1","r2","r3"],"title":"Region","type":"string"},"campaign_id":{"description":"Numeric campaign id (the id field of list_campaigns).","minimum":1,"title":"Campaign Id","type":"integer"}},"required":["region","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_metrics":{"post":{"operationId":"get_campaign_metrics","summary":"Get key metrics (sent, delivered, opens, clicks, bounces, orders and rates) of every campaign with activity between two ","description":"Get key metrics (sent, delivered, opens, clicks, bounces, orders and rates) of every campaign with activity between two UTC times. Use for \"Show Dotdigital campaign metrics for September 2026\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"description":"Your Dotdigital region id: r1 (Europe), r2 (North America) or r3 (Asia Pacific). Using another region's host returns 403; the API users page in your account shows the right endpoint.","enum":["r1","r2","r3"],"title":"Region","type":"string"},"start_date":{"description":"Start of the period in UTC ISO 8601, for example 2026-09-01T00:00:00Z.","maxLength":200,"title":"Start Date","type":"string"},"end_date":{"description":"End of the period in UTC ISO 8601, for example 2026-09-30T23:59:59Z.","maxLength":200,"title":"End Date","type":"string"},"select":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 1000).","title":"Select"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Skip"}},"required":["region","start_date","end_date"],"title":"get_campaign_metricsArguments","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_address_books":{"post":{"operationId":"list_address_books","summary":"List address books (lists) with id, name, visibility and contact count. Use for \"How many contacts are in each Dotdigita","description":"List address books (lists) with id, name, visibility and contact count. Use for \"How many contacts are in each Dotdigital address book\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"description":"Your Dotdigital region id: r1 (Europe), r2 (North America) or r3 (Asia Pacific). Using another region's host returns 403; the API users page in your account shows the right endpoint.","enum":["r1","r2","r3"],"title":"Region","type":"string"},"select":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 1000).","title":"Select"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Skip"}},"required":["region"],"title":"list_address_booksArguments","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_address_book":{"post":{"operationId":"get_address_book","summary":"Get one address book's name, visibility and contact count by id. Use for \"How big is Dotdigital address book 987\".","description":"Get one address book's name, visibility and contact count by id. Use for \"How big is Dotdigital address book 987\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"description":"Your Dotdigital region id: r1 (Europe), r2 (North America) or r3 (Asia Pacific). Using another region's host returns 403; the API users page in your account shows the right endpoint.","enum":["r1","r2","r3"],"title":"Region","type":"string"},"address_book_id":{"description":"Numeric address book id (see list_address_books).","minimum":1,"title":"Address Book Id","type":"integer"}},"required":["region","address_book_id"],"title":"get_address_bookArguments","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_segments":{"post":{"operationId":"list_segments","summary":"List segments with id, name and contact count. Use for \"What segments do I have in Dotdigital\".","description":"List segments with id, name and contact count. Use for \"What segments do I have in Dotdigital\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"description":"Your Dotdigital region id: r1 (Europe), r2 (North America) or r3 (Asia Pacific). Using another region's host returns 403; the API users page in your account shows the right endpoint.","enum":["r1","r2","r3"],"title":"Region","type":"string"}},"required":["region"],"title":"list_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_data_fields":{"post":{"operationId":"list_data_fields","summary":"List the contact data fields defined in the account with name, data type, visibility and default value. Use for \"Which c","description":"List the contact data fields defined in the account with name, data type, visibility and default value. Use for \"Which contact data fields exist in Dotdigital\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"description":"Your Dotdigital region id: r1 (Europe), r2 (North America) or r3 (Asia Pacific). Using another region's host returns 403; the API users page in your account shows the right endpoint.","enum":["r1","r2","r3"],"title":"Region","type":"string"}},"required":["region"],"title":"list_data_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/list_templates":{"post":{"operationId":"list_templates","summary":"List email campaign templates with id, name, subject, from name and reply action (bodies are not returned). Use for \"Whi","description":"List email campaign templates with id, name, subject, from name and reply action (bodies are not returned). Use for \"Which email templates are in Dotdigital\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"description":"Your Dotdigital region id: r1 (Europe), r2 (North America) or r3 (Asia Pacific). Using another region's host returns 403; the API users page in your account shows the right endpoint.","enum":["r1","r2","r3"],"title":"Region","type":"string"},"select":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 1000).","title":"Select"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Skip"}},"required":["region"],"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_programs":{"post":{"operationId":"list_programs","summary":"List automation programs with id, name, status and creation time. Use for \"What automation programs run in Dotdigital\".","description":"List automation programs with id, name, status and creation time. Use for \"What automation programs run in Dotdigital\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"description":"Your Dotdigital region id: r1 (Europe), r2 (North America) or r3 (Asia Pacific). Using another region's host returns 403; the API users page in your account shows the right endpoint.","enum":["r1","r2","r3"],"title":"Region","type":"string"},"select":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many records to return (1 to 1000).","title":"Select"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many records to skip, for paging.","title":"Skip"}},"required":["region"],"title":"list_programsArguments","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}}}}