Quickstart
Create an account, grab your test key, and run your first flow against the simulated engine, without touching your included verifications.
# 1. open the session (ID document as the reference) curl -X POST https://api.biometrics.catalisa.app/v1/sessions \ -H "Authorization: Bearer $CHAVE_TESTE" \ -d '{ "flow": "ONBOARDING", "purpose": "account opening", "reference": { "source": "DOCUMENT_IMAGE", "fileId": "…" }, "enrollOnApprove": true }'
# 2. send the person to the link — or embed it { "captureUrl": "https://biometrics.catalisa.app/c/eyJ…", "challenge": { "script": ["SMILE", "TURN_LEFT", "BLINK"], "slotsMs": [5200, 6100, 4800] }, "expiresAt": "…" }
# 3. the decision arrives at your webhook — or fetch it curl https://api.biometrics.catalisa.app/v1/sessions/$ID \ -H "Authorization: Bearer $CHAVE_TESTE" { "status": "APPROVED", "enrollment": { "templateId": "…" } }
In four steps
- Create an account
The Free plan comes with a test key and 30 real verifications per month.
- Open a session
POST /v1/sessions with the flow and the purpose; the response includes the capture link.
- Send the person to capture
Via link, iframe, or SDK.
- Receive the decision
Via webhook or by fetching the session; the receipt comes with it.
Install the SDK
Optional: everything works over plain HTTP, and the examples below do exactly that. The SDK handles the fiddly parts — webhook signatures, receipt verification, safe retries, and the envelope types.
$ pip install catalisa-biometrics from catalisa_biometrics import Biometrics bio = Biometrics(api_key=os.environ["CATALISA_API_KEY"]) sessao = bio.sessions.create(flow="LIVENESS_ONLY", purpose="account opening") # send the person to sessao["handoff"]["captureUrl"]
$ composer require catalisa/biometrics use Catalisa\Biometrics\Client; $bio = new Client(apiKey: getenv('CATALISA_API_KEY')); $sessao = $bio->createSession(['flow' => 'LIVENESS_ONLY', 'purpose' => 'account opening']); // send the person to $sessao['handoff']['captureUrl']
$ go get github.com/catalisaio/catalisa-biometrics-sdk/packages/go bio, _ := biometrics.New(biometrics.Options{APIKey: os.Getenv("CATALISA_API_KEY")}) sessao, err := bio.CreateSession(ctx, biometrics.CreateSessionInput{ Flow: biometrics.FlowLivenessOnly, Purpose: "account opening", }) // send the person to sessao.Handoff.CaptureURL
$ dotnet add package Catalisa.Biometrics using var bio = new BiometricsClient(Environment.GetEnvironmentVariable("CATALISA_API_KEY")!); var sessao = await bio.CreateSessionAsync(new CreateSessionInput { Flow = Flows.LivenessOnly, Purpose = "account opening", }); // send the person to sessao.Handoff!.CaptureUrl
$ gem install catalisa-biometrics require "catalisa/biometrics" bio = Catalisa::Biometrics::Client.new(api_key: ENV.fetch("CATALISA_API_KEY")) sessao = bio.create_session(flow: "LIVENESS_ONLY", purpose: "account opening") # send the person to sessao.dig("handoff", "captureUrl")
$ npm install @catalisa/biometrics # publishing soon import { Biometrics } from '@catalisa/biometrics' const bio = new Biometrics({ apiKey: process.env.CATALISA_API_KEY }) const sessao = await bio.sessions.create({ flow: 'LIVENESS_ONLY', purpose: 'account opening' }) // send the person to sessao.handoff.captureUrl
<!-- Maven: io.github.catalisaio:catalisa-biometrics:0.1.0 --> var bio = BiometricsClient.of(System.getenv("CATALISA_API_KEY")); var sessao = bio.createSession(Map.of( "flow", Models.Flows.LIVENESS_ONLY, "purpose", "account opening")); // send the person to sessao.handoff().captureUrl()
Kotlin uses the same artifact as Java. Source code, tests, and the signature test vectors: github.com/catalisaio/catalisa-biometrics-sdk.
1. Open a session
From your server, with your account's key. The response includes the capture link, which is valid for one person and one session.
Loading the example…
2. Send the person to capture
The simplest way is the link: over WhatsApp, email, a QR code, or a button in your app. Iframe and modal are covered in Iframe and SDK.
Loading the example…
3. Receive the decision on your server
The decision arrives signed at your webhook. Verify the signature before trusting the payload: that is what proves it came from Catalisa.
Loading the example…
4. Fetch the session anytime
The full envelope — checks, reasons, and receipt — available at any time by id.
Loading the example…
Three ways to show the camera
Send the link. Your brand's colors, logo, and copy; ready for mobile and desktop.
Inside your app, with progress events. The decision never goes through the browser.
Your native app records and uploads with the same single-use token.
Full documentation
The reference for every route, the envelope fields, the events, and the limits live at docs.catalisa.app.