All integrations

Persona

SECURITY · DEVELOPER

Inquiries, verifications, reports, and cases on the account they connected.

Acts as the person, not as itself

Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.

Credentials never touch the agent

Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.

Every call on the record

Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.

What an agent can do

Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.

persona_delete_accounts_by_account_idWRITE

Permanently deletes personally identifiable information (PII) for an Account and all associated Inquiries, Verifications and Reports. The response indicates a successful redaction of the Account. Redaction of the Account's associated child objects is done asynchronously and may take some time before all associated child objects are fully redacted. **This action cannot be undone**. This endpoint can be used to comply with privacy regulations such as GDPR / CCPA or to enforce data privacy. Note: An account is still updatable after redaction. If you want to delete data continuously, please reach out to us to help you setup a retention policy. via DELETE /accounts/{account-id}

account.write
persona_delete_cases_by_case_idWRITE

Permanently redacts a Case and its fields. Case objects must be redacted individually. **This action cannot be undone**. via DELETE /cases/{case-id}

case.write
persona_delete_inquiries_by_inquiry_idWRITE

Permanently deletes personally identifiable information (PII) for an Inquiry and all associated Verifications, Reports, or other Persona resources. The response indicates a successful redaction of the Inquiry. Redaction of the Inquiry's associated child objects are done asynchronously and may take some time before all associated child objects are fully redacted. **This action cannot be undone**. This endpoint can be used to comply with privacy regulations such as GDPR / CCPA or to enforce data privacy. via DELETE /inquiries/{inquiry-id}

inquiry.write
persona_delete_list_item_browser_fingerprints_by_list_item_idWRITE

Archived items are not matched against new inquiries. via DELETE /list-item/browser-fingerprints/{list-item-id}

list.write
persona_delete_list_item_countries_by_list_item_idWRITE

Archived items are not matched against new inquiries. via DELETE /list-item/countries/{list-item-id}

list.write
persona_delete_list_item_device_fingerprints_by_list_item_idWRITE

Archived items are not matched against new inquiries. via DELETE /list-item/device-fingerprints/{list-item-id}

list.write
persona_delete_list_item_email_addresses_by_list_item_idWRITE

Archived items are not matched against new inquiries. via DELETE /list-item/email-addresses/{list-item-id}

list.write
persona_delete_list_item_fields_by_list_item_idWRITE

Archived items are not matched against new inquiries. via DELETE /list-item/fields/{list-item-id}

list.write
persona_delete_list_item_geolocations_by_list_item_idWRITE

Archived items are not matched against new inquiries. via DELETE /list-item/geolocations/{list-item-id}

list.write
persona_delete_list_item_government_id_numbers_by_list_item_idWRITE

Archived items are not matched against new inquiries. via DELETE /list-item/government-id-numbers/{list-item-id}

list.write
persona_delete_list_item_ip_addresses_by_list_item_idWRITE

Archived items are not matched against new inquiries. via DELETE /list-item/ip-addresses/{list-item-id}

list.write
persona_delete_list_item_names_by_list_item_idWRITE

Archived items are not matched against new inquiries. via DELETE /list-item/names/{list-item-id}

list.write
persona_delete_list_item_phone_numbers_by_list_item_idWRITE

Archived items are not matched against new inquiries. via DELETE /list-item/phone-numbers/{list-item-id}

list.write
persona_delete_list_item_strings_by_list_item_idWRITE

Archived items are not matched against new inquiries. via DELETE /list-item/strings/{list-item-id}

list.write
persona_delete_lists_by_list_idWRITE

Archive an existing list. Archived lists are still retrievable, but will no longer match on inquiries. via DELETE /lists/{list-id}

list.write
persona_delete_reports_by_report_idWRITE

Permanently deletes personally identifiable information (PII) for a Report. This endpoint can be used to comply with privacy regulations such as GDPR / CCPA or to enforce data privacy. Note that this will only delete the report -- it does not delete associated accounts, inquiries, verifications, or other Persona resources. via DELETE /reports/{report-id}

report.write
persona_delete_theme_sets_by_theme_set_idWRITE

Archive an existing theme set. Archived theme sets are still retrievable, but can no longer be assigned to inquiry templates. Archiving also detaches the theme set from any inquiry templates it is assigned to — live flows fall back to default styling. The organization's default theme set cannot be archived and returns a 409. via DELETE /theme-sets/{theme-set-id}

theme_set.write
persona_delete_transactions_by_transaction_idWRITE

Permanently deletes personally identifiable information (PII) for a Transaction. The response indicates a successful redaction of the Transaction. Redaction of the Transaction's associated child objects is done asynchronously and may take some time before all associated child objects are fully redacted. **This action cannot be undone**. via DELETE /transactions/{transaction-id}

transaction.write
persona_delete_verifications_by_verification_idWRITE

Permanently deletes personally identifiable information (PII) for a Verification. **This action cannot be undone**. This endpoint can be used to comply with privacy regulations such as GDPR / CCPA or to enforce data privacy. via DELETE /verifications/{verification-id}

verification.write
persona_get_account_types_by_account_type_idREAD

Retrieves the details of an existing Account Type, including its configured field schemas. via GET /account-types/{account-type-id}

account_type.read
persona_get_accountsREAD

Returns a list of your organization's account(s). Results are returned in reverse chronological order, with the most recently created objects first. via GET /accounts

account.read
persona_get_accounts_by_account_idREAD

Retrieves the details of an existing Account. via GET /accounts/{account-id}

account.read
persona_get_accounts_by_account_id_relationsREAD

Gets relations for an Account by key via GET /accounts/{account-id}/relations

account.read
persona_get_api_keysREAD

Returns a list of your organization's API keys. Results are returned in reverse chronological order, with the most recently created objects first. via GET /api-keys

api_key.read
persona_get_api_keys_by_api_key_idREAD

