Pricing and free tier
Per-check prices in MRU, USD, XOF and EUR, phone OTP bands and the free tier.
Sekyro AI bills per check, with no subscription fee and no minimum. Prices are set in MRU (Mauritanian ouguiya). USD, XOF and EUR prices are derived from MRU at about 40 MRU per USD, rounded to the nearest 0.01 USD, 5 XOF or 0.01 EUR (halfway values round up). Your organisation is billed in the currency it chose at signup.
Your dashboard is authoritative. The prices on this page are the public list. An organisation can have its own agreed prices: the prices and the free verifications left this month that apply to your organisation are always the ones shown in the dashboard (Settings → Billing).
Sandbox checks (sk_test_… keys, the test environment) are always free.
Price list (live environment, per billed check)
Availability
The list includes checks that are not available in production yet (document chip, ICAO portrait, national eID, email OTP). They are billed only once they are available: see Availability.
| Check | What it is | MRU | USD | XOF | EUR |
|---|---|---|---|---|---|
Document photo (doc_ocr) | Capture, OCR, MRZ read and Tier-1 authenticity of one identity document, for any ICAO 9303 issuer. Foreign and Mauritanian documents cost the same. | 2.50 | 0.06 | 40 | 0.06 |
Document chip (nfc_chip) | NFC chip read of an identity document | 2.00 | 0.05 | 30 | 0.05 |
Liveness (liveness) | Passive / active liveness on a selfie clip | 2.80 | 0.07 | 40 | 0.06 |
Face match (face_match) | 1:1 match of the selfie against the document or registry portrait | 1.80 | 0.05 | 25 | 0.04 |
ICAO portrait (portrait_icao) | ICAO portrait quality report | 1.00 | 0.03 | 15 | 0.02 |
Population registry (population_registry) | National registry (NNI) lookup | 1.60 | 0.04 | 25 | 0.04 |
National eID (eid_auth) | The user proves who they are with their national eID app. In Mauritania: Houwiyeti. | 6.00 | 0.15 | 90 | 0.14 |
Email OTP (email_otp) | One-time code to an email address | 0.40 | 0.01 | 5 | 0.01 |
Phone OTP (phone_otp) | One-time code by SMS or WhatsApp — priced by band, see below | from 2.00 | from 0.05 | from 30 | from 0.05 |
| AML screening | Sanctions / PEP screening | 6.00 | 0.15 | 90 | 0.14 |
| 1:N face search | Search a face across a gallery | 4.00 | 0.10 | 60 | 0.09 |
| Duplicate search | Search your own verified users for a duplicate | 4.00 | 0.10 | 60 | 0.09 |
Phone OTP bands
The price of a phone OTP depends on the destination country and the channel (SMS or WhatsApp), because delivery costs differ a lot between countries and between the two channels. Every destination and channel falls in one of four bands:
| Band | MRU | USD | XOF | EUR |
|---|---|---|---|---|
| Standard | 2.00 | 0.05 | 30 | 0.05 |
| P1 | 5.00 | 0.13 | 75 | 0.11 |
| P2 | 12.00 | 0.30 | 180 | 0.27 |
| P3 | 24.00 | 0.60 | 360 | 0.54 |
- Every successful send is billed, resends included. Verifying the code is not billed separately.
- The same country can be in different bands for SMS and WhatsApp: WhatsApp is usually the cheaper channel outside Mauritania. SMS and WhatsApp to Mauritanian numbers are both Standard.
- For a few territories there is no SMS route. There, only WhatsApp is
offered. An SMS request to such a number is rejected with
otp_channel_unavailableand is not billed. - A number whose country cannot be identified is refused with
otp_destination_unknownand is not billed. - Inside a free verification session, Standard-band sends are free; P1, P2 and P3 sends are always billed.
The full country → band table, for each channel, is in the machine-readable
price list (phoneOtp.destinations, see below).
Free tier: 500 free verifications per month
- Once your organisation has activated live from the dashboard (after completing the onboarding checklist), your first 500 verification sessions each calendar month (in your organisation's time zone) are free.
- A session becomes one of your free verifications when its first billed check runs. Every check in a free session is free, retries included — except AML screening, 1:N face search, duplicate search and phone OTP outside the Standard band, which are always billed.
- A session that never runs a billed check uses none of your free verifications. A session counts in the month it was created.
- After 500, sessions are billed per check at the prices above. Free checks still appear on your invoice, at 0.
- Unused free verifications do not carry over. The dashboard shows how many are left this month.
What counts as a billed check
A check is billed when it actually ran, whatever its verdict — a rejection is a result. It is not billed when it could not run on our side or on the input:
| Check | Billed | Not billed |
|---|---|---|
| Document photo | each analysed submission, including a definitive verdict (expired document, MRZ checksum failed, authenticity review) | a missing side, an unreadable capture |
| Document chip | a chip read that passed or went to review | a failed or skipped read |
| Liveness, face match | each model run, including an inconclusive attempt | an unreadable or too-short clip, a device that failed attestation |
| ICAO portrait | each report, pass or fail | an unreadable photo |
| Population registry | each registry answer (including "NNI not found") | a registry outage |
| National eID | each code sent: the first send and each successful resend (free inside a free session) | a failed send (user not enrolled, invalid NNI, provider outage, rate limit), entering the code (right, wrong or expired) |
| Phone OTP | each successful send | a failed or refused send, a wrong or expired code |
Machine-readable price list
GET https://api.sekyro.ai/api/v2/public/pricing?currency=MRUcurrency is one of MRU, USD, XOF, EUR. No API key is needed, and
the response can be cached for 5 minutes. Amounts are integers in hundredths
of the currency (amountMinor: 250 = 2.50 MRU):
{
"currency": "MRU",
"version": "v2",
"checks": [{ "checkType": "doc_ocr", "amountMinor": 250 }],
"freeTier": { "sessionsPerMonth": 500, "alwaysBilled": ["identity_aml_screening", "identity_match_1toN_check", "identity_dedup_search"], "otpFreeBands": ["standard"] },
"phoneOtp": {
"bands": [{ "band": "standard", "amountMinor": 200 }],
"destinations": { "MR": { "sms": "standard", "whatsapp": "standard" } }
}
}(The example is truncated: the response lists every check, every band and
every country.) In destinations, "sms": "unavailable" means there is no
SMS route to that country.
Questions about prices or an agreed price for your volume: contact your Sekyro AI contact.