Developers
Developer overview
A REST API, a web SDK and webhooks. The sandbox exposes the same contract as production with mock providers, so you can integrate end to end before you sign anything.
How a flow works
- Create a flow. Choose a rulebook pack (for example the EU MiCA/AML pack), the checks, their order and thresholds. Flows can be built in the dashboard or with
POST /v1/flows. - Start a verification.
POST /v1/verificationswith the flow id and your own applicant reference returns a verification id and a short-lived session token for the SDK or hosted link. - The user completes document capture. Auto-detection, quality guidance, MRZ and NFC reading; authenticity checks run in seconds and a retake is requested only when necessary.
- Liveness and proof of address. A certified liveness check and face match against the document portrait, then a proof-of-address upload or open-banking confirmation cross-matched to the identity record.
- Screening runs. PEP, sanctions and adverse-media screening, and wallet screening if the flow requires it. A risk score is produced under your configured rules.
- Decision or review. Automatic approval, automatic decline, or routing to your review queue with the evidence pack attached. Ongoing monitoring starts. Adverse outcomes always involve a human.
- Evidence pack. A time-stamped, hashed and signed evidence pack is retained as your regulatory record and available at
GET /v1/verifications/{id}/evidence. - Optional "save my details". The user may save their verified identity to an encrypted vault only they can open. Your evidence pack stays with you exactly as it would without the vault.
Authentication
Server-to-server
OAuth 2.0 client credentials. Exchange your client id and secret for a bearer token and send it in the Authorization header. Also send your x-api-key header; it meters usage against your tier's included volume.
Dashboard users
Your compliance and operations team sign in through managed login with multi-factor authentication. Roles and permissions are set per team member.
Vault users
The people being verified sign in to their vault with passkeys (Face ID, Touch ID, Windows Hello or a hardware key). B Group never holds the vault key.
curl https://api.bgroup.io/v1/verifications \
-H "Authorization: Bearer $TOKEN" \
-H "x-api-key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{"flowId":"flow_01H...","applicantRef":"your-customer-id"}'
Endpoints
All endpoints are versioned under /v1, accept and return JSON, and are idempotent on retry when you send an Idempotency-Key header.
| Method | Path | Purpose |
|---|---|---|
| POST | /v1/flows | Create a flow from a rulebook pack and your configuration |
| GET | /v1/flows | List your flows |
| GET | /v1/rulebook/packs | List available rulebook packs and versions |
| GET | /v1/rulebook/packs/{packId} | Read a pack: required checks, controls and change log |
| POST | /v1/verifications | Start a verification for an applicant |
| GET | /v1/verifications/{id} | Read verification status and result |
| POST | /v1/verifications/{id}/documents | Register a document capture and obtain an upload target |
| POST | /v1/verifications/{id}/liveness/session | Create a liveness session for the SDK |
| POST | /v1/verifications/{id}/submit | Submit the completed capture for checks and decision |
| GET | /v1/verifications/{id}/evidence | Retrieve the signed evidence pack |
| GET | /v1/cases | List review cases and alerts |
| GET | /v1/cases/{caseId} | Read a case with its evidence and history |
| POST | /v1/cases/{caseId}/decision | Record a human decision on a case |
| POST | /v1/reuse/sessions | Start a vault reuse session for a returning user |
| GET | /v1/reuse/sessions/{id} | Read reuse session status |
| POST | /v1/reuse/sessions/{id}/consent | Record the user's consent to share the listed data with you |
| POST | /v1/reuse/sessions/{id}/complete | Complete reuse after the fresh liveness check |
| POST | /v1/vault | Create a vault from a completed verification (user-initiated) |
| GET | /v1/vault/me | The user's own vault metadata and sharing history |
| DELETE | /v1/vault/me | Erase the user's vault (cryptographic erasure) |
| GET | /v1/billing/usage | Current period usage against included volume |
| GET | /v1/billing/invoices | Invoices with credits applied |
| GET | /v1/billing/credits | Credit ledger: counts and amounts, never other clients' identities |
| POST | /v1/gdpr/requests | Open a data-subject request (erasure, export, restriction) |
| GET | /v1/gdpr/requests/{id} | Read request status and the legal basis for anything retained |
| POST | /v1/attestations | Issue a privacy-preserving attestation from a verification |
| GET | /v1/attestations/{id} | Read or verify an attestation |
| POST | /v1/attestations/{id}/revoke | Revoke an attestation |
Webhooks
Register an HTTPS endpoint per flow or per client. Every delivery is signed and retried with backoff.
Events
verification.completedverification.review_requiredreuse.completedcredit.issuedcase.decidedmonitoring.alertinvoice.issued
Signature
Each request carries an X-BGroup-Signature header with a timestamp and an HMAC-SHA256 signature over timestamp + "." + body using your webhook secret.
X-BGroup-Signature: t=1760000000,v1=5257a869e7...
Reject deliveries older than five minutes and compare signatures in constant time.
Sandbox and SDKs
Sandbox
The sandbox exposes the same API contract as production. Document authenticity, liveness, screening and wallet checks are served by mock providers with deterministic test personas, so you can exercise approvals, declines, review routing and reuse without real personal data.
SDKs
- Web SDK: available in the platform repository. Handles capture, liveness, proof of address and the optional client-side vault encryption.
- iOS and Android SDKs: planned.
- Hosted link: send users to a B Group-hosted flow under your brand with no SDK integration.