Prove

Capability: AML / Sanctions / PEP

Market: US

Business Capabilities

Prove provides identity verification and pre-fill services tied to a customer's phone number. The flow authenticates phone possession, retrieves identity data (name, address, SSN, DOB) from authoritative sources, and optionally performs KYC/AML screening via ComplyAdvantage integration.

Flow Overview

The Prove integration follows a four-step flow:

  1. Start - Initiate the verification flow, obtain a correlation ID and (for mobile) an authentication URL.
  2. Validate - Submit the phone number for validation. On desktop, triggers an SMS challenge.
  3. Challenge - User completes possession check (OTP on desktop, redirect on mobile).
  4. Complete - Finalize the flow: retrieve pre-filled identity data and optional KYC results.

Exposed Endpoints

  • Start flow: POST /api/prove/v1/flow/start
  • Validate phone: POST /api/prove/v1/flow/validate
  • Challenge (OTP): POST /api/prove/v1/flow/challenge
  • Complete flow: POST /api/prove/v1/flow/complete

Vault Configuration

  • prove.baseUrl - Base URL of the Prove API.
  • prove.clientId - Client ID for OAuth authentication.
  • prove.clientSecret - Client secret for OAuth authentication.
  • prove.complyAdvantage.apiKey - API key for ComplyAdvantage KYC/AML screening (optional).

Request Structures and Samples

1. POST /api/prove/v1/flow/start

Initiates the Prove verification flow. The response includes a correlationId used in subsequent calls.

Request (desktop flow):

Copy
{
                "flowType": "desktop",
                "finalTargetUrl": "https://your-app.com/callback",
                "smsDeliveryMode": "text"
        }

Request (mobile flow):

Copy
{
                "flowType": "mobile",
                "finalTargetUrl": "https://your-app.com/callback"
        }

Sample response (desktop):

Copy
{
                "correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                "status": "started",
                "flowType": "desktop"
        }

Sample response (mobile):

Copy
{
                "correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                "status": "started",
                "flowType": "mobile",
                "authenticationUrl": "https://auth.prove.com/verify?session=abc123"
        }

2. POST /api/prove/v1/flow/validate

Submits the phone number for validation. On desktop, this triggers an SMS OTP to the phone.

Request:

Copy
{
                "correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                "phoneNumber": "+12025551234"
        }

Sample response:

Copy
{
                "correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
                "status": "validated",
                "phoneStatus": "active",
                "lineType": "mobile",
                "challengeRequired": true
        }

3. POST /api/prove/v1/flow/challenge

Completes the possession check. On desktop, the user submits the OTP received via SMS. On mobile, this step is handled via the redirect flow.

Request:

Copy
{
    "correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "otp": "123456"
}

Sample response:

Copy
{
    "correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "status": "challenged",
    "possessionVerified": true
}

4. POST /api/prove/v1/flow/complete

Finalizes the verification flow. Returns pre-filled identity data and optionally performs KYC/AML screening.

Request:

Copy
{
    "correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "individual": {
        "firstName": "John",
        "lastName": "Smith",
        "dateOfBirth": "1985-03-15",
        "ssn": "123456789",
        "address": {
            "line1": "123 Main Street",
            "city": "New York",
            "state": "NY",
            "zipCode": "10001"
        }
    },
    "performKyc": true
}

Sample response (with KYC):

Copy
{
    "correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "status": "completed",
    "identity": {
        "firstName": "John",
        "lastName": "Smith",
        "dateOfBirth": "1985-03-15",
        "ssn": "***-**-6789",
        "address": {
            "line1": "123 Main Street",
            "city": "New York",
            "state": "NY",
            "zipCode": "10001"
        },
        "emailAddress": "john.smith@email.com",
        "identityVerified": true,
        "trustScore": 850
    },
    "kyc": {
        "provider": "ComplyAdvantage",
        "status": "clear",
        "riskLevel": "low",
        "sanctions": {
            "matched": false,
            "lists": []
        },
        "pep": {
            "matched": false,
            "lists": []
        },
        "adverseMedia": {
            "matched": false,
            "articles": []
        },
        "searchRef": "sa-ref-abc123"
    }
}

Sample response (without KYC):

Copy
{
    "correlationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "status": "completed",
    "identity": {
        "firstName": "John",
        "lastName": "Smith",
        "dateOfBirth": "1985-03-15",
        "ssn": "***-**-6789",
        "address": {
            "line1": "123 Main Street",
            "city": "New York",
            "state": "NY",
            "zipCode": "10001"
        },
        "emailAddress": "john.smith@email.com",
        "identityVerified": true,
        "trustScore": 850
    }
}

Error Codes

Code Description
400 Bad Request - Invalid or missing parameters.
401 Unauthorized - Invalid credentials.
404 Not Found - Correlation ID not found or expired.
422 Unprocessable Entity - Phone number could not be validated.
500 Internal Server Error.