{"openapi":"3.1.0","info":{"title":"eSputnik (BYOK) API","version":"0.1.0","description":"eSputnik (BYOK) lets an AI assistant read your own eSputnik data through the eSputnik API with a key you supply (eSputnik API key). Read-only: 12 tools (get_account_info, get_balance, get_billing_history, list_segments, list_workflows, list_broadcasts, get_broadcast, search_email_messages, search_sms_messages, list_sms_interfaces, list_email_interfaces, list_subscription_categories). The BYOK key...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-esputnik.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-esputnik/docs"},"termsOfService":"https://connectorbay.com/byok-esputnik/terms"},"servers":[{"url":"https://byok-esputnik.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-esputnik/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_account_info":{"post":{"operationId":"get_account_info","summary":"Show the organization id and name the API key belongs to. Use for \"Which eSputnik organization is this key for\".","description":"Show the organization id and name the API key belongs to. Use for \"Which eSputnik organization is this key for\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_account_infoArguments","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_balance":{"post":{"operationId":"get_balance","summary":"Show the account balance, credit limit, currency and the bonus email and SMS counts. Use for \"How much balance do I have","description":"Show the account balance, credit limit, currency and the bonus email and SMS counts. Use for \"How much balance do I have left in eSputnik\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_balanceArguments","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_billing_history":{"post":{"operationId":"get_billing_history","summary":"Show the account's daily costs by channel between two dates; defaults to today so far. Use for \"What did eSputnik messag","description":"Show the account's daily costs by channel between two dates; defaults to today so far. Use for \"What did eSputnik messaging cost us this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the billing history, ISO 8601 (for example 2026-10-01).","title":"Date From"},"date_to":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"End of the billing history, ISO 8601; defaults to now.","title":"Date To"}},"title":"get_billing_historyArguments","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 the contact segments with id, name and type. Use for \"Which segments exist in eSputnik\".","description":"List the contact segments with id, name and type. Use for \"Which segments exist in eSputnik\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items whose name matches this text.","title":"Name"},"startindex":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Index of the first item to return from the results; numbering starts at 1.","title":"Startindex"},"maxrows":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Maximum number of segments to return (the API allows up to 500; this tool defaults to 50).","title":"Maxrows"}},"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_workflows":{"post":{"operationId":"list_workflows","summary":"List the automation workflows with id, name, status and tags. Use for \"Which eSputnik workflows are running\".","description":"List the automation workflows with id, name, status and tags. Use for \"Which eSputnik workflows are running\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items whose name matches this text.","title":"Name"},"startindex":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Index of the first item to return from the results; numbering starts at 1.","title":"Startindex"},"maxrows":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Maximum number of workflows to return (the API allows up to 500; this tool defaults to 50).","title":"Maxrows"}},"title":"list_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_broadcasts":{"post":{"operationId":"list_broadcasts","summary":"List the scheduled broadcasts with title, message id, segment id, start date and batch size and interval. Use for \"Which","description":"List the scheduled broadcasts with title, message id, segment id, start date and batch size and interval. Use for \"Which broadcasts are scheduled in eSputnik\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"startindex":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Index of the first broadcast to return; numbering starts at 1.","title":"Startindex"},"maxrows":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"Maximum number of broadcasts to return (the API allows up to 500; this tool defaults to 10).","title":"Maxrows"}},"title":"list_broadcastsArguments","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_broadcast":{"post":{"operationId":"get_broadcast","summary":"Get one broadcast by id: title, message id, segment id, start date and batch settings. Use for \"Show eSputnik broadcast ","description":"Get one broadcast by id: title, message id, segment id, start date and batch settings. Use for \"Show eSputnik broadcast 12345\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"broadcast_id":{"description":"Broadcast id from list_broadcasts.","maxLength":40,"title":"Broadcast Id","type":"string"}},"required":["broadcast_id"],"title":"get_broadcastArguments","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/search_email_messages":{"post":{"operationId":"search_email_messages","summary":"Search email messages (templates) by part of the name or a tag: id, name, language, tags, sender, subject and last updat","description":"Search email messages (templates) by part of the name or a tag: id, name, language, tags, sender, subject and last update. The HTML body is left out. Use for \"Which email messages in eSputnik mention 'welcome'\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Search text: a part of the message name or a tag.","title":"Search"},"startindex":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Index of the first item to return from the results; numbering starts at 1.","title":"Startindex"},"maxrows":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Maximum number of messages to return (the API allows up to 500; this tool defaults to 50).","title":"Maxrows"}},"title":"search_email_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}},"/v1/tools/search_sms_messages":{"post":{"operationId":"search_sms_messages","summary":"Search SMS messages by part of the name or a tag: id, name, language, tags, sender and text. Use for \"Which SMS messages","description":"Search SMS messages by part of the name or a tag: id, name, language, tags, sender and text. Use for \"Which SMS messages in eSputnik mention 'sale'\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Search text: a part of the message name or a tag.","title":"Search"},"startindex":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Index of the first item to return from the results; numbering starts at 1.","title":"Startindex"},"maxrows":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Maximum number of messages to return (the API allows up to 500; this tool defaults to 50).","title":"Maxrows"}},"title":"search_sms_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}},"/v1/tools/list_sms_interfaces":{"post":{"operationId":"list_sms_interfaces","summary":"List the SMS sender interfaces (alpha names) available to the account. Use for \"Which SMS sender names do we have in eSp","description":"List the SMS sender interfaces (alpha names) available to the account. Use for \"Which SMS sender names do we have in eSputnik\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_sms_interfacesArguments","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_email_interfaces":{"post":{"operationId":"list_email_interfaces","summary":"List the email sender interfaces (sender names) available to the account. Use for \"Which email sender names do we have i","description":"List the email sender interfaces (sender names) available to the account. Use for \"Which email sender names do we have in eSputnik\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_email_interfacesArguments","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_subscription_categories":{"post":{"operationId":"list_subscription_categories","summary":"List the organization's subscription categories with key, segment id, contact count and dates. Use for \"Which subscripti","description":"List the organization's subscription categories with key, segment id, contact count and dates. Use for \"Which subscription categories exist in eSputnik and how many contacts are in each\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_subscription_categoriesArguments","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}}}}