openapi: 3.0.3 info: title: Persona API description: >- The Persona API is a configurable identity platform for KYC, KYB, AML, and fraud prevention. It exposes Inquiries, Inquiry Sessions, Accounts, Verifications, Reports, Cases, Transactions, Devices, Documents, Webhooks, Events, Importers, and Workflow Runs. All resources follow the JSON:API media type conventions: request and response payloads are wrapped in a top-level `data` object with `type`, `id`, `attributes`, and `relationships` members. Requests are authenticated with a Bearer API key. Two optional headers shape every request: `Persona-Version` pins the API version to a date (e.g. `2023-01-05`), and `Key-Inflection` selects the casing of JSON keys (`camel`, `kebab`, or `snake`). Idempotency is supported via the `Idempotency-Key` header. termsOfService: https://withpersona.com/legal/terms-of-service contact: name: Persona Support url: https://help.withpersona.com email: support@withpersona.com version: '2023-01-05' servers: - url: https://api.withpersona.com/api/v1 description: Production security: - bearerAuth: [] tags: - name: Inquiries description: Instances of an individual verifying their identity against a template. - name: Inquiry Sessions description: Individual sessions within an Inquiry. - name: Accounts description: Persistent end-user records across Inquiries. - name: Verifications description: Individual identity checks (government ID, selfie, database, document, phone, email). - name: Reports description: Watchlist, adverse-media, PEP, and business lookups. - name: Cases description: Grouped Persona objects for manual review. - name: Transactions description: Risk-scored events for ongoing fraud monitoring. - name: Devices description: Device-intelligence records. - name: Documents description: Files collected during verification. - name: Webhooks description: Webhook subscriptions that deliver Persona events. - name: Events description: Immutable record of everything that happens in an account. - name: Importers description: Bulk-load data into Persona lists. - name: Workflows description: Automation runs triggered by verification results or events. paths: /inquiries: get: operationId: listAllInquiries tags: [Inquiries] summary: List all Inquiries description: Returns a paginated list of your organization's Inquiries in reverse chronological order. parameters: - $ref: '#/components/parameters/PageAfter' - $ref: '#/components/parameters/PageBefore' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/PersonaVersion' - $ref: '#/components/parameters/KeyInflection' responses: '200': description: A list of Inquiries. content: application/json: schema: $ref: '#/components/schemas/InquiryList' post: operationId: createInquiry tags: [Inquiries] summary: Create an Inquiry description: Creates a new Inquiry, optionally pre-filling attributes and auto-creating an Account or Session. parameters: - $ref: '#/components/parameters/PersonaVersion' - $ref: '#/components/parameters/KeyInflection' - $ref: '#/components/parameters/IdempotencyKey' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InquiryCreateRequest' responses: '201': description: The created Inquiry. content: application/json: schema: $ref: '#/components/schemas/InquiryResource' /inquiries/{inquiry-id}: parameters: - $ref: '#/components/parameters/InquiryId' get: operationId: retrieveInquiry tags: [Inquiries] summary: Retrieve an Inquiry description: Retrieves the details of an existing Inquiry. parameters: - $ref: '#/components/parameters/PersonaVersion' - $ref: '#/components/parameters/KeyInflection' responses: '200': description: The requested Inquiry. content: application/json: schema: $ref: '#/components/schemas/InquiryResource' patch: operationId: updateInquiry tags: [Inquiries] summary: Update an Inquiry description: Updates fields on an existing Inquiry. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InquiryUpdateRequest' responses: '200': description: The updated Inquiry. content: application/json: schema: $ref: '#/components/schemas/InquiryResource' /inquiries/{inquiry-id}/approve: parameters: - $ref: '#/components/parameters/InquiryId' post: operationId: approveInquiry tags: [Inquiries] summary: Approve an Inquiry description: Approves an Inquiry that is in a completed or needs-review state. responses: '200': description: The approved Inquiry. content: application/json: schema: $ref: '#/components/schemas/InquiryResource' /inquiries/{inquiry-id}/decline: parameters: - $ref: '#/components/parameters/InquiryId' post: operationId: declineInquiry tags: [Inquiries] summary: Decline an Inquiry description: Declines an Inquiry. responses: '200': description: The declined Inquiry. content: application/json: schema: $ref: '#/components/schemas/InquiryResource' /inquiries/{inquiry-id}/mark-for-review: parameters: - $ref: '#/components/parameters/InquiryId' post: operationId: markInquiryForReview tags: [Inquiries] summary: Mark an Inquiry for manual review responses: '200': description: The Inquiry marked for review. content: application/json: schema: $ref: '#/components/schemas/InquiryResource' /inquiries/{inquiry-id}/expire: parameters: - $ref: '#/components/parameters/InquiryId' post: operationId: expireInquiry tags: [Inquiries] summary: Expire an Inquiry responses: '200': description: The expired Inquiry. content: application/json: schema: $ref: '#/components/schemas/InquiryResource' /inquiries/{inquiry-id}/resume: parameters: - $ref: '#/components/parameters/InquiryId' post: operationId: resumeInquiry tags: [Inquiries] summary: Resume an Inquiry description: Resumes an Inquiry and returns a session token to continue the flow. responses: '200': description: The resumed Inquiry with a session token in meta. content: application/json: schema: $ref: '#/components/schemas/InquiryResource' /inquiries/{inquiry-id}/generate-one-time-link: parameters: - $ref: '#/components/parameters/InquiryId' post: operationId: generateInquiryOneTimeLink tags: [Inquiries] summary: Generate a one-time link for an Inquiry responses: '200': description: The Inquiry with a one-time link in meta. content: application/json: schema: $ref: '#/components/schemas/InquiryResource' /inquiries/{inquiry-id}:redact: parameters: - $ref: '#/components/parameters/InquiryId' delete: operationId: redactInquiry tags: [Inquiries] summary: Redact an Inquiry description: Permanently redacts personally identifiable information from an Inquiry. responses: '200': description: The redacted Inquiry. content: application/json: schema: $ref: '#/components/schemas/InquiryResource' /inquiry-sessions: get: operationId: listAllInquirySessions tags: [Inquiry Sessions] summary: List all Inquiry Sessions parameters: - $ref: '#/components/parameters/PageAfter' - $ref: '#/components/parameters/PageSize' responses: '200': description: A list of Inquiry Sessions. content: application/json: schema: $ref: '#/components/schemas/GenericList' post: operationId: createInquirySession tags: [Inquiry Sessions] summary: Create an Inquiry Session requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GenericResource' responses: '201': description: The created Inquiry Session. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /inquiry-sessions/{inquiry-session-id}: parameters: - name: inquiry-session-id in: path required: true schema: type: string get: operationId: retrieveInquirySession tags: [Inquiry Sessions] summary: Retrieve an Inquiry Session responses: '200': description: The requested Inquiry Session. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /inquiry-sessions/{inquiry-session-id}/expire: parameters: - name: inquiry-session-id in: path required: true schema: type: string post: operationId: expireInquirySession tags: [Inquiry Sessions] summary: Expire an Inquiry Session responses: '200': description: The expired Inquiry Session. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /accounts: get: operationId: listAllAccounts tags: [Accounts] summary: List all Accounts description: Retrieves a list of your organization's Accounts in reverse chronological order. parameters: - $ref: '#/components/parameters/PageAfter' - $ref: '#/components/parameters/PageBefore' - $ref: '#/components/parameters/PageSize' - name: filter[reference-id] in: query schema: type: string description: Filter Accounts by reference ID. - $ref: '#/components/parameters/PersonaVersion' - $ref: '#/components/parameters/KeyInflection' responses: '200': description: A list of Accounts. content: application/json: schema: $ref: '#/components/schemas/GenericList' post: operationId: createAccount tags: [Accounts] summary: Create an Account requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GenericResource' responses: '201': description: The created Account. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /accounts/{account-id}: parameters: - name: account-id in: path required: true schema: type: string get: operationId: retrieveAccount tags: [Accounts] summary: Retrieve an Account responses: '200': description: The requested Account. content: application/json: schema: $ref: '#/components/schemas/GenericResource' patch: operationId: updateAccount tags: [Accounts] summary: Update an Account requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GenericResource' responses: '200': description: The updated Account. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /accounts/{account-id}/consolidate: parameters: - name: account-id in: path required: true schema: type: string post: operationId: consolidateAccounts tags: [Accounts] summary: Consolidate Accounts into an Account responses: '200': description: The consolidated Account. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /verifications/{verification-id}: parameters: - name: verification-id in: path required: true schema: type: string get: operationId: retrieveVerification tags: [Verifications] summary: Retrieve a Verification description: >- Retrieves an existing Verification of any type - government ID, government ID NFC, selfie, document, phone number, email address, or database (AAMVA, eCBSV, TIN, phone carrier, business, standard). parameters: - $ref: '#/components/parameters/PersonaVersion' - $ref: '#/components/parameters/KeyInflection' responses: '200': description: The requested Verification. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /reports: get: operationId: listAllReports tags: [Reports] summary: List all Reports parameters: - $ref: '#/components/parameters/PageAfter' - $ref: '#/components/parameters/PageSize' responses: '200': description: A list of Reports. content: application/json: schema: $ref: '#/components/schemas/GenericList' post: operationId: createReport tags: [Reports] summary: Create a Report description: Runs a watchlist, adverse-media, PEP, or business lookup Report. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GenericResource' responses: '201': description: The created Report. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /reports/{report-id}: parameters: - name: report-id in: path required: true schema: type: string get: operationId: retrieveReport tags: [Reports] summary: Retrieve a Report responses: '200': description: The requested Report. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /cases: get: operationId: listAllCases tags: [Cases] summary: List all Cases parameters: - $ref: '#/components/parameters/PageAfter' - $ref: '#/components/parameters/PageSize' responses: '200': description: A list of Cases. content: application/json: schema: $ref: '#/components/schemas/GenericList' post: operationId: createCase tags: [Cases] summary: Create a Case requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GenericResource' responses: '201': description: The created Case. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /cases/{case-id}: parameters: - name: case-id in: path required: true schema: type: string get: operationId: retrieveCase tags: [Cases] summary: Retrieve a Case responses: '200': description: The requested Case. content: application/json: schema: $ref: '#/components/schemas/GenericResource' patch: operationId: updateCase tags: [Cases] summary: Update a Case requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GenericResource' responses: '200': description: The updated Case. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /cases/{case-id}/assign: parameters: - name: case-id in: path required: true schema: type: string post: operationId: assignCase tags: [Cases] summary: Assign a Case responses: '200': description: The assigned Case. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /transactions: get: operationId: listAllTransactions tags: [Transactions] summary: List all Transactions parameters: - $ref: '#/components/parameters/PageAfter' - $ref: '#/components/parameters/PageSize' responses: '200': description: A list of Transactions. content: application/json: schema: $ref: '#/components/schemas/GenericList' post: operationId: createTransaction tags: [Transactions] summary: Create a Transaction requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GenericResource' responses: '201': description: The created Transaction. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /transactions/{transaction-id}: parameters: - name: transaction-id in: path required: true schema: type: string get: operationId: retrieveTransaction tags: [Transactions] summary: Retrieve a Transaction responses: '200': description: The requested Transaction. content: application/json: schema: $ref: '#/components/schemas/GenericResource' patch: operationId: updateTransaction tags: [Transactions] summary: Update a Transaction requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GenericResource' responses: '200': description: The updated Transaction. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /devices: get: operationId: listAllDevices tags: [Devices] summary: List all Devices parameters: - $ref: '#/components/parameters/PageAfter' - $ref: '#/components/parameters/PageSize' responses: '200': description: A list of Devices. content: application/json: schema: $ref: '#/components/schemas/GenericList' /devices/{device-id}: parameters: - name: device-id in: path required: true schema: type: string get: operationId: retrieveDevice tags: [Devices] summary: Retrieve a Device responses: '200': description: The requested Device. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /documents/{document-id}: parameters: - name: document-id in: path required: true schema: type: string get: operationId: retrieveDocument tags: [Documents] summary: Retrieve a Document description: Retrieves a Document collected during verification (generic or government-ID document). responses: '200': description: The requested Document. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /webhooks: get: operationId: listAllWebhooks tags: [Webhooks] summary: List all Webhooks parameters: - $ref: '#/components/parameters/PageAfter' - $ref: '#/components/parameters/PageSize' responses: '200': description: A list of Webhooks. content: application/json: schema: $ref: '#/components/schemas/GenericList' post: operationId: createWebhook tags: [Webhooks] summary: Create a Webhook requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GenericResource' responses: '201': description: The created Webhook. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /webhooks/{webhook-id}: parameters: - name: webhook-id in: path required: true schema: type: string get: operationId: retrieveWebhook tags: [Webhooks] summary: Retrieve a Webhook responses: '200': description: The requested Webhook. content: application/json: schema: $ref: '#/components/schemas/GenericResource' patch: operationId: updateWebhook tags: [Webhooks] summary: Update a Webhook requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GenericResource' responses: '200': description: The updated Webhook. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /webhooks/{webhook-id}/enable: parameters: - name: webhook-id in: path required: true schema: type: string post: operationId: enableWebhook tags: [Webhooks] summary: Enable a Webhook responses: '200': description: The enabled Webhook. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /webhooks/{webhook-id}/disable: parameters: - name: webhook-id in: path required: true schema: type: string post: operationId: disableWebhook tags: [Webhooks] summary: Disable a Webhook responses: '200': description: The disabled Webhook. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /events: get: operationId: listAllEvents tags: [Events] summary: List all Events description: Returns the queryable record of everything that has happened in your account. parameters: - $ref: '#/components/parameters/PageAfter' - $ref: '#/components/parameters/PageSize' responses: '200': description: A list of Events. content: application/json: schema: $ref: '#/components/schemas/GenericList' /events/{event-id}: parameters: - name: event-id in: path required: true schema: type: string get: operationId: retrieveEvent tags: [Events] summary: Retrieve an Event responses: '200': description: The requested Event. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /importer: get: operationId: listAllImporters tags: [Importers] summary: List all Importers parameters: - $ref: '#/components/parameters/PageAfter' - $ref: '#/components/parameters/PageSize' responses: '200': description: A list of Importers. content: application/json: schema: $ref: '#/components/schemas/GenericList' /importer/{importer-id}: parameters: - name: importer-id in: path required: true schema: type: string get: operationId: retrieveImporter tags: [Importers] summary: Retrieve an Importer responses: '200': description: The requested Importer. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /workflow-runs: get: operationId: listAllWorkflowRuns tags: [Workflows] summary: List all Workflow Runs parameters: - $ref: '#/components/parameters/PageAfter' - $ref: '#/components/parameters/PageSize' responses: '200': description: A list of Workflow Runs. content: application/json: schema: $ref: '#/components/schemas/GenericList' post: operationId: createWorkflowRun tags: [Workflows] summary: Create a Workflow Run requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/GenericResource' responses: '201': description: The created Workflow Run. content: application/json: schema: $ref: '#/components/schemas/GenericResource' /workflow-runs/{workflow-run-id}: parameters: - name: workflow-run-id in: path required: true schema: type: string get: operationId: retrieveWorkflowRun tags: [Workflows] summary: Retrieve a Workflow Run responses: '200': description: The requested Workflow Run. content: application/json: schema: $ref: '#/components/schemas/GenericResource' components: securitySchemes: bearerAuth: type: http scheme: bearer description: Persona API key passed as a Bearer token in the Authorization header. parameters: InquiryId: name: inquiry-id in: path required: true description: The unique identifier of the Inquiry. schema: type: string PersonaVersion: name: Persona-Version in: header required: false description: Pins the API version to a release date, e.g. 2023-01-05. schema: type: string example: '2023-01-05' KeyInflection: name: Key-Inflection in: header required: false description: Controls the casing of JSON keys in requests and responses. schema: type: string enum: [camel, kebab, snake] IdempotencyKey: name: Idempotency-Key in: header required: false description: A unique key to safely retry a request without duplicating the operation. schema: type: string PageAfter: name: page[after] in: query required: false description: Cursor for the object after which to start the page. schema: type: string PageBefore: name: page[before] in: query required: false description: Cursor for the object before which to end the page. schema: type: string PageSize: name: page[size] in: query required: false description: Number of results per page (max 100). schema: type: integer default: 10 maximum: 100 schemas: ResourceObject: type: object description: A JSON:API resource object. properties: type: type: string id: type: string attributes: type: object additionalProperties: true relationships: type: object additionalProperties: true GenericResource: type: object description: A JSON:API document wrapping a single resource. properties: data: $ref: '#/components/schemas/ResourceObject' included: type: array items: $ref: '#/components/schemas/ResourceObject' meta: type: object additionalProperties: true GenericList: type: object description: A JSON:API document wrapping a collection of resources. properties: data: type: array items: $ref: '#/components/schemas/ResourceObject' links: type: object properties: prev: type: string nullable: true next: type: string nullable: true InquiryAttributes: type: object properties: status: type: string description: The current state of the Inquiry (e.g. created, pending, completed, approved, declined, expired). example: completed reference-id: type: string nullable: true created-at: type: string format: date-time completed-at: type: string format: date-time nullable: true fields: type: object additionalProperties: true tags: type: array items: type: string InquiryResourceObject: allOf: - $ref: '#/components/schemas/ResourceObject' - type: object properties: type: type: string example: inquiry attributes: $ref: '#/components/schemas/InquiryAttributes' InquiryResource: type: object properties: data: $ref: '#/components/schemas/InquiryResourceObject' included: type: array items: $ref: '#/components/schemas/ResourceObject' meta: type: object additionalProperties: true InquiryList: type: object properties: data: type: array items: $ref: '#/components/schemas/InquiryResourceObject' links: type: object properties: prev: type: string nullable: true next: type: string nullable: true InquiryCreateRequest: type: object required: [data] properties: data: type: object properties: attributes: type: object properties: inquiry-template-id: type: string description: The template that defines the verification flow. example: itmpl_ABC123 reference-id: type: string fields: type: object additionalProperties: true tags: type: array items: type: string meta: type: object properties: auto-create-account: type: boolean auto-create-inquiry-session: type: boolean InquiryUpdateRequest: type: object required: [data] properties: data: type: object properties: attributes: type: object properties: fields: type: object additionalProperties: true note: type: string