Retrieves the information for an existing API key. The plaintext value is only returned when creating or cloning an API key. via GET /api-keys/{api-key-id}

api_key.read
persona_get_api_logsREAD

Returns a list of your organization's API Logs. Results are returned in reverse chronological order, with the most recently created objects first. via GET /api-logs

api_log.read
persona_get_api_logs_by_api_log_idREAD

Retrieves the details of an existing API Log. via GET /api-logs/{api-log-id}

api_log.read
persona_get_case_templates_by_case_template_idREAD

Retrieves the details of an existing Case Template, including its configured field schemas. via GET /case-templates/{case-template-id}

case_template.read
persona_get_casesREAD

Returns a list of your organization's cases. Note that this endpoint aggregates cases across all case template(s). See [Pagination](https://docs.withpersona.com/pagination)for more details about handling the response. Results are returned in reverse chronological order, with the most recently created objects first. via GET /cases

case.read
persona_get_cases_by_case_idREAD

Retrieves the details of an existing Case. via GET /cases/{case-id}

case.read
persona_get_connect_connectionsREAD

Returns a list of connect connections associated with your organization, including both outbound connections your organization created and inbound connections where your organization is the destination. Results are returned in reverse chronological order, with the most recently created objects first. via GET /connect/connections

connect.read
persona_get_connect_connections_by_connection_idREAD

Retrieves the details of an existing Connection. via GET /connect/connections/{connection-id}

connect.read
persona_get_connect_share_tokensREAD

Returns a list of your organization's Share Tokens. Results are returned in reverse chronological order, with the most recently created objects first. via GET /connect/share-tokens

connect.read
persona_get_connect_share_tokens_by_share_token_idREAD

Retrieve the information for an existing Share Token. via GET /connect/share-tokens/{share-token-id}

connect.read
persona_get_devicesREAD

Retrieves a list of Devices. Results are returned in reverse chronological order, with the most recently created objects first. via GET /devices

device.read
persona_get_devices_by_device_idREAD

Retrieves details of a specific Device. via GET /devices/{device-id}

device.read
persona_get_document_generics_by_document_idREAD

Retrieves the details of a generic document that has been previously created. via GET /document/generics/{document-id}

document.read
persona_get_document_government_ids_by_document_idREAD

Retrieves the details of a government-id document that has been previously created. via GET /document/government-ids/{document-id}

document.read
persona_get_documents_by_document_idREAD

Retrieves the details of a Document. via GET /documents/{document-id}

document.read
persona_get_eventsREAD

Returns a list of your organization's events. Results are returned in reverse chronological order, with the most recently created objects first. via GET /events

event.read
persona_get_events_by_event_idREAD

Retrieves the details of an existing event. via GET /events/{event-id}

event.read
persona_get_graph_queries_by_graph_query_idREAD

Retrieve a Graph Query via GET /graph-queries/{graph-query-id}

graph_query.read
persona_get_importersREAD

Returns a list of your organization's importers. Results are returned in reverse chronological order, with the most recently created objects first. via GET /importers

importer.read
persona_get_importers_by_importer_idREAD

Retrieve the details of an existing importer. via GET /importers/{importer-id}

importer.read
persona_get_inquiriesREAD

Returns a list of your organization's inquiries. Note that this endpoint aggregates inquiries across all inquiry template(s). See [Pagination](https://docs.withpersona.com/pagination) for more details about handling the response. Results are returned in reverse chronological order, with the most recently created objects first. via GET /inquiries

inquiry.read
persona_get_inquiries_by_inquiry_idREAD

