` with your legal entity or product name as agreed with Prove.
The MNOs require customers to accept carrier consent language in the customer flow before calling the endpoint in scope.
## Required language placement
| Rule | Specification |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Timing | The customer must accept the MNO consent language **before** any flow step that invokes Prove **carrier-assisted** checks covered by these MNO programs (for example **Mobile Auth** prior to downstream Pre-Fill or verification API calls). |
| Page type | MNO terms and conditions may appear on the **Landing Page** or the **Challenge Page**, per your approved UX and MSA. |
| Mobile Auth | When **Mobile Auth** is enabled, the MNO consent language must appear on the **Landing Page** and be referenced from your **Terms and Conditions** (or equivalent legal surface). |
# Verified User Connect
Source: https://developer.prove.com/reference/verified-users-connect
Learn how to use Prove Connect for secure batch identity verification via SFTP
Connect is the Prove Platform **batch verification** interface. Customers upload CSV files over **SFTP**; each valid row is verified with **[`POST /v3/verify`](/reference/verify)**. Rows that pass the **Global Fraud Policy** are enrolled in **Identity Manager**. Responses match the same fields as synchronous [`POST /v3/verify`](/reference/verify) calls.
Connect supports the `verifiedUser` and `humanAssurance` verification type.
## Scope
| Item | Specification |
| ------------ | ----------------------------------------------------------------------------- |
| Transport | SFTP to dedicated directories (`ToProve` / `FromProve`) |
| Verification | [`POST /v3/verify`](/reference/verify) per valid detail row |
| Enrollment | Successful verifications enrolled in Identity Manager |
| Result shape | Same parameters as real-time [`POST /v3/verify`](/reference/verify) responses |
## Provisioning
The following items are provided during onboarding, and some correspond to fields in the input file. See [Input file format](#input-file-format).
| Credential | Description |
| ----------------- | --------------------------------------------- |
| Enroll Key | Validates file authenticity |
| Verification Type | `verifiedUser` or `humanAssurance` |
| Directory Paths | `ToProve` (upload) and `FromProve` (download) |
| SFTP Credentials | Authentication for file transfer |
## Processing
Batch processing follows this sequence (see also the diagram).
```mermaid theme={"dark"}
sequenceDiagram
participant Customer
participant SFTP as Prove
participant API as v3/verify API
participant IDM as Identity Manager
Customer->>SFTP: Upload CSV to `ToProve` folder
loop Each valid record
SFTP->>API: POST /v3/verify
API->>SFTP: Verification result
alt Passes Global Fraud Policy
SFTP->>IDM: Enroll identity
end
end
SFTP->>Customer: Receive email notification
SFTP->>Customer: Download output file in `FromProve` folder
```
| Stage | Behavior |
| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Upload | CSV is placed in the provisioned **`ToProve`** directory via SFTP. |
| Validation | Each row is checked for required fields, phone format and country code, and region consistency with the file. If **authorization** checks fail, the **entire file** is rejected and an error response is written under **`FromProve`**. |
| Verification | Valid rows are sent to **[`POST /v3/verify`](/reference/verify)**; response fields align with the live API. |
| Enrollment | Rows that pass the Global Fraud Policy are enrolled in Identity Manager. |
| Delivery | When processing completes, an **email** notification is sent; the output file is available under **`FromProve`**. |
## File requirements
Input and output CSVs use the structures below. File names must follow the naming pattern.
### Naming convention
`{client_name}_{region}_{verification_type}_YYYYMMDDHHMMSS.csv`
| Component | Values | Description |
| ------------------- | ---------------------------------- | -------------------------------------------- |
| `client_name` | Agreed during setup | Organization identifier |
| `region` | `US` or `INTL` | `US` — US and Canada; `INTL` — international |
| `verification_type` | `verifiedUser` or `humanAssurance` | Verification type |
### Input file format
Each batch file uses a **Header → Detail(s) → Trailer** layout so Prove can validate the service type and record count.
#### Header record (input)
| Column | Sample value | Required |
| ----------------- | ---------------------------------- | ---------------- |
| Record Type | `H` | Yes — always `H` |
| Enroll Key | `SecretKey` | Yes |
| Verification Type | `verifiedUser` or `humanAssurance` | Yes |
#### Detail records (input)
| Column | Sample value | Required | Description |
| ------------------ | -------------- | -------------------------- | ------------------------------------------------------------------- |
| Record Type | `D` | Yes — always `D` | |
| Phone Number | `+12008040444` | Yes — include country code | |
| First Name | `John` | Yes for `verifiedUser` | |
| Last Name | `Doe` | Yes for `verifiedUser` | |
| Client Customer ID | `zaq12wsx` | No | |
| Attribute Type | `userId` | Yes for partners | Metadata type for the attribute value. |
| Issuer ID | `AcmeWallet` | Yes for partners | Partner company name. |
| Attribute Value | `A4B1F13BCCFC` | Yes for partners | Non-PII unique value for the consumer for the given attribute type. |
#### Trailer record (input)
| Column | Sample value | Required |
| ----------------- | ------------ | ---------------- |
| Record Type | `T` | Yes — always `T` |
| Number of Records | `132789` | Yes |
There is **no formal cap** on input file size or detail record count per file. When splitting work across uploads, Prove recommends **800,000 detail records or fewer per file**. Verification throughput is subject to **Data Partner transactions-per-second (TPS)** limits; **completion time** varies with detail record count and effective throughput.
#### Example file (input)
```csv theme={"dark"}
H,ENROLL_KEY_US_123,verifiedUser
D,+12008040444,Sara,Hu,xsw23edc,userId,AcmeWallet,A4B1F13BCCFC
D,+12005551234,John,Doe,abc12345,,,
T,2
```
### Output file format
After processing, Prove writes an output file to **`FromProve`**. It mirrors the input layout and appends verification fields (for example assurance level, identity attributes, status).
#### Header record (output)
| Column | Sample value | Notes |
| ----------- | ------------ | ---------- |
| Record Type | `H` | Always `H` |
#### Detail records (output)
| Column | Sample value | Notes |
| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------- | ------------------- |
| Record Type | `D` | Always `D` |
| Phone Number | `+12008040444` | |
| First Name | `John` | |
| Last Name | `Doe` | |
| Client Customer ID | `zaq12wsx` | If present on input |
| Attribute Type | `userId` | |
| Issuer ID | `AcmeWallet` | |
| Attribute Value | `A4B1F13BCCFC` | |
| Assurance Level | `AL2` | If successful |
| Assurance Level Reason Codes | `AL2a`, `AL2b` | If successful |
| Prove Phone Alias | `474628DC4VK83842DB25DA4B1F13BCCFC0MEK4P664Z9PCC6E6C3CB92DC40191E5E868E5E38B1AC85F6G359B74880097B63C51E7E8636B33FA344CB8E` | If successful |
| ProveID | `6b942541-abab-40ed-9970-5a28217836c0` | If successful |
| Error | `200` | |
| Error Message | `NA` | |
| GFP Authentication Result | `pass` | If successful |
| GFP Risk Result | `pass` | If successful |
Only the top-level identity is included in the output; additional identities are omitted.
#### Trailer record (output)
| Column | Sample value | Notes |
| ----------------- | ------------ | ---------- |
| Record Type | `T` | Always `T` |
| Number of Records | `132789` | |
### Error file format
Rows that fail **validation** are written to a separate error file under **`FromProve`**, with machine-readable codes.
| Error Code | Description |
| ----------------------------------------- | ----------------------------------- |
| `ERR_MISSING_FNAME` | First name is missing when required |
| `ERR_MISSING_LNAME` | Last name is missing when required |
| `ERR_MISSING_PHONE` | Phone number is missing |
| `ERR_FORMAT_PHONE` | Invalid phone number format |
| `ERR_PHONE_COUNTRY_NOTSUPPORTED` | Phone country not supported |
| `ERR_DUPLICATE_RECORD_ORIGINAL_PRESERVED` | Duplicate record detected |
US phone numbers must not appear in international-region files, and international numbers must not appear in US-region files; mismatches produce row errors.
#### Header record (error file)
| Column | Sample value | Notes |
| ----------------- | ---------------------------------- | ---------- |
| Record Type | `H` | Always `H` |
| Verification Type | `verifiedUser` or `humanAssurance` | |
#### Detail records (error file)
| Column | Sample value | Notes |
| ------------------ | ------------------- | ------------------- |
| Record Type | `D` | Always `D` |
| Phone Number | `+12008040444` | |
| First Name | `John` | |
| Last Name | `Doe` | |
| Client Customer ID | `zaq12wsx` | If present on input |
| Error Attribution | `ERR_MISSING_FNAME` | |
#### Trailer record (error file)
| Column | Sample value | Notes |
| ----------------- | ------------ | ---------- |
| Record Type | `T` | Always `T` |
| Number of Records | `132789` | |
## Notifications
### Email alerts
| Event | Email sent | Body |
| --------------------------- | -------------------- | ----------------------------------------------- |
| File rejected | Yes, when configured | Rejection details per onboarding configuration. |
| File processed successfully | Yes, when configured | Includes **data quality statistics**.. |
# Verify
Source: https://developer.prove.com/reference/verify
openapi.yaml POST /v3/verify
Runs Prove verification flows in one endpoint. Set `verificationType` in the request body to select the flow.
For **`/v3/verify`**, request and response fields depend on the **`verificationType`** and product flow. See the verify guides for flow-specific request and response details:
* [Human Assurance](https://developer.prove.com/how-to/human-assurance-verify)
* [Verified User](https://developer.prove.com/how-to/verified-users-verify)
* [Account Opening](https://developer.prove.com/how-to/account-opening-verify)
* [Pre-Fill for Consumers](https://developer.prove.com/how-to/pre-fill-for-consumers-verify)
* [Pre-Fill for Business](https://developer.prove.com/how-to/pre-fill-for-business-verify)
# Verify Your Mobile Page Requirements - Mobile Auth℠
Source: https://developer.prove.com/reference/verify-your-mobile-page-requirements-mobile-authsm
Required page summary copy for the Verify your mobile step when using Mobile Auth with SMS OTP (mobile) or Instant Link (desktop) in Pre-Fill for Consumers.
## Scope
UI rules for the **verify mobile** step (OTP and Instant Link) in Pre-Fill for Consumers when using \*\*Mobile Auth℠.
## OTP
### Page summary
| Flow | Required copy |
| :----- | :----------------------------------------------------------------------------- |
| Mobile | Enter verification code. Please enter the code we just sent to (XXX) XXX-XXXX. |
## Instant Link
### Page summary
| Flow | Required copy | |
| :------ | :------------------------------------------------------------------------------------------------------------------------------- | - |
| Desktop | Check your Phone. A text message with a link was just sent to the phone ending in XXXX (the last 4 digits of the mobile number). | |
## Alternate path
If the customer does not complete **Instant Link** or **SMS OTP**, they **exit the Prove flow**. Provide a **manual** verification path outside Prove.
# Get started with Prove API authentication
Source: https://developer.prove.com/tutorial/access-api-keys
Obtain Sandbox credentials from the Developer Portal, request an OAuth 2.0 bearer token, and make your first authenticated Platform API call.
## Get started
**Prerequisites**
* **Portal account** — A registered account on the [Portal](https://portal.prove.com/auth/login).
* **Local tools** — A terminal with **cURL**, or an HTTP client such as Postman, to run the requests in this tutorial.
**What you'll learn**
By the end of this tutorial, you will have:
* Opened a **project** in the Developer Portal and copied your Sandbox **client ID** and **client secret**
* Exchanged them for an **OAuth 2.0 bearer token** using `POST /token`
Sign in to the Developer Portal.
Select **Create Project**. Select an existing project or create one.
Create a project, choose the solution that matches your use case, name the project, then select **Create Project**.
Open the **Credentials** tab for your project. Copy the **client ID** and **client secret** you will use for Sandbox (`uat`). You will paste them into the token request in the next step.
Prove Platform APIs use **OAuth 2.0 client credentials**. Send a **POST** to the **token** endpoint with `Content-Type: application/x-www-form-urlencoded` and your values in place of the placeholders.
If you are testing outside North America, use the **EU** token host and the **International** credentials from your project: `https://platform.uat.eu.proveapis.com/token`.
```bash Request bearer token (US Sandbox) theme={"dark"}
curl -X POST https://platform.uat.proveapis.com/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET"
```
```bash Request bearer token (EU Sandbox) theme={"dark"}
curl -X POST https://platform.uat.eu.proveapis.com/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET"
```
```json Example token response theme={"dark"}
{
"access_token": "eyJ...",
"refresh_token": "eyJ...",
"refresh_expires_in": 3600,
"token_type": "Bearer",
"expires_in": 3600
}
```
Copy the **`access_token`** value. You will send it as a **Bearer** token on API calls.
If a Platform request returns **HTTP 403 Forbidden**, double-check the **URL**, **HTTP method**, and **Content-Type** for that operation. A frequent mistake is treating the [token](/reference/token-request) URL like a versioned API path (for example adding **`/v3`**). See [HTTP 403](/reference/status-and-error-codes#http-403) on the errors reference page.
# Build Prove with LLMs
Source: https://developer.prove.com/explanation/build-with-llm
How Prove’s documentation is structured for machine readability and LLM-assisted integration work.
## Concepts and definitions
To better understand the technical infrastructure of Prove’s documentation, here are the key concepts and terms used:
* **Machine Readability:** The design of content in a format that can be processed and "understood" by computer programs or AI, rather than just being optimized for human visual consumption.
* **LLM (Large Language Model):** AI systems that process and generate human-like text, commonly reached through chat interfaces or APIs.
## Plain text docs
Prove designs its documentation for AI consumption. Every page maintains a parallel Markdown representation accessible via the `.md` extension—for example, [this page as Markdown](https://developer.prove.com/explanation/build-with-llm.md). That helps AI tools and agents consume Prove content.
| Feature | Markdown (.md) | HTML/JS Rendered Pages |
| :----------------------- | :-------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------- |
| **Token Efficiency** | **High.** Minimal syntax means more actual content fits in the context window. | **Low.** Dense with tags (``, ``) and scripts that waste tokens. |
| **Data Extraction** | **Direct.** Content is ready to be parsed as-is without extra processing. | **Complex.** Requires a browser engine to execute JS before content is visible. |
| **Content Visibility** | **Complete.** Includes all text, including content hidden in UI tabs or toggles. | **Partial.** Hidden or "lazy-loaded" content is often missing from the initial scrape. |
| **Contextual Hierarchy** | **Explicit.** Headers (`#`, `##`) signal the importance and relationship of data. | **Inferred.** AI must guess hierarchy based on nested tags or CSS classes. |
| **Formatting Noise** | **Minimal.** Focuses on the data, reducing the risk of the AI getting distracted. | **Significant.** Inline styles and attributes add "noise" to the signal. |
Prove hosts /llms.txt and /llms-full.txt files which instruct AI tools and agents how to retrieve the plain text versions of Prove pages. The /llms.txt file is an [emerging standard for making websites and content more accessible to LLMs](https://llmstxt.org/).
## Contextual menu
Plain Markdown and `/llms.txt` help tools *find* content. The harder part is getting the **page you are reading** into an assistant or agent **without fragile copy-paste**. The **contextual menu** at the top of each page is where you turn the current doc into **grounding context**: copy text, open Markdown, or connect to assistants and editor tooling.
## Model Context Protocol (MCP)
The Prove [Model Context Protocol (MCP)](https://developer.prove.com/explanation/model-context-protocol) exposes tools that AI agents can use to search Prove’s documentation and read full pages from a virtual documentation filesystem.
# Model Context Protocol (MCP)
Source: https://developer.prove.com/explanation/model-context-protocol
What Prove’s hosted Model Context Protocol server is—how assistants search documentation and read pages—and how to connect using your own MCP-capable client.
## Prove MCP overview
The Prove **Model Context Protocol (MCP)** server exposes tools to connected AI clients so assistants can **search** Prove documentation and **read** full pages from a virtual documentation filesystem. It complements other doc access patterns such as [plain Markdown and `llms.txt`](https://developer.prove.com/explanation/build-with-llm).
If your team uses AI-powered editors, you can point your client at Prove’s **hosted** MCP endpoint—no separate Prove package to run on your infrastructure for this service.
## Hosted endpoint
Prove hosts an [MCP server](https://developer.prove.com/mcp). Register this URL in your MCP client using that product’s workflow for **HTTP** MCP servers. Exact steps depend on the vendor; follow their documentation for adding or enabling MCP servers, ensure your network allows HTTPS to `developer.prove.com`, then confirm the **prove** (or equivalent) server appears connected in the client’s MCP or tools UI.
## MCP resources (`skill.md`)
The MCP server exposes **[`skill.md` files](https://mintlify.com/docs/ai/skillmd) as MCP resources** so agents discover capability descriptions without installing those files separately. Resources appear in the MCP resource list alongside the tools below.
## Tools available to assistants
Tools are exposed to connected AI clients as follows.
### `search_prove`
Search across the Prove knowledge base to find relevant information, code examples, API references, and guides. Use this tool when you need to answer questions about Prove, find specific documentation, understand how features work, or locate implementation details. The search returns contextual content with titles and direct links to the documentation pages.
If you need the full content of a specific page, use the `query_docs_filesystem_prove` tool to `head` or `cat` the page path (append `.mdx` to the path returned from search — for example, `head -200 /api-reference/create-customer.mdx`).
Optional parameters for `search_prove` (when the client passes them through) include:
* **`pageSize`** — Number of results to return, between **1** and **50**; defaults to **10**.
* **`scoreThreshold`** — Minimum relevance score between **0** and **1**; filters out lower-confidence matches.
* **`version`** — Restrict results to a documentation version tag.
### `query_docs_filesystem_prove`
Run a read-only shell-like query against a virtualized, in-memory filesystem rooted at `/` that contains **only** the Prove documentation pages and OpenAPI specs. This is **not** a shell on any real machine — nothing runs on the user's computer, the server host, or any network. The filesystem is a sandbox backed by documentation chunks.
This is how you read documentation pages: there is no separate “get page” tool. To read a page, pass its `.mdx` path (for example, `/quickstart.mdx`, `/api-reference/create-customer.mdx`) to `head` or `cat`. To search the docs with exact keyword or regex matches, use `rg`. To understand the docs structure, use `tree` or `ls`.
**Workflow:** Start with the search tool for broad or conceptual queries like “how to authenticate” or “rate limiting”. Use `query_docs_filesystem_prove` when you need exact keyword or regex matching, structural exploration, or to read the full content of a specific page by path.
**Supported commands:** `rg` (ripgrep), `grep`, `find`, `tree`, `ls`, `cat`, `head`, `tail`, `stat`, `wc`, `sort`, `uniq`, `cut`, `sed`, `awk`, `jq`, plus basic text utilities. No writes, no network, no process control. Run `--help` on any command for usage.
**Stateless calls:** Each call is stateless: the working directory always resets to `/` and no shell variables, aliases, or history carry over between calls. If you need to operate in a subdirectory, chain commands in one call with `&&` or pass absolute paths (for example, `cd /api-reference && ls` or `ls /api-reference`). Do **not** assume that `cd` in one call affects the next call.
**Examples**
* `tree / -L 2` — see the top-level directory layout
* `rg -il "rate limit" /` — find all files mentioning “rate limit”
* `rg -C 3 "apiKey" /api-reference/` — show matches with three lines of context around each hit
* `head -80 /quickstart.mdx` — read the top 80 lines of a specific page
* `head -80 /quickstart.mdx /installation.mdx /guides/first-deploy.mdx` — read multiple pages in one call
* `cat /api-reference/create-customer.mdx` — read a full page when you need everything
* `cat /openapi/spec.json | jq '.paths | keys'` — list OpenAPI endpoints
Output is truncated to 30KB per call. Prefer targeted `rg -C` or `head -N` over broad `cat` on large files. To read only the relevant sections of a large file, use `rg -C 3 "pattern" /path/file.mdx`. Batch multiple file reads into a single `head` or `cat` call whenever possible.
## Rate limits
The following **hourly rate limits** are used so the service stays available:
* **Per user (IP address)** — **5,000** requests per hour for **MCP server configuration** queries.
* **Search** — **10,000** search tool calls per hour for the public MCP path; **5,000** per hour when using **authenticated** search quotas.
* **Query docs filesystem** — **10,000** filesystem tool calls per hour for the public MCP path.
These limits are **in addition** to the **\~30 KB per-call** response truncation for `query_docs_filesystem_prove` described above. If you hit throttling, narrow queries, batch reads, and space out tool calls.
# Secure API credentials
Source: https://developer.prove.com/how-to/secure-api-credentials
How to store, rotate, and govern Prove client IDs, client secrets, and bearer tokens in development and production.
Secret API keys and client credentials behave like account passwords. If they are exposed, they can be abused against your integration and data.
You are responsible for protecting Prove credentials in your environments. Use this guide as a baseline; align it with your security program and any obligations in your agreement with Prove.
## Protect against compromised credentials
* **Use a key management system (KMS) or secrets manager for production secrets.** When you create or rotate a production client secret, store it only in a system designed for secrets (encryption at rest, access control, audit). Avoid leaving copies in local files or shared drives.
* **Limit who can create, read, or rotate keys.** Define ownership, use least privilege, and review access periodically.
* **Do not share secrets in email, chat, or support tickets.** Use approved secret-handling channels only.
* **Do not commit secrets to source control.** Public repositories are actively scanned; private repos still leak through clones and tooling. Use environment variables or your CI/CD secret store, never literals in code.
* **Do not embed client secrets or long-lived tokens in client-side apps.** Mobile binaries and front-end JavaScript can be reverse-engineered; anything shipped to the device should be treated as public.
* **Monitor API usage.** Review logs for unusual patterns and ensure Sandbox credentials are not used against Production endpoints (and vice versa).
* **Train your team and document your process.** Keep internal runbooks current for onboarding, incident response, and rotation.
* **Rotate credentials on a schedule and after suspected exposure.** Rotating client secrets and invalidating old values limits blast radius if a secret was leaked without your knowledge.
For HTTP errors when calling Platform APIs, see [Errors and status codes](/reference/status-and-error-codes).
# Assurance Levels
Source: https://developer.prove.com/reference/assurance-levels
Understand Prove's Assurance Levels (AL) and how they indicate the confidence in a verified identity.
## Definition
In [`POST /v3/verify`](/reference/verify) responses, the **identity** object includes:
| Field | Role |
| :--------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `assuranceLevel` | Tier such as `AL-1`, `AL0`, `AL1`, `AL2`, or `AL3`. Higher tiers indicate stronger confidence in the association between the phone number and the identity. |
| `reasons` | One or more reason codes from the tables below (for example `-1A`, `1B`). |
Tiers are ordered from lowest (AL-1) to highest (AL3).
## Reason codes
### AL-1
| Reason code | Description |
| :---------- | :----------------------------------------------------------------------------------------------------- |
| -1A | Too many identities bound to a single phone number. |
| -1F | Premium rate number globally or listed on the US Override Services Registry (OSR) registry. |
| -1G | Online rentable temporary eSIM or VoIP number. |
| -1H | Online rentable temporary eSIM or VoIP number, with high activity. This indicates fraudulent activity. |
### AL0
| Reason code | Description |
| :---------- | :------------------------------------------------------------------------------------------------------------ |
| 0B | Country doesn't give behavioral data. |
| 0C | Assigned number with no behavioral activity. |
| 0D | Short tenure, no activity. Reclassifies to AL0E if activity appears. |
| 0E | Short tenure with behavioral activity present. |
| 0F | Activity volume exceeds normal human thresholds. |
| 0G | Pagers or other non-standard line types. Behavioral signals incompatible with standard identity verification. |
### AL1
| Reason code | Description |
| :---------- | :-------------------------------------------------------------------------------------------------------- |
| 1A | Enough ownership tenure and longitudinal human behavior. |
| 1B | Tenure and longitudinal human behavior with Prove binding phone to a specific identity, superseding AL1A. |
| 1D | Low longitudinal behavior but human signals such as ports, calls, or logins indicate not an eSIM bot. |
### AL2
| Reason code | Description |
| :---------- | :---------------------------------------------------------------------------- |
| 2A | Prove has seen this phone and identity before at moderate-to-high confidence. |
| 2B | Prove corroborated data across more than one identity data source. |
### AL3
| Reason code | Description |
| :---------- | :------------------------------------------------------------------------------------------------------ |
| 3A | Prove has seen this phone and identity before at high confidence, this is this person's primary number. |
# Global fraud policy
Source: https://developer.prove.com/reference/global-fraud-policy
Evaluation categories and failure reason codes in the evaluation object on Prove Platform API responses.
## Definition
The **Global Fraud Policy (GFP)** drives pass/fail outcomes and machine-readable failure reasons in the **`evaluation`** object returned by Prove Platform APIs (for example [`POST /v3/complete`](/reference/complete-request)).
GFP classifies each transaction into one or more of the following categories:
| Category | Evaluates |
| :------------- | :----------------------------------------------------------------------------------------------------- |
| Identification | Consistency of personal details (for example name, address, date of birth, national identifier). |
| Authentication | Whether the claimant matches the identity and phone possession signals. |
| Compliance | Regulatory and program requirements for the industry and use case. |
| Risk | Factors outside identification and authentication (for example behavioral or carrier-related signals). |
## Response examples
Representative **`evaluation`** payloads from **`POST /v3/complete`**.
**Pass**
```json theme={"dark"}
{
"success": true,
"next": {
"done": "done"
},
"evaluation": {
"authentication": {
"result": "pass"
},
"identification": {
"result": "pass"
}
}
}
```
**Fail** (with `failureReasons`)
```json theme={"dark"}
{
"success": false,
"next": {
"done": "done"
},
"evaluation": {
"authentication": {
"result": "fail",
"failureReasons": {
"9161": "Very short tenure association between phone number and identity.",
"9171": "Potential injection attack due to 2 identities both with short tenure association to the phone number.",
"9180": "No phone ownership confirmed using 4 elements."
}
},
"identification": {
"result": "fail",
"failureReasons": {
"9001": "Identification isn't confirmed using 4 elements."
}
}
}
}
```
## Failure reason codes
| Code | Category | Description |
| :--- | :------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 9001 | Identification | Identification isn't confirmed using 4 elements. |
| 9003 | Identification | Identity isn't found |
| 9004 | Identification | Identification isn't confirmed using 4 elements with secondary source. |
| 9005 | Identification | Identification isn't confirmed using 4 elements with more than 1 source. |
| 9011 | Identification | Identification isn't confirmed using less than 4 elements. |
| 9012 | Identification | SSN doesn't match. |
| 9013 | Identification | Birth Date doesn't match. |
| 9014 | Identification | Name doesn't match. |
| 9015 | Identification | Address doesn't match. |
| 9081 | Identification | SSN is issued before the birth date. |
| 9082 | Identification | Address is a correctional facility. |
| 9083 | Identification | Deceased indicator is present for individual. |
| 9100 | Authentication | Phone possession incomplete. Occurs when `/validate` is called before the Mobile Auth or OTP possession flow completes. |
| 9101 | Authentication | Phone number doesn't match Prove Key. Rebind required. |
| 9131 | Authentication | Indicates the phone number is at a higher risk for fraud due to being listed as a non-mobile line on the Override Services Registry (OSR). |
| 9132 | Authentication | This phone number is listed on a public website with the contents of its text messages posted publicly to allow a user to bypass phone possession check controls. |
| 9133 | Authentication | The phone isn't trusted based on the SIM Key Trust Score. |
| 9134 | Authentication | The phone isn't trusted because it's a non-fixed VoIP number. |
| 9135 | Authentication | Potential account takeover (ATO) due to recent SIM Swap under 24 hours. |
| 9136 | Authentication | Potential ATO due to recent Port under 24 hours. |
| 9137 | Authentication | Potential ATO due to call forwarding enabled for phone number. |
| 9161 | Authentication | Short tenure association between phone number and identity. |
| 9162 | Authentication | Short tenure association between phone number and identity. |
| 9163 | Authentication | Potential recycled phone fraud due to a high number of identities associated to phone number with a newer owner present. |
| 9164 | Authentication | Potential recycled phone fraud due to identity having no recent association to phone number and a phone disconnect event is observed after the phone association. |
| 9165 | Authentication | Potential recycled phone fraud due to a newer owner observed and a phone disconnect event is observed after the phone association. |
| 9166 | Authentication | Address is a correctional facility. |
| 9167 | Authentication | Deceased indicator is present for individual. |
| 9168 | Authentication | Person verification was performed indicating phone ownership isn't verified |
| 9171 | Authentication | Potential injection attack due to 2 identities both with short tenure association to the phone number. |
| 9172 | Authentication | Potential injection attack due to 3 identities all with short tenure association to the phone number. |
| 9173 | Authentication | Potential injection attack due to 4 identities all with short tenure association to the phone number. |
| 9174 | Authentication | Potential injection attack due to 5 or more identities all with short tenure association to the phone number. |
| 9175 | Authentication | No active identity can be associated with the phone number. |
| 9176 | Authentication | The phone number and identity is strongly associated negative bot activity. |
| 9177 | Authentication | No information can be found for the identity or phone number. |
| 9180 | Authentication | No phone ownership confirmed using 4 elements. |
| 9181 | Authentication | No phone ownership confirmed using less than 4 elements |
| 9201 | Compliance | Anti-Money Laundering (AML) alerts are present for this identity. |
| 9301 | Risk | No historical behavioral activity. |
| 9302 | Risk | Suspicious large amount recent of activity. |
| 9303 | Risk | Unusual amount of recent carrier phone number change events. |
| 9304 | Risk | Suspicious large amount recent of activity across different identity attributes. |
# Revoke Device
Source: https://developer.prove.com/reference/revoke-request
post /v3/device/revoke
This endpoint allows you to revoke a Prove Key device, marking it as inactive
so it can no longer be used in an auth flow.
# Request OAuth Token
Source: https://developer.prove.com/reference/token-request
openapi-token.yaml post /token
This endpoint allows you to request an OAuth token.
# Bind Prove Key
Source: https://developer.prove.com/reference/unify-bind-request
openapi-unify.yaml post /v3/unify-bind
This endpoint allows you to bind a Prove Key to a phone number of a Unify session and get the possession result.
# Initiate Possession Check
Source: https://developer.prove.com/reference/unify-request
openapi-unify.yaml post /v3/unify
This endpoint allows you to initiate the possession check.
# Check Status
Source: https://developer.prove.com/reference/unify-status-request
openapi-unify.yaml post /v3/unify-status
This endpoint allows you to check the status of a Unify session and get the possession result.
# Verify
Source: https://developer.prove.com/reference/verify
openapi.yaml POST /v3/verify
Runs Prove verification flows in one endpoint. Set `verificationType` in the request body to select the flow.
For **`/v3/verify`**, request and response fields depend on the **`verificationType`** and product flow. See the verify guides for flow-specific request and response details:
* [Human Assurance](https://developer.prove.com/how-to/human-assurance-verify)
* [Verified User](https://developer.prove.com/how-to/verified-users-verify)
* [Account Opening](https://developer.prove.com/how-to/account-opening-verify)
* [Pre-Fill for Consumers](https://developer.prove.com/how-to/pre-fill-for-consumers-verify)
* [Pre-Fill for Business](https://developer.prove.com/how-to/pre-fill-for-business-verify)