Native KYC

In development

An identity-verification bureau with an explainable verdict.

Upload a document and a selfie, run liveness and face match, screen against sanctions and PEP lists, and get back approved, review, or rejected — with the full evidence chain behind it. A code-level guard, not just a prompt, blocks auto-approval whenever required evidence is missing.

The use case

KYC as an asynchronous pipeline, not a black box.

Onboarding a Brazilian financial-services customer means proving a document is genuine, the person presenting it is who they claim, and they're not on a sanctions or PEP list — then being able to show your regulator exactly how you reached that conclusion.

Native KYC runs each case through a 7-step pipeline — document extraction, document integrity, liveness, face match, source screening, verdict, webhook delivery — recording evidence at every step before moving to the next. A required step that fails routes the case to `review` instead of failing silently or auto-approving.

The verdict itself is explainable by construction: a Bedrock agent reads only the evidence chain already written (never the image, never the raw CPF) and proposes a decision; a code-level guard recomputes whether every required piece of evidence is present and consistent, and can only downgrade `approved` to `review` — never upgrade a `review` the guard disagrees with.

Native KYC is a standalone product — it doesn't require Native Biometrics. It has its own liveness and face-match step; Native Biometrics remains the right choice when what you need afterward is ongoing re-verification (step-up, recovery), not a one-time onboarding bureau.

The seven-step pipeline

DocumentextractionDocumentintegrityLivenessFacematchSourceconnectorsVerdictWebhookdeliveryDashed = optional, never blocks the verdictEVIDENCE RECORDED AT EVERY REQUIRED STEP

What's in the box

Bureau-grade verification, evidence included.

OCR and multimodal document extraction

Reads Brazilian RG, CNH, CIN, and passport documents via Textract OCR plus a Bedrock vision model that structures the extracted fields.

Document integrity rules

CPF check-digit validation, cross-check against the submitted CPF, date coherence, name anchored to the OCR text, and a tenant-configurable document allow-list.

Liveness and face match

Amazon Rekognition Face Liveness proves presence; `CompareFaces` matches the live capture against the document photo. Both scores become evidence — never the images.

Sanctions and PEP screening

Cross-references OFAC SDN, the UN consolidated list, the EU consolidated list, and Brazil's CEIS/CNEP/PEP lists via exact and fuzzy name matching.

Optional official-source verification via Serpro

Bring your own Serpro credentials (stored per-tenant in Secrets Manager) to add Consulta CPF and Datavalid checks — billed as the `kyc_official` dimension.

Explainable verdict with evidence chain

`approved`, `review`, or `rejected`, with every step's evidence queryable via the case API. A code-level guard — not a prompt instruction — enforces that `approved` never ships without the required evidence present.

From upload to verdict

Three calls: upload, submit, check the case.

Native KYC is asynchronous by design — a case moves through the pipeline in the background; poll `GET /v1/cases/{id}` or wait for the webhook.

  1. 0. Request upload URLs and get the presigned S3 slots

    Ask for presigned S3 URLs for each image slot and upload directly to S3 — never multipart to the API itself.

    Requestbash
    curl -X POST https://api-kyc-hml.swepay.com.br/v1/cases/uploads \
      -H "Authorization: Bearer ${SWEPAY_JWT}" \
      -H "Content-Type: application/json" \
      -d '{ "slots": ["document_front", "document_back", "selfie"] }'
    Responsejson
    {
      "uploads": [
        { "slot": "document_front", "objectKey": "cases/tmp/8f3c.../front.jpg", "uploadUrl": "https://s3.sa-east-1.amazonaws.com/..." },
        { "slot": "document_back", "objectKey": "cases/tmp/8f3c.../back.jpg", "uploadUrl": "https://s3.sa-east-1.amazonaws.com/..." },
        { "slot": "selfie", "objectKey": "cases/tmp/8f3c.../selfie.jpg", "uploadUrl": "https://s3.sa-east-1.amazonaws.com/..." }
      ]
    }
  2. 1. Start the liveness session, then submit the case

    Run the liveness capture against the returned `sessionId`, then submit the case with the uploaded object keys and that `livenessSessionId`. Returns `202 Accepted`.

    Requestbash
    curl -X POST https://api-kyc-hml.swepay.com.br/v1/cases \
      -H "Authorization: Bearer ${SWEPAY_JWT}" \
      -H "Content-Type: application/json" \
      -d '{
        "cpf": "***.***.***-**",
        "documentType": "CNH",
        "documentFrontKey": "cases/tmp/8f3c.../front.jpg",
        "documentBackKey": "cases/tmp/8f3c.../back.jpg",
        "selfieKey": "cases/tmp/8f3c.../selfie.jpg",
        "livenessSessionId": "sess_8f21..."
      }'
    Responsejson
    HTTP/1.1 202 Accepted
    {
      "caseId": "c4d9e2a1-3b7f-4c1a-9e2d-1f6a7b8c9d0e",
      "status": "received"
    }
  3. 2. Check the case, or wait for the webhook

    Poll for status and evidence, or receive an HMAC-signed webhook when the case reaches a final status.

    Requestjson
    curl https://api-kyc-hml.swepay.com.br/v1/cases/c4d9e2a1-3b7f-4c1a-9e2d-1f6a7b8c9d0e \
      -H "Authorization: Bearer ${SWEPAY_JWT}"
    Responsejson
    {
      "caseId": "c4d9e2a1-3b7f-4c1a-9e2d-1f6a7b8c9d0e",
      "status": "approved",
      "verdict": {
        "decision": "approved",
        "reasonSummary": "Document and face-match evidence within threshold; no sanctions match."
      },
      "evidence": [
        { "step": "DocumentExtraction", "status": "passed" },
        { "step": "DocumentIntegrity", "status": "passed" },
        { "step": "Liveness", "status": "passed", "score": 98.1 },
        { "step": "FaceMatch", "status": "passed", "score": 95.6 },
        { "step": "SourceConnectors", "status": "passed" },
        { "step": "Verdict", "status": "passed" }
      ]
    }

