{"openapi":"3.1.0","info":{"title":"Smaily (BYOK) API","version":"0.1.0","description":"Smaily (BYOK) lets an AI assistant read your own Smaily data through the Smaily API with a key you supply (Smaily API username). Read-only: 10 tools (get_subscriber, list_segment_subscribers, list_segments, list_campaigns, get_campaign_statistics, list_ab_tests, list_automation_workflows, list_templates, list_organization_users, list_subscriber_actions). 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-smaily.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-smaily/docs"},"termsOfService":"https://connectorbay.com/byok-smaily/terms"},"servers":[{"url":"https://byok-smaily.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-smaily/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/get_subscriber":{"post":{"operationId":"get_subscriber","summary":"Get one subscriber by email address: subscription status, dates, total opens and clicks, and every custom data field. Us","description":"Get one subscriber by email address: subscription status, dates, total opens and clicks, and every custom data field. Use for \"Is jane@example.com subscribed in Smaily\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Smaily account subdomain: the part before .sendsmaily.net, for example 'mycompany' for mycompany.sendsmaily.net.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"email":{"description":"Subscriber's email address.","maxLength":254,"title":"Email","type":"string"}},"required":["subdomain","email"],"title":"get_subscriberArguments","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_segment_subscribers":{"post":{"operationId":"list_segment_subscribers","summary":"List the subscribers of one segment sorted by email, with status, dates and custom fields. Page with offset (0 gives the","description":"List the subscribers of one segment sorted by email, with status, dates and custom fields. Page with offset (0 gives the first block). Use for \"Who is in Smaily segment 3\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Smaily account subdomain: the part before .sendsmaily.net, for example 'mycompany' for mycompany.sendsmaily.net.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"list":{"description":"Segment ID from list_segments.","minimum":1,"title":"List","type":"integer"},"limit":{"anyOf":[{"maximum":25000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many subscribers to return (1 to 25000).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Block number: 0 gives the first block of limit subscribers, 1 the next.","title":"Offset"},"fields":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated fields to return per subscriber (email is always included), for example 'name,city'.","title":"Fields"}},"required":["subdomain","list"],"title":"list_segment_subscribersArguments","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 number of subscribers. Use for \"Which segments do I have in Smaily\".","description":"List segments with ID, name and number of subscribers. Use for \"Which segments do I have in Smaily\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Smaily account subdomain: the part before .sendsmaily.net, for example 'mycompany' for mycompany.sendsmaily.net.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"}},"required":["subdomain"],"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_campaigns":{"post":{"operationId":"list_campaigns","summary":"List email campaigns with name, status, template, tags and dates. Filter by status; 0 limit returns all. Use for \"Which ","description":"List email campaigns with name, status, template, tags and dates. Filter by status; 0 limit returns all. Use for \"Which Smaily campaigns were completed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Smaily account subdomain: the part before .sendsmaily.net, for example 'mycompany' for mycompany.sendsmaily.net.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"status":{"anyOf":[{"enum":["DRAFT","PENDING","COMPLETED","CANCELLED"],"type":"string"},{"type":"null"}],"default":null,"description":"Only items with this status (one value).","title":"Status"},"tags":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only campaigns with this tag (one value).","title":"Tags"},"sort_order":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":"ASC","description":"Sort direction by creation date: ASC or DESC.","title":"Sort Order"},"limit":{"anyOf":[{"maximum":10000,"minimum":0,"type":"integer"},{"type":"null"}],"default":50,"description":"How many campaigns to return (0 or empty means all).","title":"Limit"},"page":{"anyOf":[{"maximum":1000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Block number of 10000 records, starting at 0.","title":"Page"}},"required":["subdomain"],"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_statistics":{"post":{"operationId":"get_campaign_statistics","summary":"Get the overview statistics of one campaign: sender, status, delivered, bounced, clicked, opened, unsubscribed and compl","description":"Get the overview statistics of one campaign: sender, status, delivered, bounced, clicked, opened, unsubscribed and complaint counts and percentages. Use for \"How did Smaily campaign 12 perform\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Smaily account subdomain: the part before .sendsmaily.net, for example 'mycompany' for mycompany.sendsmaily.net.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"campaign_id":{"description":"Campaign ID from list_campaigns.","minimum":1,"title":"Campaign Id","type":"integer"}},"required":["subdomain","campaign_id"],"title":"get_campaign_statisticsArguments","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_ab_tests":{"post":{"operationId":"list_ab_tests","summary":"List A/B tests with name, status, sections (subject and template), tags and dates. Use for \"Which A/B tests did I run in","description":"List A/B tests with name, status, sections (subject and template), tags and dates. Use for \"Which A/B tests did I run in Smaily\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Smaily account subdomain: the part before .sendsmaily.net, for example 'mycompany' for mycompany.sendsmaily.net.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"status":{"anyOf":[{"enum":["DRAFT","PENDING","COMPLETED","CANCELLED"],"type":"string"},{"type":"null"}],"default":null,"description":"Only items with this status (one value).","title":"Status"},"sort_order":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":"ASC","description":"Sort direction by creation date: ASC or DESC.","title":"Sort Order"},"limit":{"anyOf":[{"maximum":10000,"minimum":0,"type":"integer"},{"type":"null"}],"default":50,"description":"How many tests to return.","title":"Limit"},"offset":{"anyOf":[{"maximum":1000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Block number of 10000 records, starting at 0.","title":"Offset"}},"required":["subdomain"],"title":"list_ab_testsArguments","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_automation_workflows":{"post":{"operationId":"list_automation_workflows","summary":"List automation workflows with name, status, message sections, tags and activation date. Use for \"Which Smaily automatio","description":"List automation workflows with name, status, message sections, tags and activation date. Use for \"Which Smaily automations are active\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Smaily account subdomain: the part before .sendsmaily.net, for example 'mycompany' for mycompany.sendsmaily.net.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"status":{"anyOf":[{"enum":["INACTIVE","ACTIVE"],"type":"string"},{"type":"null"}],"default":null,"description":"Only items with this status (one value).","title":"Status"},"sort_order":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":"ASC","description":"Sort direction by creation date: ASC or DESC.","title":"Sort Order"},"limit":{"anyOf":[{"maximum":10000,"minimum":0,"type":"integer"},{"type":"null"}],"default":50,"description":"How many workflows to return (0 or empty means all).","title":"Limit"},"page":{"anyOf":[{"maximum":1000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, starting at 0 (applies only with a limit).","title":"Page"}},"required":["subdomain"],"title":"list_automation_workflowsArguments","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 templates with type, creation and modification time and preview URL. Use for \"Which email templates exist in ","description":"List email templates with type, creation and modification time and preview URL. Use for \"Which email templates exist in Smaily\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Smaily account subdomain: the part before .sendsmaily.net, for example 'mycompany' for mycompany.sendsmaily.net.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"sort_by":{"anyOf":[{"enum":["name","created_at","modified_at"],"type":"string"},{"type":"null"}],"default":"name","description":"Sort field.","title":"Sort By"},"sort_order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"asc","description":"Sort direction.","title":"Sort Order"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many templates to return (1 to 1000).","title":"Limit"},"page":{"anyOf":[{"maximum":1000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, starting at 0.","title":"Page"}},"required":["subdomain"],"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_organization_users":{"post":{"operationId":"list_organization_users","summary":"List the users of the organization with name, email, role and owner flag. Use for \"Who has access to my Smaily organizat","description":"List the users of the organization with name, email, role and owner flag. Use for \"Who has access to my Smaily organization\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Smaily account subdomain: the part before .sendsmaily.net, for example 'mycompany' for mycompany.sendsmaily.net.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"limit":{"anyOf":[{"maximum":250,"minimum":1,"type":"integer"},{"type":"null"}],"default":250,"description":"How many users to return (1 to 250).","title":"Limit"},"page":{"anyOf":[{"maximum":1000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, starting at 0.","title":"Page"}},"required":["subdomain"],"title":"list_organization_usersArguments","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_subscriber_actions":{"post":{"operationId":"list_subscriber_actions","summary":"List subscriber actions (opens, clicks, bounces, opt-ins, sends) in a time range, oldest first. Only the last 30 days ar","description":"List subscriber actions (opens, clicks, bounces, opt-ins, sends) in a time range, oldest first. Only the last 30 days are kept. Times are UNIX timestamps in UTC. Use for \"Which Smaily subscribers clicked a link yesterday\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Smaily account subdomain: the part before .sendsmaily.net, for example 'mycompany' for mycompany.sendsmaily.net.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"start_at":{"description":"Start of the range as a UNIX timestamp (UTC).","minimum":0,"title":"Start At","type":"integer"},"end_at":{"description":"End of the range as a UNIX timestamp (UTC); not before start_at.","minimum":0,"title":"End At","type":"integer"},"actions":{"anyOf":[{"enum":["bounce","click","complaint","create","delete","modify","optin","optout","send","view"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this action type.","title":"Actions"},"limit":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many actions to return (1 to 10000).","title":"Limit"}},"required":["subdomain","start_at","end_at"],"title":"list_subscriber_actionsArguments","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}}}}