{"openapi":"3.1.0","info":{"title":"Percy (BYOK) API","version":"0.1.0","description":"Percy (BYOK) lets an AI assistant read your own Percy data through the Percy API with a key you supply (Percy read-only project token). Read-only: 5 tools (get_project, list_builds, get_build, list_snapshots, get_snapshot). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever sent to percy.io. Unofficial connector by Unify...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-percy.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-percy/docs"},"termsOfService":"https://connectorbay.com/byok-percy/terms"},"servers":[{"url":"https://byok-percy.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-percy/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/get_project":{"post":{"operationId":"get_project","summary":"Show the Percy project the token belongs to: name, slug, type, default base branch, workflow, usage this period and scre","description":"Show the Percy project the token belongs to: name, slug, type, default base branch, workflow, usage this period and screenshot limit. Use for \"Which Percy project is my token for, and how much have I used\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_projectArguments","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_builds":{"post":{"operationId":"list_builds","summary":"List recent Percy builds (last 30 days, newest first) with branch, state, review state, snapshot and comparison counts a","description":"List recent Percy builds (last 30 days, newest first) with branch, state, review state, snapshot and comparison counts and failure reason. Page with 'cursor'. Use for \"Did my recent Percy builds pass review\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"branch":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only builds of this branch.","title":"Branch"},"state":{"anyOf":[{"enum":["processing","finished","failed","waiting"],"type":"string"},{"type":"null"}],"default":null,"description":"Only builds in this state.","title":"State"},"sha":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Only builds of this commit SHA.","title":"Sha"},"cursor":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: the id of the last build of the previous page; returns older builds. Leave out for the first page.","title":"Cursor"},"limit":{"anyOf":[{"maximum":30,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"Items per page (1 to 30, default 30).","title":"Limit"}},"title":"list_buildsArguments","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_build":{"post":{"operationId":"get_build","summary":"Get one Percy build by id: branch, state, review state, snapshot and comparison counts, failure reason and timings. Use ","description":"Get one Percy build by id: branch, state, review state, snapshot and comparison counts, failure reason and timings. Use for \"Show details of this Percy build\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"build_id":{"description":"Percy build id, as returned by list_builds.","maxLength":20,"title":"Build Id","type":"string"}},"required":["build_id"],"title":"get_buildArguments","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_snapshots":{"post":{"operationId":"list_snapshots","summary":"List the snapshots of a Percy build with name, review state, open comment count and test case. Page with 'cursor'. Use f","description":"List the snapshots of a Percy build with name, review state, open comment count and test case. Page with 'cursor'. Use for \"Which snapshots of this Percy build need review\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"build_id":{"description":"Percy build id, as returned by list_builds.","maxLength":20,"title":"Build Id","type":"string"},"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only snapshots whose name matches this text.","title":"Search"},"cursor":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Paging cursor: the id of the last snapshot of the previous page. Leave out for the first page.","title":"Cursor"},"limit":{"anyOf":[{"maximum":30,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"Items per page (1 to 30, default 30).","title":"Limit"}},"required":["build_id"],"title":"list_snapshotsArguments","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_snapshot":{"post":{"operationId":"get_snapshot","summary":"Get one Percy snapshot by id: name, review state and reason, open comments and rendering options. Use for \"Show details ","description":"Get one Percy snapshot by id: name, review state and reason, open comments and rendering options. Use for \"Show details of this Percy snapshot\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"snapshot_id":{"description":"Percy snapshot id, as returned by list_snapshots.","maxLength":20,"title":"Snapshot Id","type":"string"}},"required":["snapshot_id"],"title":"get_snapshotArguments","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}}}}