Retrieves the details of an existing Inquiry. In the [Embedded Flow](https://docs.withpersona.com/embedded-flow), the `inquiry-id` is the first parameter of the onStart callback. In the [Hosted Flow](https://docs.withpersona.com/hosted-flow), the `inquiry-id` is a query parameter in the onComplete callback. Template information will be found in `data.relationships.inquiry-template` if the inquiry is a Dynamic Flow inquiry, and in `data.relationships.template` if the inquiry is a Legacy 2.0 inquiry. For more information, see [Dynamic Flow vs. Legacy Templates](https://docs.withpersona.com/inquiry-templates#dynamic-flow-vs-legacy-templates). via GET /inquiries/{inquiry-id}

inquiry.read
persona_get_inquiry_sessionsREAD

Retrieves a list of Inquiry Sessions. Results are returned in reverse chronological order, with the most recently created objects first. via GET /inquiry-sessions

inquiry_session.read
persona_get_inquiry_sessions_by_inquiry_session_idREAD

Retrieves details of a specific Inquiry Session. via GET /inquiry-sessions/{inquiry-session-id}

inquiry_session.read
persona_get_inquiry_template_versionsREAD

Retrieves the published versions and current draft version of an Inquiry Template. Use a production API key and provide the Inquiry Template ID in `filter[inquiry-template-id]`. For security reasons, Inquiry Template Versions are not available in Sandbox. via GET /inquiry-template-versions

inquiry_template_version.read
persona_get_inquiry_templatesREAD

Retrieves a list of your organization's Inquiry Templates. Note: You must use a production API key to access this endpoint. For security reasons, we do not expose organization-level resources like Inquiry Templates in Sandbox via API. Results are returned in reverse chronological order, with the most recently created objects first. via GET /inquiry-templates

inquiry_template.read
persona_get_inquiry_templates_by_inquiry_template_idREAD

Retrieves details of a specific Inquiry Template by ID. Note: You must use a production API key to access this endpoint. For security reasons, we do not expose organization-level resources like Inquiry Templates in Sandbox via API. via GET /inquiry-templates/{inquiry-template-id}

inquiry_template.read
persona_get_inquiry_templates_by_inquiry_template_id_translationsREAD

Retrieves the translations for an Inquiry Template as a JSON:API resource. The export uses the latest draft version if one exists, otherwise falls back to the latest published version. Note: You must use a production API key to access this endpoint. For security reasons, we do not expose organization-level resources like Inquiry Templates in Sandbox via API. via GET /inquiry-templates/{inquiry-template-id}/translations

inquiry_template.read
persona_get_list_item_browser_fingerprints_by_list_item_idREAD

Retrieves the details of an existing browser fingerprint List Item. via GET /list-item/browser-fingerprints/{list-item-id}

list.read
persona_get_list_item_countries_by_list_item_idREAD

Retrieves the details of an existing country List Item. via GET /list-item/countries/{list-item-id}

list.read
persona_get_list_item_device_fingerprints_by_list_item_idREAD

Retrieves the details of an existing device fingerprint List Item. via GET /list-item/device-fingerprints/{list-item-id}

list.read
persona_get_list_item_email_addresses_by_list_item_idREAD

Retrieves the details of an existing email address List Item. via GET /list-item/email-addresses/{list-item-id}

list.read
persona_get_list_item_fields_by_list_item_idREAD

Retrieves the details of an existing field List Item. via GET /list-item/fields/{list-item-id}

list.read
persona_get_list_item_geolocations_by_list_item_idREAD

Retrieves the details of an existing geolocation List Item. via GET /list-item/geolocations/{list-item-id}

list.read
persona_get_list_item_government_id_numbers_by_list_item_idREAD

Retrieves the details of an existing government ID number List Item. via GET /list-item/government-id-numbers/{list-item-id}

list.read
persona_get_list_item_ip_addresses_by_list_item_idREAD

Retrieves the details of an existing IP address List Item. via GET /list-item/ip-addresses/{list-item-id}

list.read
persona_get_list_item_names_by_list_item_idREAD

Retrieves the details of an existing name List Item. via GET /list-item/names/{list-item-id}

list.read
persona_get_list_item_phone_numbers_by_list_item_idREAD

Retrieves the details of an existing phone number List Item. via GET /list-item/phone-numbers/{list-item-id}

list.read
persona_get_list_item_strings_by_list_item_idREAD

Retrieves the details of an existing string List Item. via GET /list-item/strings/{list-item-id}

list.read
persona_get_listsREAD

Returns a list of your organization's lists. Results are returned in reverse chronological order, with the most recently created objects first. via GET /lists

list.read
persona_get_lists_by_list_idREAD

Retrieves the details of an existing list. via GET /lists/{list-id}

list.read
persona_get_rate_limitsREAD

Returns a list of your current rate limits. via GET /rate-limits

rate_limit.read
persona_get_reportsREAD

Returns a list of all your organization's Reports. Results are returned in reverse chronological order, with the most recently created objects first. via GET /reports

report.read
persona_get_reports_by_report_idREAD

Retrieves the details of an existing Report. via GET /reports/{report-id}

report.read
persona_get_reports_by_report_id_historyREAD

Retrieves the history of an existing Report, including runs and actions. See [Pagination](https://docs.withpersona.com/pagination) for more details about handling the response. Results are returned in reverse chronological order, with the most recently created objects first. via GET /reports/{report-id}/history

report.read
persona_get_theme_setsREAD

Returns a list of your organization's theme sets. Results are returned in reverse chronological order, with the most recently created objects first. via GET /theme-sets

theme_set.read
persona_get_theme_sets_by_theme_set_idREAD

Retrieves the details of an existing theme set. via GET /theme-sets/{theme-set-id}

theme_set.read
persona_get_transaction_types_by_transaction_type_idREAD

Retrieves the details of an existing Transaction Type. via GET /transaction-types/{transaction-type-id}

transaction_type.read
persona_get_transactionsREAD

Returns a list of your organization's transactions. Note that this endpoint aggregates transactions across all transaction type(s). See [Pagination](https://docs.withpersona.com/pagination) for more details about handling the response. Results are returned in reverse chronological order, with the most recently created objects first. via GET /transactions

transaction.read
persona_get_transactions_by_transaction_idREAD

Retrieves the details of an existing Transaction. via GET /transactions/{transaction-id}

transaction.read
persona_get_user_audit_logsREAD

Returns a list of your organization’s user audit logs for up to the most recent 6 months. Note: You must use a production API key to access this endpoint. For security reasons, we do not expose organization-level resources like user audit logs in Sandbox via API. Results are returned in reverse chronological order, with the most recently created objects first. via GET /user-audit-logs

user_audit_log.read
persona_get_user_audit_logs_by_user_audit_log_idREAD

Retrieves the details of an existing user audit logs for up to the most recent 6 months. Note: You must use a production API key to access this endpoint. For security reasons, we do not expose organization-level resources like user audit logs in Sandbox via API. via GET /user-audit-logs/{user-audit-log-id}

user_audit_log.read
persona_get_verification_aamvas_by_verification_idREAD

Retrieve an AAMVA verification via GET /verification/aamvas/{verification-id}

verification.read
persona_get_verification_database_businesses_by_verification_idREAD

Retrieve a database business verification via GET /verification/database-businesses/{verification-id}

verification.read
persona_get_verification_database_ecbsvs_by_verification_idREAD

Retrieve an eCBSV database verification via GET /verification/database-ecbsvs/{verification-id}

verification.read
persona_get_verification_database_phone_carriers_by_verification_idREAD

Retrieve a phone carrier database verification via GET /verification/database-phone-carriers/{verification-id}

verification.read
persona_get_verification_database_serpros_by_verification_idREAD

Retrieve a Serpro database verification via GET /verification/database-serpros/{verification-id}

verification.read
persona_get_verification_database_standards_by_verification_idREAD

Retrieve a database standard verification via GET /verification/database-standards/{verification-id}

verification.read
persona_get_verification_database_tins_by_verification_idREAD

Retrieve a TIN database verification via GET /verification/database-tins/{verification-id}

verification.read
persona_get_verification_databases_by_verification_idREAD

Retrieve a database verification via GET /verification/databases/{verification-id}

verification.read
persona_get_verification_documents_by_verification_idREAD

Retrieves the details of a specific document verification via GET /verification/documents/{verification-id}

verification.read
persona_get_verification_email_addresses_by_verification_idREAD

Retrieve a email address verification via GET /verification/email-addresses/{verification-id}

verification.read
persona_get_verification_government_id_nfcs_by_verification_idREAD

Retrieve a Government ID NFC verification via GET /verification/government-id-nfcs/{verification-id}

verification.read
persona_get_verification_government_ids_by_verification_idREAD

Retrieve a government ID verification via GET /verification/government-ids/{verification-id}

verification.read
persona_get_verification_phone_numbers_by_verification_idREAD

Retrieve a phone number verification via GET /verification/phone-numbers/{verification-id}

verification.read
persona_get_verification_selfies_by_verification_idREAD

Retrieve a selfie ID verification via GET /verification/selfies/{verification-id}

verification.read
persona_get_verifications_by_verification_idREAD

Retrieves the details of an existing Verification. via GET /verifications/{verification-id}

verification.read
persona_get_webhooksREAD

Returns a list of your environment's webhooks. Results are returned in reverse chronological order, with the most recently created objects first. via GET /webhooks

webhook.read
persona_get_webhooks_by_webhook_idREAD

Retrieves the details of an existing webhook, including its secret. via GET /webhooks/{webhook-id}

webhook.read
persona_get_workflow_runsREAD

Returns a list of your environment's workflow runs. Results are returned in reverse chronological order, with the most recently created objects first. via GET /workflow-runs

workflow_run.read
persona_get_workflow_runs_by_workflow_run_idREAD

Retrieves the details of an existing workflow run. via GET /workflow-runs/{workflow-run-id}

workflow_run.read
persona_get_workflow_versionsREAD

Retrieves the published versions and current draft version of a Workflow. Archived versions are not returned. Provide the Workflow ID in `filter[workflow-id]`, which you can copy from the Workflow in your Persona dashboard. The `live`, `rollout-label`, and `rollout-percentage` attributes are relative to the environment your API key belongs to: a version live in Production is not live in Sandbox. Sandbox API keys are supported, and report `live: false` for every version of a Workflow that is only deployed to Production. via GET /workflow-versions

workflow_version.read
persona_patch_accounts_by_account_idWRITE

Updates an existing Account. via PATCH /accounts/{account-id}

account.write
persona_patch_api_keys_by_api_key_idWRITE

Updates an existing API key. via PATCH /api-keys/{api-key-id}

api_key.write
persona_patch_cases_by_case_idWRITE

Updates the fields and add attachments on a Case that has been previously created. via PATCH /cases/{case-id}

case.write
persona_patch_inquiries_by_inquiry_idWRITE

Updates an existing Inquiry. Note that if you use webhooks, updates to inquiries that are not in progress can result in data getting out of sync. For example, updating a completed Inquiry will not cause your Inquiry completed webhook to retrigger. Inquiries represent a snapshot of data collected from an individual, so we generally do not recommend updating an Inquiry's data after the Inquiry has been finalized. via PATCH /inquiries/{inquiry-id}

inquiry.write
persona_patch_inquiries_by_inquiry_id_set_simulate_stubsWRITE

Sets simulated inputs on a Sandbox Inquiry. via PATCH /inquiries/{inquiry-id}/set-simulate-stubs

inquiry.write
persona_patch_theme_sets_by_theme_set_idWRITE

Updates an existing theme set. Both attributes are optional — an omitted attribute is left unchanged. When `styles` is present it replaces the stored styling wholesale: the tree carries the complete desired styling, and any cell absent from it falls back to the Persona default cascade. via PATCH /theme-sets/{theme-set-id}

theme_set.write
persona_patch_transactions_by_transaction_idWRITE

Updates a Transaction that has been previously created. via PATCH /transactions/{transaction-id}

transaction.write
persona_patch_verification_database_businesses_by_verification_idWRITE

Updates an existing database business verification. Can only update `initiated` verifications. via PATCH /verification/database-businesses/{verification-id}

verification.write
persona_patch_webhooks_by_webhook_idWRITE

Updates an existing Webhook. via PATCH /webhooks/{webhook-id}

webhook.write
persona_post_accountsWRITE

Creates a new Account for your organization. via POST /accounts

account.write
persona_post_accounts_by_account_id_add_relationWRITE

Adds a relation from an Account to a target Account or Transaction via POST /accounts/{account-id}/add-relation

account.write
persona_post_accounts_by_account_id_add_tagWRITE

Adds a new tag to an Account via POST /accounts/{account-id}/add-tag

account.write
persona_post_accounts_by_account_id_consolidateWRITE

Consolidates several source Accounts' information into one target Account. Any Persona resource associated with the source Account will be transferred over to the destination Account. However, the Account's attributes will **not** be transferred. After consolidation, you can update the destination Account's attributes using the [Account update endpoint](https://docs.withpersona.com/api-reference/accounts/update-an-account). This endpoint can be used to clean up duplicate Accounts. Note: A source account can only be consolidated once. Afterwards, the source account will be archived and unable to be used moving forward - any attempts to create an inquiry attached to the source account will fail. via POST /accounts/{account-id}/consolidate

account.write
persona_post_accounts_by_account_id_remove_relationWRITE

Removes a relation from an Account to a target Account or Transaction. via POST /accounts/{account-id}/remove-relation

account.write
persona_post_accounts_by_account_id_remove_tagWRITE

Removes an existing tag from an Account via POST /accounts/{account-id}/remove-tag

account.write
persona_post_accounts_by_account_id_run_actionWRITE

Triggers an account action for the specified account via POST /accounts/{account-id}/run-action

account.write
persona_post_accounts_by_account_id_set_tagsWRITE

Sets all tags on an Account. Any tags that are not provided in the request will be removed. via POST /accounts/{account-id}/set-tags

account.write
persona_post_accounts_searchWRITE

Search for accounts using a flexible query language. ## Search vs. List Endpoints The Search and List endpoints serve different purposes and have distinct performance characteristics. Use the **Search** endpoint (`POST /accounts/search`) when you need to perform complex queries with boolean logic (AND/OR/NOT), filter by custom fields or identifiers, or apply multiple conditions simultaneously. Search is optimized for flexible querying and is faster than paginating through all resources when looking for specific records. Use the **List** endpoint (`GET /accounts`) for simple listing with basic filters like reference ID. ## Data Freshness Do not use search for read-after-write flows because the data will not be immediately available to search. Under normal operating conditions, data is searchable within approximately 1 minute of creation or modification. Propagation of new or updated data could be delayed during an outage. For workflows that require immediate data availability after creating or updating an account, use the List Accounts endpoint instead. ### Searchable Attributes The following attributes can be used in query predicates: | Attribute | Description | |-----------|-------------| | `type` | Account type (e.g., `acttp_ABC123`) | | `status` | Account status (e.g., `actst_ABC123`) | | `created_at` | Account creation timestamp | | `updated_at` | Account last updated timestamp | | `identifiers.*` | Custom identifier (e.g., `identifiers.user_id`) | | `fields.*` | Custom account field (e.g., `fields.age`) | **Note:** Custom fields (`fields.*`) must be configured as searchable on the Account Type to be queryable. via POST /accounts/search

account.write
persona_post_api_keysWRITE

Creates a new API key with response defaults and permissions. via POST /api-keys

api_key.write
persona_post_api_keys_by_api_key_id_cloneWRITE

Creates a copy of an existing API key. All attributes except the value are copied over to the new API key. via POST /api-keys/{api-key-id}/clone

api_key.write
persona_post_api_keys_by_api_key_id_expireWRITE

Deactivates an API key within some time period via POST /api-keys/{api-key-id}/expire

api_key.write
persona_post_casesWRITE

Creates a new case in your organization. via POST /cases

case.write
persona_post_cases_by_case_id_add_objectsWRITE

Adds Persona objects (such as inquiries, accounts, or reports) to a Case via POST /cases/{case-id}/add-objects

case.write
persona_post_cases_by_case_id_add_tagWRITE

Adds a new tag to a Case via POST /cases/{case-id}/add-tag

case.write
persona_post_cases_by_case_id_assignWRITE

Assigns a Case to a Persona user. via POST /cases/{case-id}/assign

case.write
persona_post_cases_by_case_id_remove_objectsWRITE

Removes Persona objects (such as inquiries, accounts, or reports) from a Case. This operation is idempotent — removing an object that is not attached succeeds without modifying the case. via POST /cases/{case-id}/remove-objects

case.write
persona_post_cases_by_case_id_remove_tagWRITE

Removes an existing tag from a Case via POST /cases/{case-id}/remove-tag

case.write
persona_post_cases_by_case_id_set_statusWRITE

Sets the status of a Case. via POST /cases/{case-id}/set-status

case.write
persona_post_cases_by_case_id_set_tagsWRITE

Sets all tags on a Case. Any tags that are not provided in the request will be removed. via POST /cases/{case-id}/set-tags

case.write
persona_post_cases_searchWRITE

Search for cases using a flexible query language. ## Search vs. List Endpoints The Search and List endpoints serve different purposes and have distinct performance characteristics. Use the **Search** endpoint (`POST /cases/search`) when you need to perform complex queries with boolean logic (AND/OR/NOT), filter by custom fields, assignee, case queue, or SLA expiration, or apply multiple conditions simultaneously. Search is optimized for flexible querying and is faster than paginating through all resources when looking for specific records. Use the **List** endpoint (`GET /cases`) for simple listing with basic filters like status, case template, account, inquiry, or report. ## Data Freshness Do not use search for read-after-write flows because the data will not be immediately available to search. Under normal operating conditions, data is searchable within approximately 1 minute of creation or modification. Propagation of new or updated data could be delayed during an outage. For workflows that require immediate data availability after creating or updating a case, use the List Cases endpoint instead. ### Searchable Attributes The following attributes can be used in query predicates: | Attribute | Description | |-----------|-------------| | `template` | Case template (e.g., `ctmpl_ABC123`) | | `status` | Case status (e.g., `open`, `pending`, `resolved`) | | `state` | Case state | | `created_at` | Case creation timestamp | | `updated_at` | Case last updated timestamp | | `resolved_at` | Case resolution timestamp | | `sla_expires_at` | SLA expiration timestamp | | `assignee` | Assigned user (e.g., `user_ABC123`) | | `case_queue` | Case queue (e.g., `cqueue_ABC123`) | | `resolver` | Resolver user | | `fields.*` | Custom case field (e.g., `fields.priority`) | **Note:** Custom fields (`fields.*`) must be configured as searchable on the Case Template to be queryable. via POST /cases/search

case.write
persona_post_connect_connectionsWRITE

Creates a new Connection from your organization to a destination organization in the `pending` state. The destination organization must accept the connection before it transitions to `active`; share tokens cannot be redeemed through the connection until then. Connections cannot be deleted, but they can be deactivated and later reactivated to control access. via POST /connect/connections

connect.write
persona_post_connect_connections_by_connection_id_deactivateWRITE

Deactivates a Connection. Either the source or destination organization may deactivate a connection that is currently `pending` or `active`. Deactivation prevents further access through the connection but maintains the connection record. Connections that are already `inactive` cannot be deactivated again. via POST /connect/connections/{connection-id}/deactivate

connect.write
persona_post_connect_connections_by_connection_id_reactivateWRITE

Reactivates an inactive Connection, returning it to the `pending` state. Only the source organization can reactivate a connection. Once reactivated, the destination organization must accept the connection again before it returns to the `active` state. Only inactive connections can be reactivated. via POST /connect/connections/{connection-id}/reactivate

connect.write
persona_post_connect_share_tokensWRITE

Creates a new Share Token with the specified connection and source. Share Tokens can be created from Accounts, Inquiries, Transactions, or Verifications. via POST /connect/share-tokens

connect.write
persona_post_connect_share_tokens_by_share_token_id_expireWRITE

Expires a Share Token, setting its status to expired and preventing further use. via POST /connect/share-tokens/{share-token-id}/expire

connect.write
persona_post_connect_share_tokens_by_share_token_id_redeemWRITE

Initiates redemption of a Share Token in one of two modes: - **Clone:** Omit `data.attributes.destination-id` to create a new object from the source. Inquiry and Verification Share Tokens can be cloned. - **Hydrate:** Provide `data.attributes.destination-id` to import source data into an existing object. Account, Transaction, and Inquiry Share Tokens can hydrate an existing Account, Transaction, or Inquiry. Redemption is asynchronous. A successful request returns the Share Token with a `pending` status while Persona processes the import. via POST /connect/share-tokens/{share-token-id}/redeem

connect.write
persona_post_graph_queriesWRITE

Create a Graph Query via POST /graph-queries

graph_query.write
persona_post_inquiriesWRITE

Creates a new inquiry with optional pre-filled attributes. See [Sessions](https://docs.withpersona.com/inquiry-sessions) for how to continue the inquiry in [Embedded Flow](https://docs.withpersona.com/embedded-flow) or [Hosted Flow](https://docs.withpersona.com/hosted-flow). via POST /inquiries

inquiry.write
persona_post_inquiries_by_inquiry_id_add_tagWRITE

Adds a new tag to an Inquiry. via POST /inquiries/{inquiry-id}/add-tag

inquiry.write
persona_post_inquiries_by_inquiry_id_approveWRITE

Approves an Inquiry. Note that this action will trigger any associated workflows and webhooks. Approving an inquiry will prevent further progress on the inquiry. via POST /inquiries/{inquiry-id}/approve

inquiry.write
persona_post_inquiries_by_inquiry_id_declineWRITE

Declines an Inquiry. Note that this action will trigger any associated workflows and webhooks. Declining an inquiry will prevent further progress on the inquiry. via POST /inquiries/{inquiry-id}/decline

inquiry.write
persona_post_inquiries_by_inquiry_id_expireWRITE

Expires an Inquiry and all sessions on the Inquiry. Cancels any pending Verifications on the inquiry. The Inquiry can still be resumed after expiry. via POST /inquiries/{inquiry-id}/expire

inquiry.write
persona_post_inquiries_by_inquiry_id_generate_one_time_linkWRITE

Creates a new inquiry session and returns `meta.one-time-link`. via POST /inquiries/{inquiry-id}/generate-one-time-link

inquiry.write
persona_post_inquiries_by_inquiry_id_mark_for_reviewWRITE

Marks an Inquiry for manual review. Inquiries that are already approved or declined cannot be marked for review. Note that this action will trigger any associated workflows and webhooks. Marking an inquiry for review will prevent further progress on the inquiry. via POST /inquiries/{inquiry-id}/mark-for-review

inquiry.write
persona_post_inquiries_by_inquiry_id_perform_simulate_actionsWRITE

Performs a series of simulated actions on a Sandbox Inquiry. via POST /inquiries/{inquiry-id}/perform-simulate-actions

inquiry.write
persona_post_inquiries_by_inquiry_id_remove_tagWRITE

Removes an existing tag from an Inquiry. via POST /inquiries/{inquiry-id}/remove-tag

inquiry.write
persona_post_inquiries_by_inquiry_id_resumeWRITE

Creates a session token that is returned as `meta.session-token`. If the inquiry's status is `expired`, changes the status to `pending`. The `session-token` must be included when loading the inquiry flow if the inquiry's status is `pending`. This endpoint will error if the inquiry is redacted. This endpoint first tries to reuse any existing valid unused [sessions](https://docs.withpersona.com/inquiry-sessions). If none exist, a new session is created. For more information, see [Resuming Inquiries](https://docs.withpersona.com/resuming-inquiries). via POST /inquiries/{inquiry-id}/resume

inquiry.write
persona_post_inquiries_by_inquiry_id_set_tagsWRITE

Sets all tags on an Inquiry. Any tags that are not provided in the request will be removed. via POST /inquiries/{inquiry-id}/set-tags

inquiry.write
persona_post_inquiries_searchWRITE

Search for inquiries using a flexible query language. ## Search vs. List Endpoints The Search and List endpoints serve different purposes and have distinct performance characteristics. Use the **Search** endpoint (`POST /inquiries/search`) when you need to perform complex queries with boolean logic (AND/OR/NOT), filter on multiple statuses simultaneously, or apply multiple conditions at once. Search is optimized for flexible querying and is faster than paginating through all resources when looking for specific records. Use the **List** endpoint (`GET /inquiries`) for simple listing with basic filters like reference ID. ## Data Freshness Do not use search for read-after-write flows because the data will not be immediately available to search. Under normal operating conditions, data is searchable within approximately 1 minute of creation or modification. Propagation of new or updated data could be delayed during an outage. For workflows that require immediate data availability after creating or updating an inquiry, use the List Inquiries endpoint instead. ### Searchable Attributes The following attributes can be used in query predicates: | Attribute | Description | |-----------|-------------| | `status` | Inquiry status (e.g., `pending`, `completed`, `approved`, `declined`) | | `created_at` | Inquiry creation timestamp | | `updated_at` | Inquiry last updated timestamp | | `reference_id` | Reference ID associated with the inquiry's account | | `inquiry_template_id` | Inquiry template ID (e.g., `itmpl_ABC123`) | via POST /inquiries/search

inquiry.write
persona_post_inquiry_sessionsWRITE

Creates a new Inquiry Session. By default, we only allow up to 25 sessions per Inquiry. via POST /inquiry-sessions

inquiry_session.write
persona_post_inquiry_sessions_by_inquiry_session_id_expireWRITE

Expires a specific Inquiry Session. via POST /inquiry-sessions/{inquiry-session-id}/expire

inquiry_session.write
persona_post_inquiry_sessions_by_inquiry_session_id_generate_one_time_linkWRITE

Generates a one-time link for a specific Inquiry Session. via POST /inquiry-sessions/{inquiry-session-id}/generate-one-time-link

inquiry_session.write
persona_post_inquiry_sessions_expire_allWRITE

Expires all active Inquiry Sessions for a given set of Inquiries. via POST /inquiry-sessions/expire-all

inquiry_session.write
persona_post_inquiry_templates_by_inquiry_template_id_translationsWRITE

Imports translations for an Inquiry Template. Supports partial updates — translation rows not included in the request body are left unchanged. If a draft version already exists, translations are applied to it. If no draft exists, a new draft is created from the latest published version before importing. The draft is never automatically published — publishing is always a manual step in the dashboard. Note: You must use a production API key to access this endpoint. For security reasons, we do not expose organization-level resources like Inquiry Templates in Sandbox via API. via POST /inquiry-templates/{inquiry-template-id}/translations

inquiry_template.write
persona_post_list_browser_fingerprintsWRITE

Create a new list for your organization. via POST /list/browser-fingerprints

list.write
persona_post_list_countriesWRITE

Create a new list for your organization. via POST /list/countries

list.write
persona_post_list_email_addressesWRITE

Create a new list for your organization. via POST /list/email-addresses

list.write
persona_post_list_geolocationsWRITE

Create a new list for your organization. via POST /list/geolocations

list.write
persona_post_list_government_id_numbersWRITE

Create a new list for your organization. via POST /list/government-id-numbers

list.write
persona_post_list_ip_addressesWRITE

Create a new list for your organization. via POST /list/ip-addresses

list.write
persona_post_list_item_browser_fingerprintsWRITE

Create a new item in a list. via POST /list-item/browser-fingerprints

list.write
persona_post_list_item_countriesWRITE

Create a new item in a list. via POST /list-item/countries

list.write
persona_post_list_item_device_fingerprintsWRITE

Create a new item in a list. via POST /list-item/device-fingerprints

list.write
persona_post_list_item_email_addressesWRITE

Create a new item in a list. via POST /list-item/email-addresses

list.write
persona_post_list_item_fieldsWRITE

Create a new item in a list. via POST /list-item/fields

list.write
persona_post_list_item_geolocationsWRITE

Create a new item in a list. via POST /list-item/geolocations

list.write
persona_post_list_item_government_id_numbersWRITE

Create a new item in a list. via POST /list-item/government-id-numbers

list.write
persona_post_list_item_ip_addressesWRITE

Create a new item in a list. via POST /list-item/ip-addresses

list.write
persona_post_list_item_namesWRITE

Create a new item in a list. via POST /list-item/names

list.write
persona_post_list_item_phone_numbersWRITE

Create a new item in a list. via POST /list-item/phone-numbers

list.write
persona_post_list_item_stringsWRITE

Create a new item in a list. via POST /list-item/strings

list.write
persona_post_list_namesWRITE

Create a new list for your organization. via POST /list/names

list.write
persona_post_list_phone_numbersWRITE

Create a new list for your organization. via POST /list/phone-numbers

list.write
persona_post_list_stringsWRITE

Create a new list for your organization. via POST /list/strings

list.write
persona_post_oauth_authorizeWRITE

Authorizes another Organization to access your Inquiry, Verifications, or other Persona resources. via POST /oauth/authorize

oauth.write
persona_post_oauth_tokenWRITE

Exchange a credential for an access token. Supports two grant types: - `authorization_code`: Exchange an authorization code for an access token (cross-org data sharing). - `client_credentials`: Exchange a signed JWT assertion (`private_key_jwt`) for a short-lived access token (machine-to-machine auth, RFC 7523). via POST /oauth/token

oauth.write
persona_post_privacy_passesWRITE

Issues a Privacy Pass token by blind-signing a client-provided blinded token (Blind RSA, RFC 9578). The returned blind signature is unblinded client-side to produce a Privacy Pass token that can later be redeemed anonymously (for example, when generating a Relay claim). via POST /privacy-passes

privacy_pass.write
persona_post_relaysWRITE

Creates a new Relay. via POST /relays

relay.write
persona_post_relays_challengeWRITE

Requests a Privacy Pass challenge for a claim type. The challenge materials returned here are used to obtain a Privacy Pass token, which is then redeemable to read claims from Relays with the same claim type. via POST /relays/challenge

relay.write
persona_post_reportsWRITE

Creates a new Report of any type. via POST /reports

report.write
persona_post_reports_by_report_id_add_tagWRITE

Adds a new tag to the Report via POST /reports/{report-id}/add-tag

report.write
persona_post_reports_by_report_id_dismissWRITE

Dismisses active matches for supported report types via POST /reports/{report-id}/dismiss

report.write
persona_post_reports_by_report_id_pauseWRITE

Pauses continuous monitoring on a report. Requires additional permissions. via POST /reports/{report-id}/pause

report.write
persona_post_reports_by_report_id_remove_tagWRITE

Removes an existing tag from a Report. via POST /reports/{report-id}/remove-tag

report.write
persona_post_reports_by_report_id_resumeWRITE

Resumes continuous monitoring on paused report. Requires additional permissions. via POST /reports/{report-id}/resume

report.write
persona_post_reports_by_report_id_runWRITE

Re-runs a continuously monitored report immediately, outside of its existing recurrence schedule. via POST /reports/{report-id}/run

report.write
persona_post_reports_by_report_id_set_tagsWRITE

Sets all tags on a Report. Any tags that are not provided in the request will be removed. via POST /reports/{report-id}/set-tags

report.write
persona_post_theme_setsWRITE

Creates a new theme set. The `data` attribute carries the nested theme tree (`settings` / `light` / `dark`) — the same shape as the Code-First theme-set YAML. Style cells that are not supported are rejected with a 400 naming each offending path. via POST /theme-sets

theme_set.write
persona_post_transactionsWRITE

Creates a new Transaction for a specific transaction type in your organization. via POST /transactions

transaction.write
persona_post_transactions_by_transaction_id_add_relationWRITE

Adds a relation between this Transaction and a target Account or Transaction using a relation schema key. No effect if the relation already exists. via POST /transactions/{transaction-id}/add-relation

transaction.write
persona_post_transactions_by_transaction_id_add_tagWRITE

Adds a tag to a Transaction. Create a new tag if the tag does not already exist. No effect if the transaction already has the tag. via POST /transactions/{transaction-id}/add-tag

transaction.write
persona_post_transactions_by_transaction_id_labelWRITE

Create a new label for an existing Transaction. via POST /transactions/{transaction-id}/label

transaction.write
persona_post_transactions_by_transaction_id_redact_biometricsWRITE

Permanently deletes biometric data for a Transaction AND all its associated objects. **This action cannot be undone**. via POST /transactions/{transaction-id}/redact-biometrics

transaction.write
persona_post_transactions_by_transaction_id_remove_relationWRITE

Removes a relation between this Transaction and a target Account or Transaction. No effect if the relation does not exist. via POST /transactions/{transaction-id}/remove-relation

transaction.write
persona_post_transactions_by_transaction_id_remove_tagWRITE

Remove a tag from a transaction. No effect if the transaction does not have the tag. via POST /transactions/{transaction-id}/remove-tag

transaction.write
persona_post_transactions_by_transaction_id_set_tagsWRITE

Set the list of tags on a transaction. Remove all tags on the transaction that don't appear on the list. Add all tags on the transaction from the list. via POST /transactions/{transaction-id}/set-tags

transaction.write
persona_post_verification_database_businessesWRITE

Create a new database business verification via POST /verification/database-businesses

verification.write
persona_post_verification_database_businesses_by_verification_id_submitWRITE

Submit a database business verification for processing. Can only submit `initiated` verifications via POST /verification/database-businesses/{verification-id}/submit

verification.write
persona_post_verifications_by_verification_id_investigation_lockWRITE

Locks a Verification from redaction while it is under investigation. While locked, redaction requests for the Verification will be rejected. via POST /verifications/{verification-id}/investigation-lock

verification.write
persona_post_verifications_by_verification_id_investigation_unlockWRITE

Unlocks a Verification that was previously locked from redaction during an investigation. via POST /verifications/{verification-id}/investigation-unlock

verification.write
persona_post_webhook_events_searchWRITE

Search for webhook events using a flexible query language. Webhook events are the individual delivery records for your webhooks — one per event, per webhook. Use this endpoint to find events (for example, all `failed` deliveries for a given webhook in a time window) before re-running them. ## Data Freshness Do not use search for read-after-write flows because the data will not be immediately available to search. Under normal operating conditions, data is searchable within approximately 1 minute of creation or modification. Propagation could be delayed during an outage. ## Retention Webhook events are retained for a limited window. Searches are automatically bounded to that window, so events older than the retention period are not returned even if requested. ### Searchable Attributes The following attributes can be used in query predicates: | Attribute | Description | |-----------|-------------| | `updated_at` | Timestamp the event was last updated (i.e. last delivery attempt). Supports `eq`, `gt`, `gte`, `lt`, `lte`. | | `status` | Delivery status: `pending`, `completed`, `failed`, or `skipped`. | | `webhook_id` | Webhook token (e.g. `wbh_ABC123`). | | `event_id` | Event token the webhook event was created from (e.g. `evt_ABC123`). | | `event_name` | Event name (e.g. `inquiry.completed`). | | `webhook_event_id` | Webhook event token (e.g. `wbhe_ABC123`). | | `related_object_ids` | A related object token contained in the event payload. | All attributes other than `updated_at` support only the `eq` operator. via POST /webhook-events/search

webhook.write
persona_post_webhooksWRITE

Creates a new webhook with response defaults. via POST /webhooks

webhook.write
persona_post_webhooks_by_webhook_id_archiveWRITE

Archives a webhook. via POST /webhooks/{webhook-id}/archive

webhook.write
persona_post_webhooks_by_webhook_id_cloneWRITE

Creates a copy of an existing webhook. All attributes except the secret are copied over to the new webhook. via POST /webhooks/{webhook-id}/clone

webhook.write
persona_post_webhooks_by_webhook_id_disableWRITE

Disables a webhook. via POST /webhooks/{webhook-id}/disable

webhook.write
persona_post_webhooks_by_webhook_id_enableWRITE

Enables a webhook. via POST /webhooks/{webhook-id}/enable

webhook.write
persona_post_webhooks_by_webhook_id_rotate_secretWRITE

Rotates a webhook's secret. via POST /webhooks/{webhook-id}/rotate-secret

webhook.write
persona_post_workflows_by_workflow_id_triggerWRITE

Creates a new Workflow Run. Note: The payload is arbitrary and defined by the Workflow version trigger schema. via POST /workflows/{workflow-id}/trigger

workflow.write

Put Persona behind one governed endpoint.

Same permissions, same audit trail, whatever else you connect next.