{"openapi":"3.1.0","info":{"title":"Bland AI Pathway Testing (BYOK) API","version":"0.1.0","description":"Bland AI Pathway Testing (BYOK) lets an AI assistant read your own Bland AI Pathway Testing data through the Bland AI Pathway Testing API with a key you supply (API key). Read-only: 5 tools (list_test_scenarios, list_test_runs, get_test_batch, get_test_analytics, list_pathway_versions). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached;...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-bland-pathway-testing.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-bland-pathway-testing/docs"},"termsOfService":"https://connectorbay.com/byok-bland-pathway-testing/terms"},"servers":[{"url":"https://byok-bland-pathway-testing.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-bland-pathway-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_test_scenarios":{"post":{"operationId":"list_test_scenarios","summary":"List pathway or persona test scenarios with name, category, type, max turns, enabled flag, promotion requirement and the","description":"List pathway or persona test scenarios with name, category, type, max turns, enabled flag, promotion requirement and the most recent run (simulated caller prompts are not returned). Use for \"Which Bland test scenarios exist for one of my pathways and did they pass last time\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"pathway_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only scenarios for this pathway id.","title":"Pathway Id"},"persona_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only scenarios for this persona id.","title":"Persona Id"},"category":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only scenarios of this category.","title":"Category"},"enabled":{"anyOf":[{"enum":["true","false"],"type":"string"},{"type":"null"}],"default":null,"description":"Only enabled or only disabled scenarios.","title":"Enabled"}},"title":"list_test_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_test_runs":{"post":{"operationId":"list_test_runs","summary":"List pathway test runs with status, overall score, turns, duration, scenario name and assertion results; filter by scena","description":"List pathway test runs with status, overall score, turns, duration, scenario name and assertion results; filter by scenario, pathway, persona, batch or status. Page size up to 100. Use for \"Which Bland test runs failed for my pathway\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"scenario_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only runs of this scenario id.","title":"Scenario Id"},"pathway_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only runs for this pathway id.","title":"Pathway Id"},"persona_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only runs for this persona id.","title":"Persona Id"},"batch_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only runs of this batch id.","title":"Batch Id"},"status":{"anyOf":[{"enum":["PENDING","RUNNING","PASSED","FAILED","ERROR","CANCELLED"],"type":"string"},{"type":"null"}],"default":null,"description":"Only runs with this status.","title":"Status"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Runs per page (1 to 100, default 50).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of runs to skip, for paging.","title":"Offset"}},"title":"list_test_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_test_batch":{"post":{"operationId":"get_test_batch","summary":"Get one test batch: overall status, total, passed and failed scenario counts, trigger source and whether it publishes on","description":"Get one test batch: overall status, total, passed and failed scenario counts, trigger source and whether it publishes on pass. Use for \"Did this Bland test batch pass\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"batch_id":{"description":"Test batch id from a batch run or list_test_runs.","maxLength":100,"title":"Batch Id","type":"string"}},"required":["batch_id"],"title":"get_test_batchArguments","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_test_analytics":{"post":{"operationId":"get_test_analytics","summary":"Get pass rate analytics for one pathway over a time window: total, passed and failed runs, pass rate, average score and ","description":"Get pass rate analytics for one pathway over a time window: total, passed and failed runs, pass rate, average score and run summaries. Use for \"What is the test pass rate of my Bland pathway over the last 30 days\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"pathway_id":{"description":"Pathway id.","maxLength":100,"title":"Pathway Id","type":"string"},"days":{"anyOf":[{"maximum":365,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"Days to look back (1 to 365, default 30).","title":"Days"}},"required":["pathway_id"],"title":"get_test_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}},"/v1/tools/list_pathway_versions":{"post":{"operationId":"list_pathway_versions","summary":"List the versions of one conversational pathway with version number, name, creation time and whether it is the latest. U","description":"List the versions of one conversational pathway with version number, name, creation time and whether it is the latest. Use for \"What versions does my Bland pathway have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"pathway_id":{"description":"Pathway id.","maxLength":100,"title":"Pathway Id","type":"string"}},"required":["pathway_id"],"title":"list_pathway_versionsArguments","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}}}}