{"openapi":"3.1.0","info":{"title":"BulkSMS (BYOK) API","version":"0.1.0","description":"BulkSMS (BYOK) lets an AI assistant read your own BulkSMS data through the BulkSMS API with a key you supply (BulkSMS API token ID). Read-only: 6 tools (get_profile, list_messages, get_message, list_related_received_messages, list_blocked_numbers, list_webhooks). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever sent to...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-bulksms.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-bulksms/docs"},"termsOfService":"https://connectorbay.com/byok-bulksms/terms"},"servers":[{"url":"https://byok-bulksms.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-bulksms/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_profile":{"post":{"operationId":"get_profile","summary":"Show the account: username, creation date, credit balance and limit, daily sending quota and remaining count, and allowe","description":"Show the account: username, creation date, credit balance and limit, daily sending quota and remaining count, and allowed sender addresses. Company tax reference and billing details are left out. Use for \"How many BulkSMS credits do I have left\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_profileArguments","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_messages":{"post":{"operationId":"list_messages","summary":"List the messages you sent or received, newest first by default, with direction, numbers, text, parts, credit cost, subm","description":"List the messages you sent or received, newest first by default, with direction, numbers, text, parts, credit cost, submission and delivery status. Filter with name=value clauses joined by &. Scheduled messages show only after their delivery date. Use for \"Which BulkSMS messages failed delivery today\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"filter":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Filter clauses joined by &, for example type=SENT&status.type=FAILED. Fields: id (also with < or >), type (SENT or RECEIVED), submission.id, status.type (ACCEPTED, SENT, DELIVERED, FAILED), status.id, submission.date (with <, <=, > or >=) and userSuppliedId.","title":"Filter"},"sort_order":{"anyOf":[{"enum":["ASCENDING","DESCENDING"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by creation: DESCENDING (newest first, the API default) or ASCENDING.","title":"Sort Order"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Maximum messages returned (the API default is 1000; this tool defaults to 50). The API may return fewer than the limit even if more exist; page with filter=id<N using the lowest id seen.","title":"Limit"}},"title":"list_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/get_message":{"post":{"operationId":"get_message","summary":"Get one message by id with direction, numbers, text, parts, credit cost and delivery status. Use for \"What is the delive","description":"Get one message by id with direction, numbers, text, parts, credit cost and delivery status. Use for \"What is the delivery status of BulkSMS message 12345\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Message id from list_messages.","maxLength":40,"title":"Id","type":"string"}},"required":["id"],"title":"get_messageArguments","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_related_received_messages":{"post":{"operationId":"list_related_received_messages","summary":"List the replies received that are related to a sent message, identified by the sent message id. Use for \"Did anyone rep","description":"List the replies received that are related to a sent message, identified by the sent message id. Use for \"Did anyone reply to BulkSMS message 12345\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Id of the sent message.","maxLength":40,"title":"Id","type":"string"}},"required":["id"],"title":"list_related_received_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_blocked_numbers":{"post":{"operationId":"list_blocked_numbers","summary":"List the phone numbers blocked for this account with the date they were blocked and the note describing why. Use for \"Wh","description":"List the phone numbers blocked for this account with the date they were blocked and the note describing why. Use for \"Which numbers are blocked on our BulkSMS account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"min_id":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Only records with an id greater than or equal to this (default 0); add 1 to the last id seen to continue.","title":"Min Id"},"limit":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Maximum records returned (the API allows up to 10000; this tool defaults to 100).","title":"Limit"}},"title":"list_blocked_numbersArguments","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_webhooks":{"post":{"operationId":"list_webhooks","summary":"List the webhooks set up on the account with name, trigger scope (for example SENT) and whether each is active. Webhook ","description":"List the webhooks set up on the account with name, trigger scope (for example SENT) and whether each is active. Webhook URLs and contact emails are left out. Use for \"Which BulkSMS webhooks are active\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_webhooksArguments","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}}}}