{"openapi":"3.1.0","info":{"title":"OpenPhone (BYOK) API","version":"0.1.0","description":"OpenPhone (BYOK) lets an AI assistant read your own OpenPhone data through the OpenPhone API with a key you supply (Quo API key (workspace settings > API; owner or admin only)). Read-only: 11 tools (list_phone_numbers, list_users, list_calls, get_call, get_call_summary, get_call_transcript, get_call_voicemail, list_messages, list_conversations, list_contacts, list_tasks). The BYOK key travels...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-openphone.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-openphone/docs"},"termsOfService":"https://connectorbay.com/byok-openphone/terms"},"servers":[{"url":"https://byok-openphone.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-openphone/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 the phone numbers of the workspace with name, number and the users who share each number. Use for \"Which phone numb","description":"List the phone numbers of the workspace with name, number and the users who share each number. Use for \"Which phone numbers does my OpenPhone workspace have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"user_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only numbers of this user id.","title":"User Id"}},"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/list_users":{"post":{"operationId":"list_users","summary":"List the users of the workspace with name, email and role (owner, admin, member). Use for \"Who are the users in my OpenP","description":"List the users of the workspace with name, email and role (owner, admin, member). Use for \"Who are the users in my OpenPhone workspace\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"max_results":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many users to return (1 to 50, default 10).","title":"Max Results"},"page_token":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"nextPageToken from the previous answer, to get the next page.","title":"Page Token"}},"title":"list_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_calls":{"post":{"operationId":"list_calls","summary":"List calls between one workspace number and one other phone number, newest first, with direction, status, duration, user","description":"List calls between one workspace number and one other phone number, newest first, with direction, status, duration, user and participants. Use for \"What calls did I have with +15555550123 on my OpenPhone number\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"phone_number_id":{"description":"Id of one of your workspace phone numbers (starts with PN; get it from list_phone_numbers).","maxLength":60,"title":"Phone Number Id","type":"string"},"participant":{"description":"The other party's phone number in E.164 format, for example +15555550123.","maxLength":20,"title":"Participant","type":"string"},"created_after":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only calls created after this ISO 8601 time.","title":"Created After"},"created_before":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only calls created before this ISO 8601 time.","title":"Created Before"},"max_results":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many calls to return (1 to 100, default 10).","title":"Max Results"},"page_token":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"nextPageToken from the previous answer, to get the next page.","title":"Page Token"}},"required":["phone_number_id","participant"],"title":"list_callsArguments","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_call":{"post":{"operationId":"get_call","summary":"Get one call by id: direction, status, duration, participants, who answered and routing. Use for \"Show OpenPhone call AC","description":"Get one call by id: direction, status, duration, participants, who answered and routing. Use for \"Show OpenPhone call ACabc123\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"call_id":{"description":"Call id (starts with AC; get it from list_calls).","maxLength":60,"title":"Call Id","type":"string"}},"required":["call_id"],"title":"get_callArguments","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_call_summary":{"post":{"operationId":"get_call_summary","summary":"Get the AI summary and next steps of a call. Needs the Business or Scale plan; status says whether it is ready. Use for ","description":"Get the AI summary and next steps of a call. Needs the Business or Scale plan; status says whether it is ready. Use for \"Summarise OpenPhone call ACabc123\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"call_id":{"description":"Call id (starts with AC; get it from list_calls).","maxLength":60,"title":"Call Id","type":"string"}},"required":["call_id"],"title":"get_call_summaryArguments","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_call_transcript":{"post":{"operationId":"get_call_transcript","summary":"Get the transcript of a call as speaker dialogue lines. Needs the Business or Scale plan. Use for \"What was said in Open","description":"Get the transcript of a call as speaker dialogue lines. Needs the Business or Scale plan. Use for \"What was said in OpenPhone call ACabc123\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"call_id":{"description":"Call id (starts with AC; get it from list_calls).","maxLength":60,"title":"Call Id","type":"string"}},"required":["call_id"],"title":"get_call_transcriptArguments","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_call_voicemail":{"post":{"operationId":"get_call_voicemail","summary":"Get the voicemail of a call: transcript, duration and processing status. Use for \"What was the voicemail on OpenPhone ca","description":"Get the voicemail of a call: transcript, duration and processing status. Use for \"What was the voicemail on OpenPhone call ACabc123\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"call_id":{"description":"Call id (starts with AC; get it from list_calls).","maxLength":60,"title":"Call Id","type":"string"}},"required":["call_id"],"title":"get_call_voicemailArguments","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 text messages between one workspace number and one other phone number, newest first, with direction, status and tex","description":"List text messages between one workspace number and one other phone number, newest first, with direction, status and text. Use for \"What texts did I exchange with +15555550123 in OpenPhone\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"phone_number_id":{"description":"Id of one of your workspace phone numbers (starts with PN; get it from list_phone_numbers).","maxLength":60,"title":"Phone Number Id","type":"string"},"participant":{"description":"The other party's phone number in E.164 format, for example +15555550123.","maxLength":20,"title":"Participant","type":"string"},"created_after":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only messages created after this ISO 8601 time.","title":"Created After"},"created_before":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only messages created before this ISO 8601 time.","title":"Created Before"},"max_results":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many messages to return (1 to 100, default 10).","title":"Max Results"},"page_token":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"nextPageToken from the previous answer, to get the next page.","title":"Page Token"}},"required":["phone_number_id","participant"],"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/list_conversations":{"post":{"operationId":"list_conversations","summary":"List conversations of the workspace, most recent first, with participants, assignee and last activity time. Use for \"Whi","description":"List conversations of the workspace, most recent first, with participants, assignee and last activity time. Use for \"Which OpenPhone conversations had activity this week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"user_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only conversations of this user id.","title":"User Id"},"updated_after":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only conversations updated after this ISO 8601 time.","title":"Updated After"},"exclude_inactive":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to leave out inactive conversations.","title":"Exclude Inactive"},"max_results":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many conversations to return (1 to 100, default 10).","title":"Max Results"},"page_token":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"nextPageToken from the previous answer, to get the next page.","title":"Page Token"}},"title":"list_conversationsArguments","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_contacts":{"post":{"operationId":"list_contacts","summary":"List contacts of the workspace with company, role, emails and phone numbers. Use for \"Who are my OpenPhone contacts\".","description":"List contacts of the workspace with company, role, emails and phone numbers. Use for \"Who are my OpenPhone contacts\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"max_results":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many contacts to return (1 to 50, default 10).","title":"Max Results"},"page_token":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"nextPageToken from the previous answer, to get the next page.","title":"Page Token"}},"title":"list_contactsArguments","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_tasks":{"post":{"operationId":"list_tasks","summary":"List tasks with title, description, due date, assignee and completion flag. Use for \"What OpenPhone tasks are still open","description":"List tasks with title, description, due date, assignee and completion flag. Use for \"What OpenPhone tasks are still open\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"max_results":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many tasks to return (1 to 100, default 50).","title":"Max Results"},"page_token":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"nextPageToken from the previous answer, to get the next page.","title":"Page Token"}},"title":"list_tasksArguments","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}}}}