`api-kyc-hml.swepay.com.br` above is illustrative — Native KYC has no deployed public host yet (the pipeline is implemented; onboarding onto the Marketplace Subscription Hub is pending). Full pipeline and policy reference on the developers page. Technical questions: engineering@swepay.com.br.

Security & compliance

Evidence without images.

Native KYC processes some of the most sensitive personal data a fintech handles — document, CPF, face. It's built to retain evidence, not the underlying images.

No biometric template retained

The liveness reference image lives only in memory for the duration of the pipeline run and is discarded — never written to S3, DynamoDB, or a Rekognition collection. Liveness and face-match evidence is a numeric score, never the image.

Evidence retention aligned to Circular BCB 3.978

Step-by-step evidence — hashes, scores, status, verdict rationale — is retained to satisfy the traceability requirement, without the raw document or selfie images.

Serpro is opt-in, and it's your credential

Official-source checks (`kyc_official`) run only if you configure your own Serpro credentials, stored per-tenant in AWS Secrets Manager. Native KYC never queries Serpro on your behalf with Swepay's own credential.

Data residency

Storage (DynamoDB, S3, SQS) is in `sa-east-1`. Document extraction and the verdict model run in `us-east-1` (Textract/Bedrock availability) and never receive the CPF or the image after extraction — only the sanitized evidence chain.

Pricing

Per-check dimensions, or a monthly plan with included volume.

Billed entirely through AWS Marketplace. `kyc_basic` covers the core pipeline; add `kyc_official` only for cases where you've configured Serpro.

Usage dimensions

Every plan below includes a bundle of `kyc_basic` checks; usage beyond the plan is billed per dimension.

DimensionDescriptionPrice
kyc_basic
Basic KYC check
OCR + liveness + face match + public-list screeningUS$ 0.90
kyc_official
Official-source KYC
Adds Serpro official-source verification (BYO credentials)US$ 2.20
kyc_review
Human review
Case routed to the human-review queueUS$ 4.00
bureau_query
Bureau query
Pass-through source/bureau query costCost + 25%

Monthly plans

Priced by `kyc_basic` check volume.

Starter

$1,600/month

Included checks
2,000 kyc_basic checks
Best for
Fintechs piloting onboarding KYC
Subscribe

Growth

$15,500/month

Included checks
25,000 kyc_basic checks
Best for
Products scaling customer onboarding
Subscribe

Scale

$50,000/month

Included checks
100,000 kyc_basic checks
Best for
Platforms onboarding at bureau scale
Subscribe

Above 100,000 checks per month?

Talk to engineering for an AWS Marketplace Private Offer with custom volume and a contractual SLA.

Talk to engineering→

Which one do I need?

Native Biometrics vs. Native KYC

Independent products (ADR-0003) that solve different problems and integrate well together. Most fintechs start with whichever matches the moment: onboarding a new customer, or re-verifying one they already know.

CriterionNative BiometricsNative KYC
Core questionIs this the same person who enrolled?Who is this person, and does their document prove it?
Typical momentStep-up authentication, account recovery, repeat verificationOnboarding a new customer for the first time
InputLive face capture onlyDocument (RG/CNH/CIN/passport) + live face capture + CPF
OutputSigned assertion (JWS), any IdP verifies offlineExplainable verdict (approved/review/rejected) + evidence chain
Sanctions/PEP screeningNoYes (OFAC, UN, EU, CEIS/CNEP/PEP)
What's storedFace vector only, in your tenant's Rekognition collectionEvidence chain (scores, statuses) — no image, no template

Need both? Subscribe to each independently on AWS Marketplace — there's no bundled SKU, and no requirement to run one to use the other.

Frequently asked

Before you integrate.

Straight answers to the questions that come up most before a compliance review.

Do you store my photo?

No. Native KYC never retains the document image, the selfie, or a biometric template. What's retained is the evidence chain — scores, statuses, and the verdict rationale — enough to satisfy Circular BCB 3.978 traceability without the underlying images.

Who contracts Serpro — Swepay or me?

You do. Serpro's official-source checks (`kyc_official`) run only with your own Serpro credentials, which you provide and which are stored per-tenant in AWS Secrets Manager. Swepay never queries Serpro with its own credential on your behalf.

Can Native KYC auto-approve a case with missing evidence?

No. A code-level guard recomputes, independently of the verdict model, whether every required piece of evidence is present and consistent. If the model proposes `approved` but the guard disagrees, the result is overridden to `review` — never the other way around.

What lists does the sanctions/PEP screening check?

OFAC SDN (with aliases), the UN consolidated list, the EU consolidated list, and Brazil's CEIS, CNEP, and PEP lists via the Portal da Transparência — refreshed daily.

Does Native KYC require Native Biometrics?

No. Native KYC has its own liveness and face-match step and works standalone. The two are independent products — subscribe to one, both, or neither — that integrate well together; see the comparison below.

What happens to a case that lands in `review`?

It stays in `review` until your team resolves it — queryable any time via `GET /v1/cases/{id}` and its evidence chain, with a webhook already delivered when the case reached that status. Native KYC does not currently ship a dedicated review console; build your own review UI on the evidence API, or handle it in your existing ops tooling.

Two ways to start.

Technical questions first?

Ask engineering before you subscribe — pipeline behavior, evidence shape, or Serpro scoping.

Email engineering

Volume plans and custom integration

For bureaus and platforms onboarding above 100,000 checks per month, or that need help scoping Serpro/official-source checks.

Talk to engineering