EchoVerify API Documentation

Base URL: https://echoverify.ng/api/v1

Authentication

X-API-Key: ev_test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
X-Environment: test | live
Content-Type: application/json

1. Sandbox Test Data

Official simulator values for testing in X-Environment: test.

Success Simulation Data

Nigeria

BVN: 11111111111
vNIN: YV111111111111FY
NIN: 11111111111
Passport: A11111111
NDL (Driver License): AAA11111AA11
PVC: 11A1A1A111111111111
Phone Number: 08000000001
Bank Account: 1111111111
Company Search (country NG): RC11111111

Ghana

SSNIT: C987464748983, C037363637123
Drivers License: 070644, 752721
Passport: G0000575, G0000603
Voters Card: 9001330456, 9001332866

Kenya

Passport: A2081731, A1998653
National ID: 25219798, 28078627, 237721480

Failure Simulation Data

Nigeria

BVN: 00000000000
vNIN: YV000000000000FY
NIN: 00000000000
Passport: A00000000
NDL (Driver License): AAA00000AA00
PVC: 00A0A0A000000000000
Phone Number: 08000000000
Bank Account: 1000000000
Company Search (country NG): RC00000000
TIN: 00000000-0000

Ghana

SSNIT: C000000000000
Drivers License: 000000
Passport: G0000000
Voters Card: 0000000000

Kenya

Passport: AA0000000
National ID: 00000000

2. List Verification Products

GET /products

Sample Response

{
  "data": [
    {
      "id": 1,
      "name": "NIN Verification",
      "slug": "nin-verification",
      "price": 120
    },
    {
      "id": 2,
      "name": "BVN Verification",
      "slug": "bvn-verification",
      "price": 144
    }
  ]
}

3. Listings (Banks and Other Metadata)

GET /listings?type={type}

Supported types: banks, countries, document-types, id-types

Optional query params: country, search

Bank List Request

GET /listings?type=banks&country=NG

Sample Response

{
  "type": "banks",
  "status": true,
  "message": "Listing fetched successfully.",
  "count": 3,
  "data": [
    { "name": "Guaranty Trust Bank", "code": "058", "slug": "" },
    { "name": "Access Bank", "code": "044", "slug": "" },
    { "name": "First Bank", "code": "011", "slug": "" }
  ]
}

Other Listing Requests

GET /listings?type=countries
GET /listings?type=document-types
GET /listings?type=id-types&search=passport

4. Run Verification

POST /verify

NIN Example Request

{
  "product_slug": "nin-verification",
  "payload": {
    "id": "25082691216",
    "isSubjectConsent": true
  }
}

BVN Example Request

{
  "product_slug": "bvn-verification",
  "payload": {
    "id": "22345678901",
    "isSubjectConsent": true
  }
}

International Passport Example Request

{
  "product_slug": "passport-verification",
  "payload": {
    "id": "A12345678",
    "lastName": "DOE",
    "isSubjectConsent": true
  }
}

Driver License Example Request

{
  "product_slug": "driver-license-verification",
  "payload": {
    "id": "AAA11111AA11",
    "isSubjectConsent": true
  }
}

Bank Account Example Request

{
  "product_slug": "bank-account-verification",
  "payload": {
    "account_number": "0123456789",
    "bank_code": "058"
  }
}

CAC Example Request

{
  "product_slug": "cac-verification",
  "payload": {
    "registrationNumber": "RC11111111",
    "isConsent": true
  }
}

Business Verification Example Request

{
  "product_slug": "business-verification",
  "payload": {
    "registrationNumber": "RC11111111",
    "countryCode": "NG",
    "isConsent": true
  }
}

Document Verification Example Request

{
  "product_slug": "document-verification",
  "payload": {
    "document_type": "passport",
    "document_number": "A12345678",
    "country": "NG"
  }
}

Sample Success Response

{
  "reference": "EV-VER-ABCDEFG123456",
  "status": "success",
  "charged": 120,
  "image_urls": [
    "https://.../selfie.jpg",
    "https://.../document.jpg"
  ],
  "echoverify_response": {
    "status": true,
    "message": "Verification completed successfully.",
    "data": {
      "first_name": "John",
      "last_name": "Doe",
      "date_of_birth": "1994-01-10"
    },
    "http_status": 200
  }
}

Sample Failed Response (Auto-refund applies)

{
  "reference": "EV-VER-HIJKLMN654321",
  "status": "failed",
  "charged": 120,
  "image_urls": [],
  "echoverify_response": {
    "status": false,
    "message": "Verification could not be completed.",
    "data": null,
    "http_status": 404
  }
}

5. Face Match Verification

POST /verify
{
  "product_slug": "face-match-verification",
  "payload": {
    "image": "data:image/jpeg;base64,/9j/4AAQSkZJRg...",
    "selfie_image": "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
  }
}

Sample Response

{
  "reference": "EV-VER-FACEMATCH12345",
  "status": "success",
  "charged": 264,
  "echoverify_response": {
    "status": true,
    "message": "Verification completed successfully.",
    "data": {
      "match": true,
      "match_score": 0.94
    },
    "http_status": 200
  }
}

6. Liveness Verification

POST /verify
{
  "product_slug": "liveness-verification",
  "payload": {
    "image": "data:image/jpeg;base64,/9j/4AAQSkZJRg...",
    "isSubjectConsent": true
  }
}

Sample Response

{
  "reference": "EV-VER-LIVENESS12345",
  "status": "success",
  "charged": 264,
  "echoverify_response": {
    "status": true,
    "message": "Verification completed successfully.",
    "data": {
      "is_live": true,
      "confidence": 0.98
    },
    "http_status": 200
  }
}

