{"openapi":"3.1.0","info":{"title":"JustCall (BYOK) API","version":"0.1.0","description":"JustCall (BYOK) lets an AI assistant read your own JustCall data through the JustCall API with a key you supply (JustCall API key and secret joined by a colon (api_key:api_secret)). Read-only: 9 tools (list_phone_numbers, list_contacts, list_texts, list_text_threads, list_text_tags, list_user_groups, list_voice_agents, list_sales_dialer_campaigns, get_account_call_analytics). 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-justcall.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-justcall/docs"},"termsOfService":"https://connectorbay.com/byok-justcall/terms"},"servers":[{"url":"https://byok-justcall.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-justcall/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 JustCall phone numbers of the account with line name, type, capabilities, availability setting and status. Use ","description":"List the JustCall phone numbers of the account with line name, type, capabilities, availability setting and status. Use for \"Which phone numbers does my JustCall account have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"number_type":{"anyOf":[{"enum":["local","mobile","toll_free"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter by number type: local, mobile or toll_free.","title":"Number Type"},"capabilities":{"anyOf":[{"enum":["call","sms","mms"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter by capability: call, sms or mms.","title":"Capabilities"},"availability_setting":{"anyOf":[{"enum":["Always Open","Always Closed","Custom Hours"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter by business hours setting.","title":"Availability Setting"},"justcall_line_name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Search by the line name.","title":"Justcall Line Name"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many records per page (1 to 100, default 30).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number (1 is the first page).","title":"Page"}},"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_contacts":{"post":{"operationId":"list_contacts","summary":"List JustCall contacts with name, number, email, company, status (Blacklist, DND, DNM) and notes. Defaults to the contac","description":"List JustCall contacts with name, number, email, company, status (Blacklist, DND, DNM) and notes. Defaults to the contacts of the key owner. Use for \"Find the JustCall contact with number +14155550123\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"contact_number":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Phone number of the contact.","title":"Contact Number"},"first_name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"First name of the contact.","title":"First Name"},"last_name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Last name of the contact.","title":"Last Name"},"across_team":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to fetch contacts of all agents in the account.","title":"Across Team"},"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"asc or desc by contact id (newest first with desc).","title":"Order"},"per_page":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many records per page (1 to 500, default 50).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number (0 is the first page).","title":"Page"}},"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_texts":{"post":{"operationId":"list_texts","summary":"List SMS and MMS texts with direction, JustCall number, contact, delivery status, body and date. Use for \"What texts did","description":"List SMS and MMS texts with direction, JustCall number, contact, delivery status, body and date. Use for \"What texts did we exchange with +14155550123 in JustCall\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"contact_number":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Contact phone number in E.164 format.","title":"Contact Number"},"justcall_number":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"JustCall number in E.164 format.","title":"Justcall Number"},"sms_direction":{"anyOf":[{"enum":["incoming","outgoing"],"type":"string"},{"type":"null"}],"default":null,"description":"incoming or outgoing.","title":"Sms Direction"},"sms_content":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Keywords to find in the text body.","title":"Sms Content"},"from_datetime":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only texts from this time, 'yyyy-mm-dd hh:mm:ss' or 'yyyy-mm-dd'.","title":"From Datetime"},"to_datetime":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only texts up to this time, same format.","title":"To Datetime"},"sort":{"anyOf":[{"enum":["id","datetime"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort by id (default) or datetime.","title":"Sort"},"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"asc or desc.","title":"Order"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many records per page (1 to 100, default 20).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number (1 is the first page).","title":"Page"}},"title":"list_textsArguments","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_text_threads":{"post":{"operationId":"list_text_threads","summary":"List SMS threads of one JustCall phone line with the latest text and applied tags. Use for \"Which SMS threads are open o","description":"List SMS threads of one JustCall phone line with the latest text and applied tags. Use for \"Which SMS threads are open on my JustCall number\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"phone_id":{"description":"Id of the SMS-enabled JustCall phone number (id from list_phone_numbers).","minimum":1,"title":"Phone Id","type":"integer"},"contact_number":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only threads with this contact number.","title":"Contact Number"},"keyword":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only threads with texts containing this keyword (3 characters or more).","title":"Keyword"},"tag_id":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only threads with this tag id.","title":"Tag Id"},"from_datetime":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only threads from this time, 'yyyy-mm-dd hh:mm:ss' or 'yyyy-mm-dd'.","title":"From Datetime"},"to_datetime":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only threads up to this time, same format.","title":"To Datetime"},"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"asc or desc by thread id.","title":"Order"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many records per page (1 to 100, default 50).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number (0 is the first page).","title":"Page"}},"required":["phone_id"],"title":"list_text_threadsArguments","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_text_tags":{"post":{"operationId":"list_text_tags","summary":"List the SMS thread tags defined in JustCall. Use for \"Which SMS tags exist in JustCall\".","description":"List the SMS thread tags defined in JustCall. Use for \"Which SMS tags exist in JustCall\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"asc or desc by tag id.","title":"Order"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many records per page (1 to 100, default 30).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number (0 is the first page).","title":"Page"}},"title":"list_text_tagsArguments","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_user_groups":{"post":{"operationId":"list_user_groups","summary":"List JustCall user groups with extension and members. Use for \"What user groups does JustCall have\".","description":"List JustCall user groups with extension and members. Use for \"What user groups does JustCall have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"asc or desc by group id.","title":"Order"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many records per page (1 to 100, default 50).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number (0 is the first page).","title":"Page"}},"title":"list_user_groupsArguments","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_voice_agents":{"post":{"operationId":"list_voice_agents","summary":"List JustCall AI voice agents with name, active flag, assigned numbers and creation time. Use for \"Which AI voice agents","description":"List JustCall AI voice agents with name, active flag, assigned numbers and creation time. Use for \"Which AI voice agents are set up in JustCall\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"asc or desc by creation time.","title":"Order"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many records per page (1 to 100, default 50).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number (0 is the first page).","title":"Page"}},"title":"list_voice_agentsArguments","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_sales_dialer_campaigns":{"post":{"operationId":"list_sales_dialer_campaigns","summary":"List Sales Dialer campaigns with type (PowerDial, Predictive, Dynamic), status, default number and creator. Use for \"Wha","description":"List Sales Dialer campaigns with type (PowerDial, Predictive, Dynamic), status, default number and creator. Use for \"What dialer campaigns are running in JustCall\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"type":{"anyOf":[{"enum":["PowerDial","Predictive","Dynamic"],"type":"string"},{"type":"null"}],"default":null,"description":"Campaign type.","title":"Type"},"from_datetime":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only campaigns from this time, 'yyyy-mm-dd hh:mm:ss' or 'yyyy-mm-dd'.","title":"From Datetime"},"to_datetime":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only campaigns up to this time, same format.","title":"To Datetime"},"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"asc or desc (default desc).","title":"Order"},"per_page":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records per page (1 to 50, default 10).","title":"Per Page"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number (0 is the first page).","title":"Page"}},"title":"list_sales_dialer_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_account_call_analytics":{"post":{"operationId":"get_account_call_analytics","summary":"Get account-level call analytics for a date range: incoming and outgoing calls, answer rate, missed calls, average talk,","description":"Get account-level call analytics for a date range: incoming and outgoing calls, answer rate, missed calls, average talk, hold and queue times. Use for \"How many calls did JustCall handle in March 2026 and how many were missed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"from_date":{"description":"Start date, YYYY-MM-DD.","maxLength":10,"title":"From Date","type":"string"},"to_date":{"description":"End date, YYYY-MM-DD.","maxLength":10,"title":"To Date","type":"string"}},"required":["from_date","to_date"],"title":"get_account_call_analyticsArguments","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}}}}