{"openapi":"3.1.0","info":{"title":"WhatConverts (BYOK) API","version":"0.1.0","description":"WhatConverts (BYOK) lets an AI assistant read your own WhatConverts data through the WhatConverts API with a key you supply (WhatConverts API token). Read-only: 7 tools (list_leads, count_leads, list_accounts, list_profiles, list_tracking_numbers, list_tracking_forms, list_roles). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-whatconverts.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-whatconverts/docs"},"termsOfService":"https://connectorbay.com/byok-whatconverts/terms"},"servers":[{"url":"https://byok-whatconverts.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-whatconverts/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_leads":{"post":{"operationId":"list_leads","summary":"List tracked leads (calls, forms, chats, texts, transactions) with type, date, source, medium, campaign, keyword, quote ","description":"List tracked leads (calls, forms, chats, texts, transactions) with type, date, source, medium, campaign, keyword, quote and sales value, lead score, spam flag, call length and answer status, newest first. Caller names, numbers, emails and IP addresses are left out. Use for \"Which Google leads did WhatConverts record this month and what are they worth\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_id":{"anyOf":[{"maximum":999999999999,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only leads of this account ID (agency key only).","title":"Account Id"},"profile_id":{"anyOf":[{"maximum":999999999999,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only leads of this profile ID.","title":"Profile Id"},"lead_type":{"anyOf":[{"enum":["appointment","chat","email","event","other","phone_call","text_message","transaction","web_form"],"type":"string"},{"type":"null"}],"default":null,"description":"Lead type.","title":"Lead Type"},"lead_status":{"anyOf":[{"enum":["repeat","unique"],"type":"string"},{"type":"null"}],"default":null,"description":"repeat or unique leads.","title":"Lead Status"},"quotable":{"anyOf":[{"enum":["yes","no","pending","not_set"],"type":"string"},{"type":"null"}],"default":null,"description":"Quotable type.","title":"Quotable"},"quote_value":{"anyOf":[{"enum":["has_value","no_value"],"type":"string"},{"type":"null"}],"default":null,"description":"Only leads with or without a quote value.","title":"Quote Value"},"sales_value":{"anyOf":[{"enum":["has_value","no_value"],"type":"string"},{"type":"null"}],"default":null,"description":"Only leads with or without a sales value.","title":"Sales Value"},"spam":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for spam leads only.","title":"Spam"},"duplicate":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for duplicate leads only.","title":"Duplicate"},"lead_source":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only leads from this traffic source (for example google).","title":"Lead Source"},"lead_medium":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only leads from this medium (for example cpc).","title":"Lead Medium"},"lead_campaign":{"anyOf":[{"maxLength":150,"type":"string"},{"type":"null"}],"default":null,"description":"Only leads from this campaign.","title":"Lead Campaign"},"lead_keyword":{"anyOf":[{"maxLength":150,"type":"string"},{"type":"null"}],"default":null,"description":"Only leads from this keyword.","title":"Lead Keyword"},"start_date":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Start date in ISO 8601 (for example 2026-10-01 or 2026-10-01T00:00:00Z, UTC). Defaults to today; the range may span up to 400 days.","title":"Start Date"},"end_date":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"End date in ISO 8601 (UTC).","title":"End Date"},"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by date created: asc or desc.","title":"Order"},"leads_per_page":{"anyOf":[{"maximum":250,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Results per page (1 to 250, default 25).","title":"Leads Per Page"},"page_number":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page Number"}},"title":"list_leadsArguments","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/count_leads":{"post":{"operationId":"count_leads","summary":"Count leads that match the filters without listing them: returns the total number of leads and pages. Good for how many ","description":"Count leads that match the filters without listing them: returns the total number of leads and pages. Good for how many calls, forms or spam leads in a date range. Use for \"How many phone call leads did we get from Google ads this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_id":{"anyOf":[{"maximum":999999999999,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only leads of this account ID (agency key only).","title":"Account Id"},"profile_id":{"anyOf":[{"maximum":999999999999,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only leads of this profile ID.","title":"Profile Id"},"lead_type":{"anyOf":[{"enum":["appointment","chat","email","event","other","phone_call","text_message","transaction","web_form"],"type":"string"},{"type":"null"}],"default":null,"description":"Lead type.","title":"Lead Type"},"lead_status":{"anyOf":[{"enum":["repeat","unique"],"type":"string"},{"type":"null"}],"default":null,"description":"repeat or unique leads.","title":"Lead Status"},"quotable":{"anyOf":[{"enum":["yes","no","pending","not_set"],"type":"string"},{"type":"null"}],"default":null,"description":"Quotable type.","title":"Quotable"},"quote_value":{"anyOf":[{"enum":["has_value","no_value"],"type":"string"},{"type":"null"}],"default":null,"description":"Only leads with or without a quote value.","title":"Quote Value"},"sales_value":{"anyOf":[{"enum":["has_value","no_value"],"type":"string"},{"type":"null"}],"default":null,"description":"Only leads with or without a sales value.","title":"Sales Value"},"spam":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for spam leads only.","title":"Spam"},"duplicate":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for duplicate leads only.","title":"Duplicate"},"lead_source":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only leads from this traffic source (for example google).","title":"Lead Source"},"lead_medium":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only leads from this medium (for example cpc).","title":"Lead Medium"},"lead_campaign":{"anyOf":[{"maxLength":150,"type":"string"},{"type":"null"}],"default":null,"description":"Only leads from this campaign.","title":"Lead Campaign"},"lead_keyword":{"anyOf":[{"maxLength":150,"type":"string"},{"type":"null"}],"default":null,"description":"Only leads from this keyword.","title":"Lead Keyword"},"start_date":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Start date in ISO 8601 (for example 2026-10-01 or 2026-10-01T00:00:00Z, UTC). Defaults to today; the range may span up to 400 days.","title":"Start Date"},"end_date":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"End date in ISO 8601 (UTC).","title":"End Date"},"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by date created: asc or desc.","title":"Order"},"leads_per_page":{"anyOf":[{"maximum":1,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Fixed at 1 so only the totals matter.","title":"Leads Per Page"}},"title":"count_leadsArguments","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_accounts":{"post":{"operationId":"list_accounts","summary":"List the accounts of an agency with their profiles (agency key only). Use for \"Which client accounts and profiles do we ","description":"List the accounts of an agency with their profiles (agency key only). Use for \"Which client accounts and profiles do we manage in WhatConverts\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Start date in ISO 8601 (for example 2026-10-01 or 2026-10-01T00:00:00Z, UTC). Defaults to today; the range may span up to 400 days.","title":"Start Date"},"end_date":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"End date in ISO 8601 (UTC).","title":"End Date"},"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by date created: asc or desc.","title":"Order"},"accounts_per_page":{"anyOf":[{"maximum":250,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Results per page (1 to 250, default 25).","title":"Accounts Per Page"},"page_number":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page Number"}},"title":"list_accountsArguments","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_profiles":{"post":{"operationId":"list_profiles","summary":"List the tracking profiles (websites or locations) of one account (agency key only). Use for \"Which profiles does this W","description":"List the tracking profiles (websites or locations) of one account (agency key only). Use for \"Which profiles does this WhatConverts account have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_id":{"description":"Account ID; list them with list_accounts.","title":"Account Id","type":"integer"},"start_date":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Start date in ISO 8601 (for example 2026-10-01 or 2026-10-01T00:00:00Z, UTC). Defaults to today; the range may span up to 400 days.","title":"Start Date"},"end_date":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"End date in ISO 8601 (UTC).","title":"End Date"},"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by date created: asc or desc.","title":"Order"},"profiles_per_page":{"anyOf":[{"maximum":250,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Results per page (1 to 250, default 25).","title":"Profiles Per Page"},"page_number":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page Number"}},"required":["account_id"],"title":"list_profilesArguments","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_tracking_numbers":{"post":{"operationId":"list_tracking_numbers","summary":"List call tracking numbers with name, tracking and destination number, trigger rule, traffic source, last use, recording","description":"List call tracking numbers with name, tracking and destination number, trigger rule, traffic source, last use, recording, voice and messaging flags. Use for \"Which call tracking numbers are set up in WhatConverts and where do they ring\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_id":{"anyOf":[{"maximum":999999999999,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only numbers of this account ID (agency key only).","title":"Account Id"},"profile_id":{"anyOf":[{"maximum":999999999999,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only numbers of this profile ID.","title":"Profile Id"},"numbers_per_page":{"anyOf":[{"maximum":250,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Results per page (1 to 250, default 25).","title":"Numbers Per Page"},"page_number":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page Number"}},"title":"list_tracking_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_tracking_forms":{"post":{"operationId":"list_tracking_forms","summary":"List tracked web forms with name, profile and the page attributes used to detect form submissions. Use for \"Which web fo","description":"List tracked web forms with name, profile and the page attributes used to detect form submissions. Use for \"Which web forms is WhatConverts tracking\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"account_id":{"anyOf":[{"maximum":999999999999,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only forms of this account ID (agency key only).","title":"Account Id"},"profile_id":{"anyOf":[{"maximum":999999999999,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only forms of this profile ID.","title":"Profile Id"},"forms_per_page":{"anyOf":[{"maximum":250,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Results per page (1 to 250, default 25).","title":"Forms Per Page"},"page_number":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page Number"}},"title":"list_tracking_formsArguments","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_roles":{"post":{"operationId":"list_roles","summary":"List user roles with type, name, lead notification flag and permission levels per area. Use for \"What roles and permissi","description":"List user roles with type, name, lead notification flag and permission levels per area. Use for \"What roles and permissions exist in our WhatConverts account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"roles_per_page":{"anyOf":[{"maximum":250,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Results per page (1 to 250, default 25).","title":"Roles Per Page"},"page_number":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page Number"}},"title":"list_rolesArguments","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}}}}