Onboarding Webhooks
All onboarding events follow the platform’s standard webhook envelope (same delivery format, authentication, retries and idempotency). This page documents the accreditation-specific events.
Events
Subscribe to accreditation.updated as the source of truth for progress, and use accreditation.active / accreditation.failed as terminal triggers in your system. The link events are meant to automate delivering links to end users.
callbackUri does not replace these events
If you use the return to your app, the outcome that arrives in the URI is a UI hint: it travels in the address bar and the holder can edit it. Use it only to decide which screen to show when the user comes back. Every trigger with an effect in your system still comes from here — or from GET /v1/accreditations/{accreditationId}.
accreditation.updated
Emitted on every state transition, with the previous status, the current one and per-person details.
accreditation.biometry.link.created
Emitted when a facial capture link is generated for a person (at accreditation creation and on each retry).
For PJ, this event is emitted once per partner — use the cpf to know who each link belongs to.
accreditation.acceptance.link.created
Emitted when a terms acceptance link is generated for a person. Only happens in flows enabled on request by CorpX; the default flow never emits it.
accreditation.consent.link.created
Emitted when the CPF already has an account and the accreditation starts as PENDING_CONSENT: instead of opening a new account, the holder must authorize you to operate the existing one. Deliver the consentLink to them. Re-emitted on every retry.
Journey details in Holder who already has an account.
accreditation.active
Terminal success event — the account is ready to operate.
When the accreditation came from the consent flow, data carries two extra fields:
account.shared_access.granted
Emitted to the tenants that already operated an account when the holder authorizes a new tenant to operate it too. Your access does not change — this event exists so that you know the account is now being moved by someone else as well.
If the sharing does not make sense for your case, contact support: the holder can revoke the granted access, and from then on the revoked tenant’s calls for that account return 403.
accreditation.failed
Terminal failure event — the process ended without opening an account.
Common errorReason values:
When the refusal comes from the provider, data also carries a partner block
with what it reported — the same block is returned by
GET /v1/accreditations/{id}, so the query and the webhook never disagree:
All three keys are optional: the block mirrors what the provider sent, and some
refusals arrive with message only. Use it for logs and support — your code
should still branch on errorReason.
accreditation.pf.created / accreditation.pj.created
Emitted when the accreditation is created (workflow start), as an asynchronous confirmation of the POST. Subscribe in the portal (Settings → Webhooks) or via PUT on the subscription.