{"openapi":"3.1.0","info":{"title":"Flowroute (BYOK) API","version":"0.1.0","description":"Flowroute (BYOK) lets an AI assistant read your own Flowroute data through the Flowroute API with a key you supply (access key). Read-only: 9 tools (list_phone_numbers, get_phone_number, list_routes, list_edge_strategies, list_cnam_records, list_messages, get_message, get_message_stats, get_port_order_status). The BYOK key travels with each request, is used for that one call only and is never...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-flowroute.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-flowroute/docs"},"termsOfService":"https://connectorbay.com/byok-flowroute/terms"},"servers":[{"url":"https://byok-flowroute.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-flowroute/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_phone_numbers":{"post":{"operationId":"list_phone_numbers","summary":"List phone numbers on the account with alias, type (longcode or toll-free), state, rate center, country, status (PURCHAS","description":"List phone numbers on the account with alias, type (longcode or toll-free), state, rate center, country, status (PURCHASED or PORTING_IN) and CNAM and messaging flags. Use for \"Which phone numbers do I have on Flowroute\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"starts_with":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only numbers starting with this value (a leading + and country code selects another country; default country code 1).","title":"Starts With"},"contains":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only numbers containing this value.","title":"Contains"},"ends_with":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only numbers ending with this value.","title":"Ends With"},"alias":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Exact alias (friendly name) of the number.","title":"Alias"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many items to return (1 to 200, default 10).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of items to skip, for paging (0 to start).","title":"Offset"}},"title":"list_phone_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/get_phone_number":{"post":{"operationId":"get_phone_number","summary":"Get one phone number's attributes (alias, type, state, rate center, status, flags). Routes and CNAM relationships are no","description":"Get one phone number's attributes (alias, type, state, rate center, status, flags). Routes and CNAM relationships are not expanded. Use for \"What are the details of Flowroute number 12062011682\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"number":{"description":"Number you own in 11-digit E.164 form without the plus, for example 12061231234.","maxLength":200,"title":"Number","type":"string"}},"required":["number"],"title":"get_phone_numberArguments","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_routes":{"post":{"operationId":"list_routes","summary":"List inbound voice routes (alias, type host, number, uri or sip-reg, and value). Use for \"Which inbound routes are set u","description":"List inbound voice routes (alias, type host, number, uri or sip-reg, and value). Use for \"Which inbound routes are set up on my Flowroute account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"route_type":{"anyOf":[{"enum":["sip-reg","host","uri","number"],"type":"string"},{"type":"null"}],"default":null,"description":"Only routes of this type.","title":"Route Type"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many items to return (1 to 200, default 10).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of items to skip, for paging (0 to start).","title":"Offset"}},"title":"list_routesArguments","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_edge_strategies":{"post":{"operationId":"list_edge_strategies","summary":"List edge strategies (points of presence) usable by inbound routes: name, description and the IP range to allow in a fir","description":"List edge strategies (points of presence) usable by inbound routes: name, description and the IP range to allow in a firewall. Use for \"Which Flowroute points of presence can I route to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_edge_strategiesArguments","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_cnam_records":{"post":{"operationId":"list_cnam_records","summary":"List caller ID name (CNAM) records with value, approval state, rejection reason and dates. Use for \"Are my Flowroute cal","description":"List caller ID name (CNAM) records with value, approval state, rejection reason and dates. Use for \"Are my Flowroute caller ID names approved\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"is_approved":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for approved records only, false for unapproved only.","title":"Is Approved"},"value":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only records containing this text (case-insensitive).","title":"Value"},"limit":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many items to return (1 to 200, default 10).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of items to skip, for paging (0 to start).","title":"Offset"}},"title":"list_cnam_recordsArguments","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 message detail records (SMS and MMS) in a UTC date range with direction, status, numbers, type and cost; message te","description":"List message detail records (SMS and MMS) in a UTC date range with direction, status, numbers, type and cost; message text is not returned. Use for \"What messages did my Flowroute numbers handle last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"description":"Start of the range in UTC: YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss.SSZ.","maxLength":40,"title":"Start Date","type":"string"},"end_date":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the range in UTC, same format.","title":"End Date"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many items to return (1 to 100, default 10).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of items to skip, for paging (0 to start).","title":"Offset"}},"required":["start_date"],"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 detail record by its MDR id (starts with mdr2-): direction, status, numbers, type, cost; message text is","description":"Get one message detail record by its MDR id (starts with mdr2-): direction, status, numbers, type, cost; message text is not returned. Use for \"What happened to Flowroute message mdr2-ca82be46e6ba11e79d08862d092cf73d\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"record_id":{"description":"Message detail record id including the 'mdr2-' prefix.","maxLength":200,"title":"Record Id","type":"string"}},"required":["record_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/get_message_stats":{"post":{"operationId":"get_message_stats","summary":"Get message totals (inbound, outbound, cost) and breakdowns by category such as sms-inbound-longcode. Use for \"How many ","description":"Get message totals (inbound, outbound, cost) and breakdowns by category such as sms-inbound-longcode. Use for \"How many messages did my Flowroute account send and receive\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_message_statsArguments","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_port_order_status":{"post":{"operationId":"get_port_order_status","summary":"Get the status of a number port order (pending, processing, submitted, accepted, rejected, review, completed, canceled, ","description":"Get the status of a number port order (pending, processing, submitted, accepted, rejected, review, completed, canceled, abandoned) and when it last changed. Use for \"What is the status of Flowroute port order 41351\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"port_order_id":{"description":"Port order id.","title":"Port Order Id","type":"integer"}},"required":["port_order_id"],"title":"get_port_order_statusArguments","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}}}}