{"openapi":"3.1.0","info":{"title":"Iterable (BYOK) API","version":"0.1.0","description":"Iterable (BYOK) lets an AI assistant read your own Iterable data through the Iterable API with a key you supply (server-side API key (project in the US data center)). Read-only: 10 tools (list_campaigns, get_campaign, list_journeys, list_lists, list_templates, list_channels, list_message_types, list_catalogs, get_user_by_email, list_user_sent_messages). The BYOK key travels with each request, is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-iterable.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-iterable/docs"},"termsOfService":"https://connectorbay.com/byok-iterable/terms"},"servers":[{"url":"https://byok-iterable.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-iterable/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 campaign metadata with name, type (Blast or Triggered), state, medium, send size and dates (Unix milliseconds). Sor","description":"List campaign metadata with name, type (Blast or Triggered), state, medium, send size and dates (Unix milliseconds). Sortable; pages by number. Use for \"Which Iterable campaigns are running or scheduled\".","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"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Results per page (1 to 1000, default 20).","title":"Page Size"},"sort":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":"id","description":"Field to sort by, with optional - prefix for descending, for example '-createdAt'.","title":"Sort"}},"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 campaign by id with name, type, state, medium, send size, template id, list ids and dates. Use for \"Show Iterabl","description":"Get one campaign by id with name, type, state, medium, send size, template id, list ids and dates. Use for \"Show Iterable campaign 1234567\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"campaign_id":{"description":"Campaign id (a number).","title":"Campaign Id","type":"integer"}},"required":["campaign_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_journeys":{"post":{"operationId":"list_journeys","summary":"List journeys (workflows) with name, enabled flag, type, limits and dates; archived journeys are left out. Up to 50 per ","description":"List journeys (workflows) with name, enabled flag, type, limits and dates; archived journeys are left out. Up to 50 per page. Use for \"Which Iterable journeys are enabled\".","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"},"page_size":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Results per page (1 to 50, default 10).","title":"Page Size"},"sort":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":"id","description":"Field to sort by, with optional - prefix for descending.","title":"Sort"}},"title":"list_journeysArguments","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_lists":{"post":{"operationId":"list_lists","summary":"List all user lists with id, name, type (Standard, Dynamic, Suppression, Internal) and creation time. Use for \"What list","description":"List all user lists with id, name, type (Standard, Dynamic, Suppression, Internal) and creation time. Use for \"What lists do I have in Iterable\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_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_templates":{"post":{"operationId":"list_templates","summary":"List project templates with name, template id, campaign id and dates; filter by type (Base, Blast, Triggered, Workflow) ","description":"List project templates with name, template id, campaign id and dates; filter by type (Base, Blast, Triggered, Workflow) or medium (Email, Push, InApp, SMS). Use for \"Which email templates exist in Iterable\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"template_type":{"anyOf":[{"enum":["Base","Blast","Triggered","Workflow"],"type":"string"},{"type":"null"}],"default":null,"description":"Only templates of this type.","title":"Template Type"},"message_medium":{"anyOf":[{"enum":["Email","Push","InApp","SMS"],"type":"string"},{"type":"null"}],"default":null,"description":"Only templates of this medium.","title":"Message Medium"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Results per page (1 to 1000, default 20).","title":"Page Size"},"sort":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":"id","description":"Field to sort by, with optional - prefix for descending.","title":"Sort"}},"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_channels":{"post":{"operationId":"list_channels","summary":"List channels with id, name, type (Marketing or Transactional) and medium (Email, Push, SMS). Use for \"What channels are","description":"List channels with id, name, type (Marketing or Transactional) and medium (Email, Push, SMS). Use for \"What channels are set up in Iterable\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"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_message_types":{"post":{"operationId":"list_message_types","summary":"List message types with channel id, subscription policy (OptIn or OptOut), frequency cap and rate limit. Use for \"What m","description":"List message types with channel id, subscription policy (OptIn or OptOut), frequency cap and rate limit. Use for \"What message types does my Iterable project have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_message_typesArguments","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_catalogs":{"post":{"operationId":"list_catalogs","summary":"List catalog names with the total number of catalogs; pages by number. Use for \"Which catalogs does my Iterable project ","description":"List catalog names with the total number of catalogs; pages by number. Use for \"Which catalogs does my Iterable project have\".","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"},"page_size":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Results per page (1 to 1000, default 10).","title":"Page Size"}},"title":"list_catalogsArguments","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_user_by_email":{"post":{"operationId":"get_user_by_email","summary":"Get one user profile by email address with user id and data fields. Use for \"Show the Iterable profile for ada@example.c","description":"Get one user profile by email address with user id and data fields. Use for \"Show the Iterable profile for ada@example.com\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"email":{"description":"The user's email address.","maxLength":320,"title":"Email","type":"string"}},"required":["email"],"title":"get_user_by_emailArguments","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_user_sent_messages":{"post":{"operationId":"list_user_sent_messages","summary":"List messages sent to one user (by email or user id) with campaign id, template id, message id and time. Up to 1000 per ","description":"List messages sent to one user (by email or user id) with campaign id, template id, message id and time. Up to 1000 per call. Use for \"Which Iterable messages were sent to ada@example.com recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"email":{"anyOf":[{"maxLength":320,"type":"string"},{"type":"null"}],"default":null,"description":"The user's email address (give email or user_id).","title":"Email"},"user_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"The user's userId (give email or user_id).","title":"User Id"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Maximum number of messages (1 to 1000, default 10).","title":"Limit"},"message_medium":{"anyOf":[{"enum":["Email","Push","InApp","SMS"],"type":"string"},{"type":"null"}],"default":null,"description":"Only messages of this medium.","title":"Message Medium"}},"title":"list_user_sent_messagesArguments","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}}}}