KYC & Identity

Know who you are dealing with.

Add identity verification to any product in an afternoon. Create a verification with one API call, send your user to a hosted flow, and receive the decision by signed webhook.

How it works

Three steps, no document handling on your side.

Your servers never touch identity documents. Our hosted flow collects them, checks them, and sends you only the outcome.

1

Create a verification

Send your own reference for the user, optional name and birth date, the expected document type and country, and where to bring them back afterwards.

2

User completes the flow

Redirect the user to the verification URL. They scan their passport or ID card and a selfie, on a phone or a computer, in French, English, Spanish or Portuguese.

3

Receive the decision

We call your webhook as the status changes and you can always read the verification back by ID or by your reference.

The API

One call to start a verification.

Only reference is required. Everything else tunes the experience for your brand and your risk policy.

  • Your branding. Show your name, logo and colour on the hosted pages.
  • Your policy. Block documents or locations from countries you do not serve.
  • Your language. Pick the language or let it follow the user’s country.
  • Your reference. Look up the latest verification for a user with the reference you chose.
  • Defaults in the dashboard. Set branding and policy once per company; any request can override them.
curl -X POST https://api.coopfinnetwork.com/v1/live/kyc/create_verification \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "reference": "user-1234",
    "person": { "first_name": "Anna", "last_name": "Eriksson",
                "date_of_birth": "1974-08-12" },
    "document": { "type": "PASSPORT", "country": "HT" },
    "redirect_url": "https://app.example.com/kyc/done",
    "language": "en",
    "branding": { "name": "YourBrand", "color": "#0F766E" },
    "policy": { "blocked_document_countries": ["XX"] }
  }'

201 {
  "status": "success",
  "verification": {
    "id": "kyc_...",
    "status": "created",
    "verification_url": "https://..."
  }
}
Statuses and webhooks

Follow every step of the journey.

StatusMeaning
createdVerification exists, user has not started
in_progressUser is in the hosted flow
submitted / processingDocuments received, being checked
reviewNeeds a manual look before a decision
approvedIdentity confirmed (this is when you are billed)
declined / expiredRefused, or the link was not completed in time

Webhooks you can trust

  • Events are named kyc.verification.<status>, for example kyc.verification.approved.
  • Every delivery is signed. Verify the X-CFN-Signature header with your secret key and reject anything else.
  • X-CFN-Event and X-CFN-Delivery headers identify the event and the delivery.
  • If your server is down we retry with growing delays, up to ten attempts, so a deployment never costs you a result.
  • Missed an event? Read the verification back with get_verification or list them all with list_verifications.
Billing and operations

Pay for approved verifications only.

Charged on approval

The verification price is taken from your unified USD wallet when a user is approved. Declined or abandoned attempts are not billed. If your balance is too low, new verifications are refused until you top up.

Dashboard visibility

Follow verifications and their results from your dashboard, and set default branding and policy for your company.

Evidence on request

Retrieve the captured document and face images for a verification with the media endpoint, so your compliance team can review any case.

You remain responsible for having a lawful basis to verify your users and for explaining it to them. See our Privacy Policy and Terms of Service.

Get started

Verify your first user

Create an account, get your API keys and add identity verification to your onboarding.