{"openapi":"3.1.0","info":{"title":"Persona (BYOK) API","version":"0.1.0","description":"Persona (BYOK) lets an AI assistant read your own Persona data through the Persona API with a key you supply (Persona API key). Read-only: 9 tools (list_inquiries, get_inquiry, list_inquiry_templates, list_cases, list_workflow_runs, list_events, list_lists, list_webhooks, get_rate_limits). The BYOK key travels with each request, is used for that one call only and is never stored, logged or...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-persona.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-persona/docs"},"termsOfService":"https://connectorbay.com/byok-persona/terms"},"servers":[{"url":"https://byok-persona.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-persona/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_inquiries":{"post":{"operationId":"list_inquiries","summary":"List identity verification inquiries, newest first, with status, template, tags and key timestamps. Personal details in ","description":"List identity verification inquiries, newest first, with status, template, tags and key timestamps. Personal details in the inquiry (names, addresses, ID numbers) are not returned by this tool. Use for \"Which Persona inquiries are waiting for review\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only inquiries with this status; comma-separate several: created, pending, completed, expired, failed, needs_review, approved, declined.","title":"Status"},"inquiry_template_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only inquiries of this inquiry template (an ID starting with itmpl_).","title":"Inquiry Template Id"},"created_at_start":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only inquiries created at or after this ISO 8601 time, for example 2026-10-01T00:00:00Z.","title":"Created At Start"},"created_at_end":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only inquiries created at or before this ISO 8601 time.","title":"Created At End"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many results to return per page (1 to 100, default 10).","title":"Page Size"},"page_after":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Object ID of the last item of the previous page (the cursor); leave empty for the first page.","title":"Page After"}},"title":"list_inquiriesArguments","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_inquiry":{"post":{"operationId":"get_inquiry","summary":"Get one inquiry by ID: status, template, tags and timestamps. Personal details are not returned by this tool. Use for \"W","description":"Get one inquiry by ID: status, template, tags and timestamps. Personal details are not returned by this tool. Use for \"What is the status of Persona inquiry inq_zEx4jL84ShbUyuwX6AzPSqt6\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"inquiry_id":{"description":"Inquiry ID starting with inq_.","maxLength":200,"title":"Inquiry Id","type":"string"}},"required":["inquiry_id"],"title":"get_inquiryArguments","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_inquiry_templates":{"post":{"operationId":"list_inquiry_templates","summary":"List the inquiry templates (verification flows) of the organization with name, status and allowed domains. Needs a produ","description":"List the inquiry templates (verification flows) of the organization with name, status and allowed domains. Needs a production key. Use for \"Which inquiry templates do we have in Persona and are they active\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many results to return per page (1 to 100, default 10).","title":"Page Size"},"page_after":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Object ID of the last item of the previous page (the cursor); leave empty for the first page.","title":"Page After"}},"title":"list_inquiry_templatesArguments","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_cases":{"post":{"operationId":"list_cases","summary":"List review cases with name, status, resolution, assignment and SLA timestamps. Case fields (which may hold personal dat","description":"List review cases with name, status, resolution, assignment and SLA timestamps. Case fields (which may hold personal data) are not returned by this tool. Use for \"Which Persona cases are still open\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only cases with this status.","title":"Status"},"case_template_id":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only cases of this case template ID.","title":"Case Template Id"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many results to return per page (1 to 100, default 10).","title":"Page Size"},"page_after":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Object ID of the last item of the previous page (the cursor); leave empty for the first page.","title":"Page After"}},"title":"list_casesArguments","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_workflow_runs":{"post":{"operationId":"list_workflow_runs","summary":"List workflow runs (automated decisioning) with status, completion time and processing time. Use for \"Did the latest Per","description":"List workflow runs (automated decisioning) with status, completion time and processing time. Use for \"Did the latest Persona workflow runs finish successfully\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only workflow runs with this status.","title":"Status"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many results to return per page (1 to 100, default 10).","title":"Page Size"},"page_after":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Object ID of the last item of the previous page (the cursor); leave empty for the first page.","title":"Page After"}},"title":"list_workflow_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_events":{"post":{"operationId":"list_events","summary":"List recent events (such as inquiry.completed or inquiry.expired) with name, time and the type and ID of the object they","description":"List recent events (such as inquiry.completed or inquiry.expired) with name, time and the type and ID of the object they concern. Event payloads are not returned by this tool. Use for \"Which inquiry.expired events happened recently in Persona\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only events with this name; comma-separate several, for example 'inquiry.completed,inquiry.expired'.","title":"Name"},"object_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only events about this object ID.","title":"Object Id"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many results to return per page (1 to 100, default 10).","title":"Page Size"},"page_after":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Object ID of the last item of the previous page (the cursor); leave empty for the first page.","title":"Page After"}},"title":"list_eventsArguments","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_lists":{"post":{"operationId":"list_lists","summary":"List the allow and block lists used during verification (countries, IP addresses, devices and so on) with name, status a","description":"List the allow and block lists used during verification (countries, IP addresses, devices and so on) with name, status and dates. List items are not returned. Use for \"Which block lists do we have in Persona\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"enum":["active","archived"],"type":"string"},{"type":"null"}],"default":null,"description":"Only lists with this status.","title":"Status"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many results to return per page (1 to 100, default 10).","title":"Page Size"},"page_after":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Object ID of the last item of the previous page (the cursor); leave empty for the first page.","title":"Page After"}},"title":"list_listsArguments","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_webhooks":{"post":{"operationId":"list_webhooks","summary":"List webhook endpoints with name, URL, status, API version and the events they receive. Use for \"Where does Persona send","description":"List webhook endpoints with name, URL, status, API version and the events they receive. Use for \"Where does Persona send webhooks and for which events\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many results to return per page (1 to 100, default 10).","title":"Page Size"},"page_after":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Object ID of the last item of the previous page (the cursor); leave empty for the first page.","title":"Page After"}},"title":"list_webhooksArguments","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_rate_limits":{"post":{"operationId":"get_rate_limits","summary":"Show the API rate limit of the key: requests allowed, remaining in the current window, and seconds until reset. Use for ","description":"Show the API rate limit of the key: requests allowed, remaining in the current window, and seconds until reset. Use for \"How many Persona API calls do I have left in this minute\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_rate_limitsArguments","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}}}}