SECURITY · DEVELOPER
Inquiries, verifications, reports, and cases on the account they connected.
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.
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.
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.
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_idWRITEPermanently 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}
persona_delete_cases_by_case_idWRITEPermanently redacts a Case and its fields. Case objects must be redacted individually. **This action cannot be undone**. via DELETE /cases/{case-id}
persona_delete_inquiries_by_inquiry_idWRITEPermanently 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}
persona_delete_list_item_browser_fingerprints_by_list_item_idWRITEArchived items are not matched against new inquiries. via DELETE /list-item/browser-fingerprints/{list-item-id}
persona_delete_list_item_countries_by_list_item_idWRITEArchived items are not matched against new inquiries. via DELETE /list-item/countries/{list-item-id}
persona_delete_list_item_device_fingerprints_by_list_item_idWRITEArchived items are not matched against new inquiries. via DELETE /list-item/device-fingerprints/{list-item-id}
persona_delete_list_item_email_addresses_by_list_item_idWRITEArchived items are not matched against new inquiries. via DELETE /list-item/email-addresses/{list-item-id}
persona_delete_list_item_fields_by_list_item_idWRITEArchived items are not matched against new inquiries. via DELETE /list-item/fields/{list-item-id}
persona_delete_list_item_geolocations_by_list_item_idWRITEArchived items are not matched against new inquiries. via DELETE /list-item/geolocations/{list-item-id}
persona_delete_list_item_government_id_numbers_by_list_item_idWRITEArchived items are not matched against new inquiries. via DELETE /list-item/government-id-numbers/{list-item-id}
persona_delete_list_item_ip_addresses_by_list_item_idWRITEArchived items are not matched against new inquiries. via DELETE /list-item/ip-addresses/{list-item-id}
persona_delete_list_item_names_by_list_item_idWRITEArchived items are not matched against new inquiries. via DELETE /list-item/names/{list-item-id}
persona_delete_list_item_phone_numbers_by_list_item_idWRITEArchived items are not matched against new inquiries. via DELETE /list-item/phone-numbers/{list-item-id}
persona_delete_list_item_strings_by_list_item_idWRITEArchived items are not matched against new inquiries. via DELETE /list-item/strings/{list-item-id}
persona_delete_lists_by_list_idWRITEArchive an existing list. Archived lists are still retrievable, but will no longer match on inquiries. via DELETE /lists/{list-id}
persona_delete_reports_by_report_idWRITEPermanently 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}
persona_delete_theme_sets_by_theme_set_idWRITEArchive 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}
persona_delete_transactions_by_transaction_idWRITEPermanently 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}
persona_delete_verifications_by_verification_idWRITEPermanently 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}
persona_get_account_types_by_account_type_idREADRetrieves the details of an existing Account Type, including its configured field schemas. via GET /account-types/{account-type-id}
persona_get_accountsREADReturns 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
persona_get_accounts_by_account_idREADRetrieves the details of an existing Account. via GET /accounts/{account-id}
persona_get_accounts_by_account_id_relationsREADGets relations for an Account by key via GET /accounts/{account-id}/relations
persona_get_api_keysREADReturns 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
persona_get_api_keys_by_api_key_idREADRetrieves 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}
persona_get_api_logsREADReturns 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
persona_get_api_logs_by_api_log_idREADRetrieves the details of an existing API Log. via GET /api-logs/{api-log-id}
persona_get_case_templates_by_case_template_idREADRetrieves the details of an existing Case Template, including its configured field schemas. via GET /case-templates/{case-template-id}
persona_get_casesREADReturns 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
persona_get_cases_by_case_idREADRetrieves the details of an existing Case. via GET /cases/{case-id}
persona_get_connect_connectionsREADReturns 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
persona_get_connect_connections_by_connection_idREADRetrieves the details of an existing Connection. via GET /connect/connections/{connection-id}
persona_get_connect_share_tokensREADReturns 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
persona_get_connect_share_tokens_by_share_token_idREADRetrieve the information for an existing Share Token. via GET /connect/share-tokens/{share-token-id}
persona_get_devicesREADRetrieves a list of Devices. Results are returned in reverse chronological order, with the most recently created objects first. via GET /devices
persona_get_devices_by_device_idREADRetrieves details of a specific Device. via GET /devices/{device-id}
persona_get_document_generics_by_document_idREADRetrieves the details of a generic document that has been previously created. via GET /document/generics/{document-id}
persona_get_document_government_ids_by_document_idREADRetrieves the details of a government-id document that has been previously created. via GET /document/government-ids/{document-id}
persona_get_documents_by_document_idREADRetrieves the details of a Document. via GET /documents/{document-id}
persona_get_eventsREADReturns a list of your organization's events. Results are returned in reverse chronological order, with the most recently created objects first. via GET /events
persona_get_events_by_event_idREADRetrieves the details of an existing event. via GET /events/{event-id}
persona_get_graph_queries_by_graph_query_idREADRetrieve a Graph Query via GET /graph-queries/{graph-query-id}
persona_get_importersREADReturns a list of your organization's importers. Results are returned in reverse chronological order, with the most recently created objects first. via GET /importers
persona_get_importers_by_importer_idREADRetrieve the details of an existing importer. via GET /importers/{importer-id}
persona_get_inquiriesREADReturns 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
persona_get_inquiries_by_inquiry_idREADRetrieves 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}
persona_get_inquiry_sessionsREADRetrieves a list of Inquiry Sessions. Results are returned in reverse chronological order, with the most recently created objects first. via GET /inquiry-sessions
persona_get_inquiry_sessions_by_inquiry_session_idREADRetrieves details of a specific Inquiry Session. via GET /inquiry-sessions/{inquiry-session-id}
persona_get_inquiry_template_versionsREADRetrieves 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
persona_get_inquiry_templatesREADRetrieves 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
persona_get_inquiry_templates_by_inquiry_template_idREADRetrieves 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}
persona_get_inquiry_templates_by_inquiry_template_id_translationsREADRetrieves 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
persona_get_list_item_browser_fingerprints_by_list_item_idREADRetrieves the details of an existing browser fingerprint List Item. via GET /list-item/browser-fingerprints/{list-item-id}
persona_get_list_item_countries_by_list_item_idREADRetrieves the details of an existing country List Item. via GET /list-item/countries/{list-item-id}
persona_get_list_item_device_fingerprints_by_list_item_idREADRetrieves the details of an existing device fingerprint List Item. via GET /list-item/device-fingerprints/{list-item-id}
persona_get_list_item_email_addresses_by_list_item_idREADRetrieves the details of an existing email address List Item. via GET /list-item/email-addresses/{list-item-id}
persona_get_list_item_fields_by_list_item_idREADRetrieves the details of an existing field List Item. via GET /list-item/fields/{list-item-id}
persona_get_list_item_geolocations_by_list_item_idREADRetrieves the details of an existing geolocation List Item. via GET /list-item/geolocations/{list-item-id}
persona_get_list_item_government_id_numbers_by_list_item_idREADRetrieves the details of an existing government ID number List Item. via GET /list-item/government-id-numbers/{list-item-id}
persona_get_list_item_ip_addresses_by_list_item_idREADRetrieves the details of an existing IP address List Item. via GET /list-item/ip-addresses/{list-item-id}
persona_get_list_item_names_by_list_item_idREADRetrieves the details of an existing name List Item. via GET /list-item/names/{list-item-id}
persona_get_list_item_phone_numbers_by_list_item_idREADRetrieves the details of an existing phone number List Item. via GET /list-item/phone-numbers/{list-item-id}
persona_get_list_item_strings_by_list_item_idREADRetrieves the details of an existing string List Item. via GET /list-item/strings/{list-item-id}
persona_get_listsREADReturns a list of your organization's lists. Results are returned in reverse chronological order, with the most recently created objects first. via GET /lists
persona_get_lists_by_list_idREADRetrieves the details of an existing list. via GET /lists/{list-id}
persona_get_rate_limitsREADReturns a list of your current rate limits. via GET /rate-limits
persona_get_reportsREADReturns 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
persona_get_reports_by_report_idREADRetrieves the details of an existing Report. via GET /reports/{report-id}
persona_get_reports_by_report_id_historyREADRetrieves 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
persona_get_theme_setsREADReturns 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
persona_get_theme_sets_by_theme_set_idREADRetrieves the details of an existing theme set. via GET /theme-sets/{theme-set-id}
persona_get_transaction_types_by_transaction_type_idREADRetrieves the details of an existing Transaction Type. via GET /transaction-types/{transaction-type-id}
persona_get_transactionsREADReturns 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
persona_get_transactions_by_transaction_idREADRetrieves the details of an existing Transaction. via GET /transactions/{transaction-id}
persona_get_user_audit_logsREADReturns 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
persona_get_user_audit_logs_by_user_audit_log_idREADRetrieves 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}
persona_get_verification_aamvas_by_verification_idREADRetrieve an AAMVA verification via GET /verification/aamvas/{verification-id}
persona_get_verification_database_businesses_by_verification_idREADRetrieve a database business verification via GET /verification/database-businesses/{verification-id}
persona_get_verification_database_ecbsvs_by_verification_idREADRetrieve an eCBSV database verification via GET /verification/database-ecbsvs/{verification-id}
persona_get_verification_database_phone_carriers_by_verification_idREADRetrieve a phone carrier database verification via GET /verification/database-phone-carriers/{verification-id}
persona_get_verification_database_serpros_by_verification_idREADRetrieve a Serpro database verification via GET /verification/database-serpros/{verification-id}
persona_get_verification_database_standards_by_verification_idREADRetrieve a database standard verification via GET /verification/database-standards/{verification-id}
persona_get_verification_database_tins_by_verification_idREADRetrieve a TIN database verification via GET /verification/database-tins/{verification-id}
persona_get_verification_databases_by_verification_idREADRetrieve a database verification via GET /verification/databases/{verification-id}
persona_get_verification_documents_by_verification_idREADRetrieves the details of a specific document verification via GET /verification/documents/{verification-id}
persona_get_verification_email_addresses_by_verification_idREADRetrieve a email address verification via GET /verification/email-addresses/{verification-id}
persona_get_verification_government_id_nfcs_by_verification_idREADRetrieve a Government ID NFC verification via GET /verification/government-id-nfcs/{verification-id}
persona_get_verification_government_ids_by_verification_idREADRetrieve a government ID verification via GET /verification/government-ids/{verification-id}
persona_get_verification_phone_numbers_by_verification_idREADRetrieve a phone number verification via GET /verification/phone-numbers/{verification-id}
persona_get_verification_selfies_by_verification_idREADRetrieve a selfie ID verification via GET /verification/selfies/{verification-id}
persona_get_verifications_by_verification_idREADRetrieves the details of an existing Verification. via GET /verifications/{verification-id}
persona_get_webhooksREADReturns a list of your environment's webhooks. Results are returned in reverse chronological order, with the most recently created objects first. via GET /webhooks
persona_get_webhooks_by_webhook_idREADRetrieves the details of an existing webhook, including its secret. via GET /webhooks/{webhook-id}
persona_get_workflow_runsREADReturns 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
persona_get_workflow_runs_by_workflow_run_idREADRetrieves the details of an existing workflow run. via GET /workflow-runs/{workflow-run-id}
persona_get_workflow_versionsREADRetrieves 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
persona_patch_accounts_by_account_idWRITEUpdates an existing Account. via PATCH /accounts/{account-id}
persona_patch_api_keys_by_api_key_idWRITEUpdates an existing API key. via PATCH /api-keys/{api-key-id}
persona_patch_cases_by_case_idWRITEUpdates the fields and add attachments on a Case that has been previously created. via PATCH /cases/{case-id}
persona_patch_inquiries_by_inquiry_idWRITEUpdates 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}
persona_patch_inquiries_by_inquiry_id_set_simulate_stubsWRITESets simulated inputs on a Sandbox Inquiry. via PATCH /inquiries/{inquiry-id}/set-simulate-stubs
persona_patch_theme_sets_by_theme_set_idWRITEUpdates 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}
persona_patch_transactions_by_transaction_idWRITEUpdates a Transaction that has been previously created. via PATCH /transactions/{transaction-id}
persona_patch_verification_database_businesses_by_verification_idWRITEUpdates an existing database business verification. Can only update `initiated` verifications. via PATCH /verification/database-businesses/{verification-id}
persona_patch_webhooks_by_webhook_idWRITEUpdates an existing Webhook. via PATCH /webhooks/{webhook-id}
persona_post_accountsWRITECreates a new Account for your organization. via POST /accounts
persona_post_accounts_by_account_id_add_relationWRITEAdds a relation from an Account to a target Account or Transaction via POST /accounts/{account-id}/add-relation
persona_post_accounts_by_account_id_add_tagWRITEAdds a new tag to an Account via POST /accounts/{account-id}/add-tag
persona_post_accounts_by_account_id_consolidateWRITEConsolidates 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
persona_post_accounts_by_account_id_remove_relationWRITERemoves a relation from an Account to a target Account or Transaction. via POST /accounts/{account-id}/remove-relation
persona_post_accounts_by_account_id_remove_tagWRITERemoves an existing tag from an Account via POST /accounts/{account-id}/remove-tag
persona_post_accounts_by_account_id_run_actionWRITETriggers an account action for the specified account via POST /accounts/{account-id}/run-action
persona_post_accounts_by_account_id_set_tagsWRITESets all tags on an Account. Any tags that are not provided in the request will be removed. via POST /accounts/{account-id}/set-tags
persona_post_accounts_searchWRITESearch 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
persona_post_api_keysWRITECreates a new API key with response defaults and permissions. via POST /api-keys
persona_post_api_keys_by_api_key_id_cloneWRITECreates 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
persona_post_api_keys_by_api_key_id_expireWRITEDeactivates an API key within some time period via POST /api-keys/{api-key-id}/expire
persona_post_casesWRITECreates a new case in your organization. via POST /cases
persona_post_cases_by_case_id_add_objectsWRITEAdds Persona objects (such as inquiries, accounts, or reports) to a Case via POST /cases/{case-id}/add-objects
persona_post_cases_by_case_id_add_tagWRITEAdds a new tag to a Case via POST /cases/{case-id}/add-tag
persona_post_cases_by_case_id_assignWRITEAssigns a Case to a Persona user. via POST /cases/{case-id}/assign
persona_post_cases_by_case_id_remove_objectsWRITERemoves 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
persona_post_cases_by_case_id_remove_tagWRITERemoves an existing tag from a Case via POST /cases/{case-id}/remove-tag
persona_post_cases_by_case_id_set_statusWRITESets the status of a Case. via POST /cases/{case-id}/set-status
persona_post_cases_by_case_id_set_tagsWRITESets all tags on a Case. Any tags that are not provided in the request will be removed. via POST /cases/{case-id}/set-tags
persona_post_cases_searchWRITESearch 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
persona_post_connect_connectionsWRITECreates 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
persona_post_connect_connections_by_connection_id_deactivateWRITEDeactivates 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
persona_post_connect_connections_by_connection_id_reactivateWRITEReactivates 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
persona_post_connect_share_tokensWRITECreates 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
persona_post_connect_share_tokens_by_share_token_id_expireWRITEExpires a Share Token, setting its status to expired and preventing further use. via POST /connect/share-tokens/{share-token-id}/expire
persona_post_connect_share_tokens_by_share_token_id_redeemWRITEInitiates 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
persona_post_graph_queriesWRITECreate a Graph Query via POST /graph-queries
persona_post_inquiriesWRITECreates 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
persona_post_inquiries_by_inquiry_id_add_tagWRITEAdds a new tag to an Inquiry. via POST /inquiries/{inquiry-id}/add-tag
persona_post_inquiries_by_inquiry_id_approveWRITEApproves 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
persona_post_inquiries_by_inquiry_id_declineWRITEDeclines 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
persona_post_inquiries_by_inquiry_id_expireWRITEExpires 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
persona_post_inquiries_by_inquiry_id_generate_one_time_linkWRITECreates a new inquiry session and returns `meta.one-time-link`. via POST /inquiries/{inquiry-id}/generate-one-time-link
persona_post_inquiries_by_inquiry_id_mark_for_reviewWRITEMarks 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
persona_post_inquiries_by_inquiry_id_perform_simulate_actionsWRITEPerforms a series of simulated actions on a Sandbox Inquiry. via POST /inquiries/{inquiry-id}/perform-simulate-actions
persona_post_inquiries_by_inquiry_id_remove_tagWRITERemoves an existing tag from an Inquiry. via POST /inquiries/{inquiry-id}/remove-tag
persona_post_inquiries_by_inquiry_id_resumeWRITECreates 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
persona_post_inquiries_by_inquiry_id_set_tagsWRITESets all tags on an Inquiry. Any tags that are not provided in the request will be removed. via POST /inquiries/{inquiry-id}/set-tags
persona_post_inquiries_searchWRITESearch 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
persona_post_inquiry_sessionsWRITECreates a new Inquiry Session. By default, we only allow up to 25 sessions per Inquiry. via POST /inquiry-sessions
persona_post_inquiry_sessions_by_inquiry_session_id_expireWRITEExpires a specific Inquiry Session. via POST /inquiry-sessions/{inquiry-session-id}/expire
persona_post_inquiry_sessions_by_inquiry_session_id_generate_one_time_linkWRITEGenerates a one-time link for a specific Inquiry Session. via POST /inquiry-sessions/{inquiry-session-id}/generate-one-time-link
persona_post_inquiry_sessions_expire_allWRITEExpires all active Inquiry Sessions for a given set of Inquiries. via POST /inquiry-sessions/expire-all
persona_post_inquiry_templates_by_inquiry_template_id_translationsWRITEImports 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
persona_post_list_browser_fingerprintsWRITECreate a new list for your organization. via POST /list/browser-fingerprints
persona_post_list_countriesWRITECreate a new list for your organization. via POST /list/countries
persona_post_list_email_addressesWRITECreate a new list for your organization. via POST /list/email-addresses
persona_post_list_geolocationsWRITECreate a new list for your organization. via POST /list/geolocations
persona_post_list_government_id_numbersWRITECreate a new list for your organization. via POST /list/government-id-numbers
persona_post_list_ip_addressesWRITECreate a new list for your organization. via POST /list/ip-addresses
persona_post_list_item_browser_fingerprintsWRITECreate a new item in a list. via POST /list-item/browser-fingerprints
persona_post_list_item_countriesWRITECreate a new item in a list. via POST /list-item/countries
persona_post_list_item_device_fingerprintsWRITECreate a new item in a list. via POST /list-item/device-fingerprints
persona_post_list_item_email_addressesWRITECreate a new item in a list. via POST /list-item/email-addresses
persona_post_list_item_fieldsWRITECreate a new item in a list. via POST /list-item/fields
persona_post_list_item_geolocationsWRITECreate a new item in a list. via POST /list-item/geolocations
persona_post_list_item_government_id_numbersWRITECreate a new item in a list. via POST /list-item/government-id-numbers
persona_post_list_item_ip_addressesWRITECreate a new item in a list. via POST /list-item/ip-addresses
persona_post_list_item_namesWRITECreate a new item in a list. via POST /list-item/names
persona_post_list_item_phone_numbersWRITECreate a new item in a list. via POST /list-item/phone-numbers
persona_post_list_item_stringsWRITECreate a new item in a list. via POST /list-item/strings
persona_post_list_namesWRITECreate a new list for your organization. via POST /list/names
persona_post_list_phone_numbersWRITECreate a new list for your organization. via POST /list/phone-numbers
persona_post_list_stringsWRITECreate a new list for your organization. via POST /list/strings
persona_post_oauth_authorizeWRITEAuthorizes another Organization to access your Inquiry, Verifications, or other Persona resources. via POST /oauth/authorize
persona_post_oauth_tokenWRITEExchange 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
persona_post_privacy_passesWRITEIssues 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
persona_post_relaysWRITECreates a new Relay. via POST /relays
persona_post_relays_challengeWRITERequests 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
persona_post_reportsWRITECreates a new Report of any type. via POST /reports
persona_post_reports_by_report_id_add_tagWRITEAdds a new tag to the Report via POST /reports/{report-id}/add-tag
persona_post_reports_by_report_id_dismissWRITEDismisses active matches for supported report types via POST /reports/{report-id}/dismiss
persona_post_reports_by_report_id_pauseWRITEPauses continuous monitoring on a report. Requires additional permissions. via POST /reports/{report-id}/pause
persona_post_reports_by_report_id_remove_tagWRITERemoves an existing tag from a Report. via POST /reports/{report-id}/remove-tag
persona_post_reports_by_report_id_resumeWRITEResumes continuous monitoring on paused report. Requires additional permissions. via POST /reports/{report-id}/resume
persona_post_reports_by_report_id_runWRITERe-runs a continuously monitored report immediately, outside of its existing recurrence schedule. via POST /reports/{report-id}/run
persona_post_reports_by_report_id_set_tagsWRITESets all tags on a Report. Any tags that are not provided in the request will be removed. via POST /reports/{report-id}/set-tags
persona_post_theme_setsWRITECreates 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
persona_post_transactionsWRITECreates a new Transaction for a specific transaction type in your organization. via POST /transactions
persona_post_transactions_by_transaction_id_add_relationWRITEAdds 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
persona_post_transactions_by_transaction_id_add_tagWRITEAdds 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
persona_post_transactions_by_transaction_id_labelWRITECreate a new label for an existing Transaction. via POST /transactions/{transaction-id}/label
persona_post_transactions_by_transaction_id_redact_biometricsWRITEPermanently deletes biometric data for a Transaction AND all its associated objects. **This action cannot be undone**. via POST /transactions/{transaction-id}/redact-biometrics
persona_post_transactions_by_transaction_id_remove_relationWRITERemoves 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
persona_post_transactions_by_transaction_id_remove_tagWRITERemove a tag from a transaction. No effect if the transaction does not have the tag. via POST /transactions/{transaction-id}/remove-tag
persona_post_transactions_by_transaction_id_set_tagsWRITESet 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
persona_post_verification_database_businessesWRITECreate a new database business verification via POST /verification/database-businesses
persona_post_verification_database_businesses_by_verification_id_submitWRITESubmit a database business verification for processing. Can only submit `initiated` verifications via POST /verification/database-businesses/{verification-id}/submit
persona_post_verifications_by_verification_id_investigation_lockWRITELocks 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
persona_post_verifications_by_verification_id_investigation_unlockWRITEUnlocks a Verification that was previously locked from redaction during an investigation. via POST /verifications/{verification-id}/investigation-unlock
persona_post_webhook_events_searchWRITESearch 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
persona_post_webhooksWRITECreates a new webhook with response defaults. via POST /webhooks
persona_post_webhooks_by_webhook_id_archiveWRITEArchives a webhook. via POST /webhooks/{webhook-id}/archive
persona_post_webhooks_by_webhook_id_cloneWRITECreates a copy of an existing webhook. All attributes except the secret are copied over to the new webhook. via POST /webhooks/{webhook-id}/clone
persona_post_webhooks_by_webhook_id_disableWRITEDisables a webhook. via POST /webhooks/{webhook-id}/disable
persona_post_webhooks_by_webhook_id_enableWRITEEnables a webhook. via POST /webhooks/{webhook-id}/enable
persona_post_webhooks_by_webhook_id_rotate_secretWRITERotates a webhook's secret. via POST /webhooks/{webhook-id}/rotate-secret
persona_post_workflows_by_workflow_id_triggerWRITECreates a new Workflow Run. Note: The payload is arbitrary and defined by the Workflow version trigger schema. via POST /workflows/{workflow-id}/trigger
Put Persona behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.