{"openapi":"3.1.0","info":{"title":"Vapi Testing (BYOK) API","version":"0.1.0","description":"Vapi Testing (BYOK) lets an AI assistant read your own Vapi Testing data through the Vapi Testing API with a key you supply (private API key). Read-only: 8 tools (list_evals, list_eval_runs, list_simulations, list_simulation_scenarios, list_simulation_personalities, list_simulation_suites, list_simulation_runs, get_simulation_concurrency). The BYOK key travels with each request, is used for that...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-vapi-testing.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-vapi-testing/docs"},"termsOfService":"https://connectorbay.com/byok-vapi-testing/terms"},"servers":[{"url":"https://byok-vapi-testing.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-vapi-testing/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_evals":{"post":{"operationId":"list_evals","summary":"List eval definitions (mock conversations that check an assistant's behavior) with name, description, type and timestamp","description":"List eval definitions (mock conversations that check an assistant's behavior) with name, description, type and timestamps. Use for \"Which evals have I defined for my Vapi assistants\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only the eval with this id.","title":"Id"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Items per page (default 100; keep it small for readable answers).","title":"Limit"},"sort_order":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort order: ASC or DESC (default DESC).","title":"Sort Order"},"created_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items created after this ISO 8601 time, for example 2026-01-01T00:00:00Z.","title":"Created After"},"created_before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items created before this ISO 8601 time.","title":"Created Before"}},"title":"list_evalsArguments","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_eval_runs":{"post":{"operationId":"list_eval_runs","summary":"List eval runs with status, end reason, target, eval id, start and end time and cost in USD (conversation results are no","description":"List eval runs with status, end reason, target, eval id, start and end time and cost in USD (conversation results are not returned). Use for \"Did my last Vapi eval runs finish and what did they cost\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Case-insensitive search across eval and assistant names.","title":"Search"},"id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only the eval run with this id.","title":"Id"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Items per page (default 100; keep it small for readable answers).","title":"Limit"},"sort_order":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort order: ASC or DESC (default DESC).","title":"Sort Order"}},"title":"list_eval_runsArguments","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_simulations":{"post":{"operationId":"list_simulations","summary":"List simulations (a scenario paired with a tester personality) with name, scenario id, personality id and folder path. U","description":"List simulations (a scenario paired with a tester personality) with name, scenario id, personality id and folder path. Use for \"Which Vapi simulations do I have and which scenarios do they use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"standalone_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to hide simulations that belong to a suite.","title":"Standalone Only"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Items per page (default 100; keep it small for readable answers).","title":"Limit"},"sort_order":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort order: ASC or DESC (default DESC).","title":"Sort Order"},"created_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items created after this ISO 8601 time, for example 2026-01-01T00:00:00Z.","title":"Created After"},"created_before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items created before this ISO 8601 time.","title":"Created Before"}},"title":"list_simulationsArguments","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_simulation_scenarios":{"post":{"operationId":"list_simulation_scenarios","summary":"List simulation scenarios (the script a tester follows) with name, instructions, folder path and timestamps. Use for \"Wh","description":"List simulation scenarios (the script a tester follows) with name, instructions, folder path and timestamps. Use for \"What scenarios can I simulate against my Vapi assistant\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Search by scenario name.","title":"Name"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Items per page (default 100; keep it small for readable answers).","title":"Limit"},"sort_order":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort order: ASC or DESC (default DESC).","title":"Sort Order"},"created_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items created after this ISO 8601 time, for example 2026-01-01T00:00:00Z.","title":"Created After"},"created_before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items created before this ISO 8601 time.","title":"Created Before"}},"title":"list_simulation_scenariosArguments","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_simulation_personalities":{"post":{"operationId":"list_simulation_personalities","summary":"List tester personalities used in simulations (your own and Vapi defaults) with name, folder path and timestamps. Use fo","description":"List tester personalities used in simulations (your own and Vapi defaults) with name, folder path and timestamps. Use for \"Which tester personalities exist for Vapi simulations\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Items per page (default 100; keep it small for readable answers).","title":"Limit"},"sort_order":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort order: ASC or DESC (default DESC).","title":"Sort Order"}},"title":"list_simulation_personalitiesArguments","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_simulation_suites":{"post":{"operationId":"list_simulation_suites","summary":"List simulation suites with name, the simulation ids they contain, assigned assistants or squads and folder path. Use fo","description":"List simulation suites with name, the simulation ids they contain, assigned assistants or squads and folder path. Use for \"Which simulation suites do I have in Vapi\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Search by suite name.","title":"Name"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Items per page (default 100; keep it small for readable answers).","title":"Limit"},"sort_order":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort order: ASC or DESC (default DESC).","title":"Sort Order"}},"title":"list_simulation_suitesArguments","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_simulation_runs":{"post":{"operationId":"list_simulation_runs","summary":"List simulation runs with status, target, per-status item counts (passed, failed, running, queued), iterations and start","description":"List simulation runs with status, target, per-status item counts (passed, failed, running, queued), iterations and start and end time. Use for \"How did my latest Vapi simulation runs go\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only runs with this status, for example queued, running or ended.","title":"Status"},"target_type":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only runs against this target type, for example assistant or squad.","title":"Target Type"},"target_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only runs against this assistant or squad id.","title":"Target Id"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Items per page (default 100; keep it small for readable answers).","title":"Limit"},"sort_order":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort order: ASC or DESC (default DESC).","title":"Sort Order"}},"title":"list_simulation_runsArguments","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_simulation_concurrency":{"post":{"operationId":"get_simulation_concurrency","summary":"Show the organization's simulation concurrency limit, call slots in use and how many voice simulations can start now. Us","description":"Show the organization's simulation concurrency limit, call slots in use and how many voice simulations can start now. Use for \"How many Vapi simulations can I start right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_simulation_concurrencyArguments","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}}}}