Liveness for identity verification builders.

Prove a real, present person is in front of the camera. One API call to start, one to get the answer. Your brand on the screen, not ours. $0.05 per check. First 100 free. No minimums.

Get an API keyRead the docs

Built for teams that build IDV

White-label capture

The capture screen runs inside your app, styled as yours. No app? Send people to a hosted capture link with no Minno brand on it.

Bill your customers

Tag each session with your customer's id. Usage comes back split by customer, ready to re-bill.

Your threshold, per session

Set the pass score for each check to match each customer's risk. We always return the raw confidence too.

Test keys for CI

Test keys return a simulated pass or fail with no camera and no charge, so your pipeline can test the whole flow.

No face data kept

We store the decision and the score. Never the face. The reference frame is handed to you once, if you ask for it.

Signed webhooks

Get a signed session.completed event the moment a check finishes, retried with backoff until you answer.

Face match built in

Compare the live face to an ID portrait at no extra charge. Refused unless liveness passed, so a capture that failed liveness is never matched.

How it works

  1. Your backend calls POST /v1/sessions. You get a session id and short-lived capture credentials.
  2. Your app shows the capture screen (React, iOS or Android), or you send the person to the hosted capture_url. It takes a few seconds.
  3. A signed webhook arrives, or your backend calls GET /v1/sessions/{id}: live: true or false with a confidence score.
curl -X POST https://api.tryminno.com/v1/sessions \
  -H "Authorization: Bearer mn_..." \
  -d '{"consent_obtained": true, "reference": "customer-42"}'

Fast, and nothing to run

Minno is a single Rust service. Starting a session is one round trip; the checks themselves run on Amazon Rekognition Face Liveness; what it detects, and how it was tested, are AWS's own claims, in AWS's documentation. You add one component to your app and two calls to your backend.

Honest by default