Account Onboarding
The Accreditation APIs let you open accounts for your end customers — individuals (PF) and companies (PJ) — programmatically, with identity verification through facial biometrics.
The onboarding APIs are in controlled rollout. Ask our support team to enable them for your tenant before integrating.
How it works
The process has four major stages:
- Identity verification (facial biometrics) — every individual involved (the holder for PF; every partner for PJ) must have their identity verified through facial biometrics.
- Company documents (PJ only) — upload the PDFs required by
company.legalFormviaPOST /v1/accreditations/{id}/documents(in parallel with biometrics). Details in PJ account opening. - Review — depending on the flow, the opening is approved automatically or goes through prior review by an analyst.
- Account opening at the settlement partner — after approval, the account is opened and automatically bound to your tenant. You receive the final
accountIdand can start operating (PIX, boletos, statement, etc.).
For PF, if the CPF is already an account holder there is no new account to open. For tenants with automatic portability enabled (contractual; not on by default), the accreditation starts as PENDING_CONSENT and returns a link for the holder to authorize you to operate the account they already have — with identity verification and balance disclosure before the authorization. Without it, the accreditation fails with existing_partner_account and portability is requested from support. See Holder who already has an account.
There are two biometrics flows:
Deliver the link to the end user and wait for the webhooks. The rest of the journey — capture, validation, account opening — happens on our side.
State machine
Every accreditation goes through the following state machine:
Statuses
Tracking progress
You have two complementary ways to track each accreditation:
- Webhooks (recommended) — the
accreditation.updatedevent is emitted on every state transition, plus specific events (facial link created, account active, failure). See Onboarding Webhooks. - Polling —
GET /v1/accreditations/pfandGET /v1/accreditations/pjreturn the aggregated status and per-person details (biometrics state, link, expiration).
The optional callbackUri field brings the holder back to your app when they finish their step, with the outcome in the URI — useful for the experience, but it does not replace either of the two ways above. See Returning to your app.
Tenant binding
The CPF/CNPJ is only bound to the tenant after biometry is confirmed. While PENDING_BIOMETRY, there is no accountId and POST does not deduplicate: repeating with the same document creates another accreditation (201). Cancel abandoned pendings with POST /v1/accreditations/{id}/cancel (FAILED / errorReason=cancelled).
After confirmation, the settlement account is automatically bound to the tenant that created the accreditation — no extra activation step. A further POST for a document already claimed by your own tenant returns 409 already_accredited.
Accounts shared between tenants
A PF account can be operated by more than one tenant, when the holder authorizes each of them through the consent flow (Holder who already has an account). In that case:
- It is the same account — balance, statement and Pix keys are shared. Each tenant has its own
accountIdpointing to it. - Every authorized tenant receives the webhooks for each movement. Operations originated outside your API (by another authorized tenant or by the holder) arrive with
external: true. - Previous authorizations are not revoked when a new tenant is authorized. If you already operated the account and receive
account.shared_access.granted, another tenant started operating it too — if that does not make sense for your case, talk to support. - The holder can revoke any of these accesses through support; from then on the revoked tenant’s calls for that account return
403.
Evidence files
GET /v1/accreditations/{accreditationId}/artifacts returns the archived evidence of the process: the company PDFs you uploaded, the identity document captured during biometrics (unico_id_document, typically the ID card as PDF) and, when the provider allows it, the holder selfie (unico_selfie) and the signed evidence-set JWT (unico_evidence_set). Each item already carries a pre-signed downloadUrl, valid for about 10 minutes.
downloadUrl only shows up with scanStatus: "APPROVED": every upload goes through type checking, antivirus and sanitisation before being archived. While the file is PENDING, query again in a few seconds.
The endpoint delivers the holder’s biometrics, so it depends on two independent switches:
- the
kyc_artifactsfeature must be enabled for your tenant (talk to support — it requires a contractual clause), otherwise the answer is403 feature_disabled; - the credential must carry the
kyc.readscope. The genericreadscope is deliberately not accepted, so no existing credential starts downloading customer faces without an explicit decision.
The same files show up in the accreditation detail of your backoffice, for whoever holds the backoffice:accreditations permission (no scope involved there, only the feature).