7. AML Name Screening

EchoVerify accepts aliases like first_name/last_name and maps them to provider-required fields automatically.

POST /verify
{
  "product_slug": "aml-name-screening",
  "payload": {
    "query": "John Doe",
    "type": "individual",
    "advancedSearch": {
      "country": "NG"
    }
  }
}

Sample Response

{
  "reference": "EV-VER-AMLNAME123456",
  "status": "success",
  "charged": 144,
  "echoverify_response": {
    "status": true,
    "message": "Verification completed successfully.",
    "data": {
      "is_match": false,
      "risk_level": "low",
      "watchlists_checked": ["pep", "sanctions"]
    },
    "http_status": 200
  }
}

8. PEP and Sanctions Screening

Use domestic-pep-screening for dedicated PEP checks, and AML screening products for sanctions/watchlist checks.

EchoVerify maps common aliases (for example id, wallet_address, full_name) to required provider schema.

POST /verify

PEP Example

{
  "product_slug": "domestic-pep-screening",
  "payload": {
    "fullName": "Jane Smith"
  }
}

Sanctions Example (via AML Identity)

{
  "product_slug": "aml-identity-screening",
  "payload": {
    "query": "22345678901",
    "type": "individual",
    "advancedSearch": {
      "country": "NG"
    }
  }
}

AML Crypto Example

{
  "product_slug": "aml-crypto-screening",
  "payload": {
    "query": "0x742d35Cc6634C0532925a3b844Bc454e4438f44e",
    "type": "wallet"
  }
}

9. KYT Requests (All)

Supported KYT product slugs: kyt-create-individual-client, kyt-create-business-client, kyt-risk-assessment

EchoVerify maps simplified aliases like type, external_id, business_name, and registration_number into provider KYT schema automatically.

POST /verify

KYT Create Individual Client

{
  "product_slug": "kyt-create-individual-client",
  "payload": {
    "actorType": "individual",
    "externalAccountId": "CUST-1001",
    "firstName": "Ada",
    "lastName": "Okafor",
    "KycVerifiedBy": "not_verified"
  }
}

KYT Create Business Client

{
  "product_slug": "kyt-create-business-client",
  "payload": {
    "actorType": "legal_entity",
    "externalAccountId": "BIZ-2044",
    "businessName": "Acme Holdings Ltd",
    "customerSegmentation": ["business clients"],
    "KycVerifiedBy": "not_verified",
    "legalEntity": {
      "type": "limited liability",
      "industryClassification": "general",
      "registrationNumber": "RC123456",
      "countryOfIncorporation": "NG"
    },
    "accountNumbers": [
      {
        "accountType": "business",
        "accountNumber": "BIZ-2044",
        "domicile": "NG",
        "accountCreationDate": "2026-01-01"
      }
    ],
    "addresses": [
      {
        "addressType": "office",
        "line1": "N/A",
        "postCode": "000000",
        "city": "Lagos",
        "state": "Lagos",
        "country": "NG",
        "lengthOfStay": "1"
      }
    ],
    "legalEntityDirectors": [
      {
        "name": "Primary Director",
        "sourceOfIncome": "business",
        "phoneNumbers": [{"countryCode":"234","phone":"0000000000"}],
        "emails": ["director@example.com"],
        "uniqueIdentifier": [{"issuingCountry":"NG","idType":"other","idNumber":"N/A"}]
      }
    ]
  }
}

KYT Risk Assessment

{
  "product_slug": "kyt-risk-assessment",
  "payload": {
    "id": "actor_12345",
    "country": "NG"
  }
}

Sample KYT Risk Response

{
  "reference": "EV-VER-KYTRISK998877",
  "status": "success",
  "charged": 360,
  "echoverify_response": {
    "status": true,
    "message": "Verification completed successfully.",
    "data": {
      "risk_score": 31,
      "risk_level": "medium"
    },
    "http_status": 200
  }
}

10. Fetch Verification Details

GET /verifications/{reference}

Sample Response

{
  "reference": "EV-VER-ABCDEFG123456",
  "status": "success",
  "environment": "test",
  "charged": 120,
  "outcome_image_url": "https://.../selfie.jpg",
  "image_urls": ["https://.../selfie.jpg"],
  "product": {
    "id": 1,
    "name": "NIN Verification",
    "slug": "nin-verification"
  },
  "echoverify_response": {
    "status": true,
    "message": "Verification completed successfully.",
    "data": {
      "first_name": "John",
      "last_name": "Doe"
    },
    "http_status": 200
  },
  "created_at": "2026-02-28T14:40:02.000000Z"
}

11. Account Snapshot

GET /me

Sample Response

{
  "company": "Acme Corp",
  "email": "client@acme.com",
  "wallet_balance": 19880,
  "active_keys": 2
}

cURL Samples

curl -X GET 'https://echoverify.ng/api/v1/listings?type=banks&country=NG' \
  -H 'X-API-Key: ev_test_xxxxx' \
  -H 'X-Environment: test'
curl -X POST 'https://echoverify.ng/api/v1/verify' \
  -H 'X-API-Key: ev_test_xxxxx' \
  -H 'X-Environment: test' \
  -H 'Content-Type: application/json' \
  -d '{"product_slug":"nin-verification","payload":{"id":"25082691216"}}'
curl -X GET 'https://echoverify.ng/api/v1/verifications/EV-VER-ABCDEFG123456' \
  -H 'X-API-Key: ev_test_xxxxx' \
  -H 'X-Environment: test'