Cabana Verify docs
Verify people by link, by a button on your site, or through the API. The result is a Trust Score from 0 to 100 with reasons. The document and face photos stay with Cabana Verify, and can be requested in a real need.
Quick start
- Sign in to the console with your work email. You get a code by email; there is no password.
- Add your website or app, and prove you own it. Test checks work before this; live checks need it.
- Make a test link in New link, open it on your phone, and finish it, or simulate the result.
- Add a webhook so your server hears about results.
- Go live with a link, the button, or the API.
Base URL https://cabana.africa/api/verify/v1. Every request is HTTPS and JSON.
Prove you own your website or app
So people know who is asking for their identity, and so no one can run checks in your name, live checks only run for websites and apps you have proven are yours. In the console, add the property and use any one of these with the token it shows you:
Websites
| Method | What to add |
|---|---|
| DNS record | A TXT record on your domain (or on _cabana.yourdomain.com): cabana-site-verification=<token> |
| Meta tag | On your home page, inside <head>: <meta name="cabana-site-verification" content="<token>"> |
| File | A file at https://yourdomain.com/<token>.txt containing the token |
Apps
Verify your developer website first. Then publish this file on it, and make sure your Google Play or App Store listing links to that website:
// https://yourdomain.com/.well-known/cabana-apps.json
{ "apps": [ { "platform": "android", "id": "com.example.app", "token": "<token>" } ] }
If a store page cannot be read automatically, a person confirms it, usually the same day.
The daily look
Every day we read your home page again, check that your ownership record is still there, and compare it with what you registered. You get a property.updated webhook when its standing changes. If the record disappears you have seven days to restore it. If the site turns into something Cabana Verify cannot be used with (for example phishing, fake documents or a different business), checks pause until a person looks.
API keys
| Key | Where | Can |
|---|---|---|
cv_sk_live_…cv_sk_test_… | Your server only | Everything: create, read, list, cancel and simulate checks |
cv_pk_live_…cv_pk_test_… | Your web pages | Only start a check, and only from your verified website’s own address |
Test keys run the same flow, are never billed, and can be simulated. We store only a fingerprint of each key, so a lost secret key cannot be shown again: create a new one and revoke the old one in API keys.
Verification links
In the console, New link makes a private link for one person. Send it any way you like: WhatsApp, SMS, email, or in your own app. It works for 1 to 30 days and can send the person back to a page on your verified website.
- The person needs no account and no app. The check runs in their phone’s browser.
- On a computer, it shows a QR code to continue on a phone; the computer updates when the phone finishes.
- Leaving half-way never cancels the link. It can be opened again until it expires.
Authentication
Send your secret key in the Authorization header (or X-Api-Key). Never put a secret key in a web page or an app.
curl https://cabana.africa/api/verify/v1/sessions \
-H "Authorization: Bearer cv_sk_test_…"
Create a check
Creates a check and returns its private link. Send the person to url.
| Field | Type | Meaning |
|---|---|---|
reference | string, ≤120 | Your ID for this person or case |
redirect_url | https URL | Where to send them after, on a website you have verified. We add cabana_verification and status. |
expires_in_days | 1–30 | How long the link works. Default 7. |
metadata | object | Up to 20 string fields, kept with the check and returned to you |
curl -X POST https://cabana.africa/api/verify/v1/sessions \
-H "Authorization: Bearer cv_sk_test_…" -H "Content-Type: application/json" \
-d '{"reference":"driver-2214","redirect_url":"https://yourdomain.com/onboarding/done"}'
const r = await fetch('https://cabana.africa/api/verify/v1/sessions', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.CABANA_VERIFY_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ reference: 'driver-2214', redirect_url: 'https://yourdomain.com/onboarding/done' }),
});
const check = await r.json(); // send the person to check.url
import os, requests
check = requests.post('https://cabana.africa/api/verify/v1/sessions',
headers={'Authorization': f"Bearer {os.environ['CABANA_VERIFY_KEY']}"},
json={'reference': 'driver-2214', 'redirect_url': 'https://yourdomain.com/onboarding/done'}).json()
# send the person to check['url']
The response is a verification object with "status": "created", plus url. Live checks need a verified website or app on your account.
Get a check
curl https://cabana.africa/api/verify/v1/sessions/7f3c…-…-… -H "Authorization: Bearer cv_sk_live_…"
List checks
Newest first, for the key’s environment. reference filters to one of yours; limit is up to 100.
Cancel a check
Stops a check that has not finished. Its link stops working at once.
Sandbox: simulate a result
Test checks only. Finishes the check with the outcome you choose, with example details, and sends your webhooks, so you can build your handling without a camera.
curl -X POST https://cabana.africa/api/verify/v1/sessions/{id}/simulate \
-H "Authorization: Bearer cv_sk_test_…" -H "Content-Type: application/json" -d '{"outcome":"review"}'
# outcome: approved (score 94) · review (61) · declined (18)
The verification object
{
"id": "7f3c2a90-…",
"object": "verification",
"env": "live",
"reference": "driver-2214",
"metadata": { "plan": "gold" },
"status": "completed", // created · opened · retry · processing · completed · cancelled · expired
"decision": "approved", // approved · review · declined (when completed)
"score": 94,
"band": { "id": "excellent", "label": "Excellent" },
"reasons": [ { "code": "all_checks_passed", "text": "Every check passed." } ],
"details": { // see “Details by tier”
"full_name": "Amani Wanjiru", "first_name": "Amani", "last_name": "Wanjiru", "gender": "female",
"document_type": "national_id", "issuing_country": "KEN", "is_adult": true, "document_valid": true, "source": "mrz"
},
"document": { "type": "id_card", "country": "KEN" },
"under_review": false,
"created_at": "2026-10-15T08:02:11Z", "completed_at": "2026-10-15T08:04:40Z", "expires_at": "2026-10-22T08:02:11Z",
"links": { "result": "https://cabana.africa/api/verify/v1/sessions/7f3c2a90-…" }
}
A check with "decision": "review" is with a Cabana Verify specialist. When they decide, the decision and score change and you receive verification.updated.
Trust Score
Every check is folded into a score from 0 to 100: the document and its machine lines, whether the printed details agree, signs of a copy, a screen or editing, the face match, liveness, image quality, and fraud signals from across the network. Hard facts cap the score, so an expired document, an under-age holder, a failed liveness check or a reused document can never score highly.
| Band | Score | What it means | Usual action |
|---|---|---|---|
| Excellent | 90–100 | Every check strong | Approve automatically |
| Accurate | 75–89 | Verified, with minor notes | Approve |
| Average | 55–74 | Looks genuine; something to weigh | Your policy decides |
| Needs further verification | 35–54 | A person should look | Our specialists review it |
| High risk | 0–34 | A hard fact failed, or signs of fraud | Decline |
decision is Cabana Verify’s own recommendation. You can use the score to set a stricter line of your own, for example approving only from 85.
Details by tier
You receive only what your tier allows. No tier includes the document photo, the face, or the raw machine-readable lines in results, webhooks or the API. If you have a real need for the photos of a check, see Documents on request.
| Field | Basic | Assured |
|---|---|---|
full_name, first_name, last_name | ✓ | ✓ |
gender (female · male · unspecified) | ✓ | ✓ |
document_type, issuing_country | ✓ | ✓ |
is_adult (18 or over), document_valid | ✓ | ✓ |
source (mrz: proven by check digits · docai: read by AI) | ✓ | ✓ |
date_of_birth, document_number, expiry_date, issue_date, nationality, personal_number | – | ✓ |
Assured is for businesses that need those details by law or licence, such as payments, lending, car hire and age-restricted goods. Ask for it in the console under Data access; we check your registration against the public register, usually within two working days.
Documents on request
The photos are not sent to you with results. If you have a real need, such as a dispute, a regulator’s or court’s request, or a suspected fraud, you can ask for the photos of a specific check.
- Any business: write to verify@cabana.africa with the check’s
referenceand the reason. A specialist decides case by case. - Assured businesses: open the check in your console and press Request document photos, with a genuine reason. A Cabana Verify specialist reviews every request and approves it, declines it, or asks for more.
- If approved: the document and face photos of that check are emailed once, from our system, to the owner of your workspace, and the release is recorded. We never send them to a different address.
- Limits: photos can be requested only while we still hold them (up to a year after the check) and only for live checks.
What you receive is personal data and becomes your responsibility: use it only for the reason you gave, keep it secure, share it only where the law requires or allows, and delete it when you are done. See the terms.
Why you can rely on a result
You do not see the photos, so here is what stands behind every Trust Score:
- Layered checks. The document and its machine-readable lines (proven by check digits); a face match on our own models; four seconds of light-based liveness; a second opinion from AI services (Groq and Cloudflare Workers AI) on the selfie against the document photo and a read of the document; image quality; and fraud signals from across businesses. A weak layer cannot carry a check on its own, and hard facts cap the score.
- Independent disagreement matters. If the AI second opinion does not see the same person, or sees signs the selfie may not be live, the check can no longer be approved automatically and goes to a specialist (reason codes
ai_face_disagreesandai_spoof_suspected). - People on hard cases. Unclear and high-risk checks are reviewed by Cabana Verify specialists, who can approve, decline and mark fraud. You get
verification.updatedwhen they decide. - Reasons and a timeline. Every result carries each reason in plain words with a stable code, and the console shows what happened and when.
- Records. Each time a specialist opens a photo, and each release to a business, is recorded. Photos are sealed on the person’s phone with a key made for the check, and the key is destroyed before the files are deleted.
- Verified askers. Businesses prove they own their website or app before any live check, and we look at it daily.
- Evidence on request. See Documents on request.
Reason codes
Each reason has a stable code for your logic and a plain text you can show your team.
| Code | Meaning |
|---|---|
all_checks_passed | Every check passed. |
mrz_missing | The document’s machine-readable lines were not found. |
mrz_unverified | The machine-readable lines did not pass their check digits. |
no_mrz_document | This document type has no machine-readable lines; its details were read by AI. |
names_uncertain | Some letters of the name were uncertain. |
details_ai | Details were read by the AI document reader (not proven by check digits). |
details_unreadable | The document’s details could not be read. |
details_mismatch | The document’s printed details and machine lines disagree. |
document_suspect | The document looks like a photo of a screen, a copy, or may be altered. |
face_good | The face matches the document photo well. |
face_borderline | The face match is borderline. |
face_weak | The face does not clearly match the document photo. |
face_mismatch | The face does not match the document photo. |
continuity | The person changed during the check. |
liveness_inconclusive | Liveness could not be confirmed. |
liveness_fail | Liveness failed: this may not be a live person. |
file_upload | The document was uploaded from a file rather than photographed. |
virtual_camera | A virtual camera was used. |
attempts | Several attempts in a short time. |
expiring_soon | The document expires within 30 days. |
portrait_small | The document photo is small. |
quality | Image quality was low. |
under_age | The person is under 18 (proven by the document). |
document_expired | The document has expired (proven by the document). |
under_age_unproven | The person may be under 18. |
expired_unproven | The document may have expired. |
document_reused | This document was used before under a different identity. |
identity_reused | This face was verified before under a different name. |
known_fraud | Matches an identity marked as fraud. |
layout_unusual | The document’s layout differs from genuine documents of this kind. |
ai_face_disagrees | A second, independent look at the selfie and the document photo did not see the same person. |
ai_spoof_suspected | A second, independent look at the selfie saw signs it may not be a live person. |
device_velocity | Many checks from the same device recently. |
returning_person | Verified before with the same details. |
reviewer_approved | Approved by a Cabana Verify specialist. |
reviewer_declined | Declined by a Cabana Verify specialist. |
incomplete | The person did not finish the check. |
cancelled | The check was cancelled. |
expired | The link expired before the check was finished. |
Webhooks
Add an endpoint in the console under Webhooks. We POST JSON to it, and retry after 1, 5 and 30 minutes, then 2, 6 and 24 hours, until it answers with a 2xx.
| Event | When |
|---|---|
verification.completed | A check finished: approved, review or declined |
verification.updated | A specialist decided a check that was in review |
verification.cancelled | The person chose not to verify, or you cancelled it |
property.verified | One of your websites or apps was verified |
property.updated | Its standing changed in the daily look (for example paused, or ownership record missing) |
ping | You pressed “Send a test” |
{ "id": "evt_…", "type": "verification.completed", "created": 1760515480, "product": "verify",
"data": { /* the verification object */ } }
Check the signature
Each request has Cabana-Signature: t=<unix seconds>,v1=<hex>, an HMAC-SHA256 of t + "." + the raw body under your endpoint’s signing secret (reveal it in the console). Reject anything older than five minutes.
import { createHmac, timingSafeEqual } from 'node:crypto';
export function verified(rawBody, header, secret) {
const parts = Object.fromEntries(String(header).split(',').map(p => p.split('=')));
const t = Number(parts.t);
if (!t || Math.abs(Date.now() / 1000 - t) > 300) return false;
const want = createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
return want.length === String(parts.v1).length && timingSafeEqual(Buffer.from(want), Buffer.from(parts.v1));
}
import hmac, hashlib, time
def verified(raw_body: bytes, header: str, secret: str) -> bool:
parts = dict(p.split('=', 1) for p in header.split(','))
t = int(parts.get('t', 0))
if not t or abs(time.time() - t) > 300:
return False
want = hmac.new(secret.encode(), f"{t}.".encode() + raw_body, hashlib.sha256).hexdigest()
return hmac.compare_digest(want, parts.get('v1', ''))
Use the raw body exactly as received, before any JSON parsing. Deliveries can arrive more than once; use the event id to ignore repeats.
Errors and limits
Errors are JSON: { "error": "A sentence you can show", "code": "machine_code" }.
| Status | Common codes | Meaning |
|---|---|---|
| 400 | redirect_not_verified | Something in the request is not right; the sentence says what |
| 401 | invalid_key | Missing, wrong or revoked key |
| 402 | trial_ended | The free trial ended |
| 403 | wrong_key_kind, origin_not_verified, suspended | Not allowed with this key, from this site, or right now |
| 404 | – | No such check on your account |
| 409 | no_verified_property | Live checks need a verified website or app |
| 429 | quota_exceeded | This month’s limit on your plan, or too many requests |
The free trial includes 100 live checks and 1,000 test checks a month for 30 days. The button can start up to 10 checks a minute from one address.
The person’s side
What the person you send sees, so you can tell them what to expect:
- Your business name, what you will receive, and one consent box. It covers the check, sharing the result with you, and Cabana Verify keeping the check to improve its fraud detection. There is no separate tick box for that: it is part of how the service works, and the privacy sheet explains it in plain words.
- Their document. The camera captures it automatically when it is sharp. Passports, national IDs, residence permits and driving licences from any country.
- About four seconds looking at the screen while it changes colour. No head-turning. The face check needs a live camera; it cannot be uploaded.
- The result in seconds, then back to your page if you chose one.
They are told plainly that their photos stay with Cabana Verify and are not given to you unless a real need arises, in which case a specialist reviews the request first.
Privacy
This notice explains how Cabana Verify handles personal data, for the businesses that use it and for the people they verify. Cabana Verify is operated by Cabana, Nairobi, Kenya. Contact: verify@cabana.africa.
The people being verified
- What we collect: photos of the identity document, a selfie and a few seconds of video frames taken during the light check, the details printed on the document, and technical data about the device and connection used (such as device type, camera name and a keyed fingerprint of the device and IP address).
- Why: to confirm that the person is who the business asked us to check and that they are really there; to protect people and businesses from identity fraud; to settle disputes about a check; and to train and improve our fraud detection and our understanding of how genuine and fake documents look. This last purpose is part of how the service works. It applies to every check and is not a separate choice, and people are told before they start.
- Who sees it: the photos are encrypted on the person’s device with a key made for that check, and are opened only by Cabana Verify’s own systems to run the check. The business receives the result and only the details its tier allows, not the photos. Cabana Verify specialists may look at a check that needs review or a dispute, and each look is recorded. If a business has a real need (a dispute, a regulator or court request, or a fraud case) it can ask for the photos of a specific check; a specialist reviews the request and, if approved, we email them once to that business’s workspace owner and record it. That business then becomes responsible for them.
- Service providers: hosting and storage (Vercel, Supabase), email (Resend), and AI services run by Groq and Cloudflare Workers AI. The AI services receive the document images, to read their text, and the selfie beside the document photo, to give a second opinion on whether it is the same person and whether the selfie looks live. They process the images only to answer us and are not allowed to use them for their own purposes. They do not receive the light-check video frames.
- Fraud network: we keep keyed fingerprints of documents and faces (not the photos) so that a document or face reused under another identity is caught across businesses, for up to two years. No business can see another’s checks.
- How long: every check, with its photos and details, is kept for up to a year, the same for every business, then the key that opens the photos is destroyed first and the files are deleted. We may keep a check longer where a dispute or a legal duty needs it, and the fingerprints for the period above.
- Legal basis: the person’s consent, given in the check; our legitimate interest in preventing fraud, resolving disputes and improving our fraud detection; and the legal obligations the business we verify for has, including for Assured businesses.
- Automated decisions: results are produced by automated systems; unclear or high-risk checks are reviewed by a person. A person can ask us to look at a result again.
- Transfers: our providers may process data outside Kenya. We use providers with appropriate safeguards and contracts.
- Rights: to ask what we hold, to have it corrected or deleted where the law allows, to object, and to complain to a data protection authority (in Kenya, the Office of the Data Protection Commissioner). Write to us with the date of the check and the business’s name. Deletion of a check we still need to prevent fraud or settle a dispute may be limited as the law allows.
Businesses
We keep your account details, your team’s email addresses, your websites and apps, the results of your checks, your document requests and how they were decided, and usage records, for as long as your account is open and as the law requires afterwards. For the people you verify, you decide why they are verified and Cabana Verify carries out the check for you; for our own fraud prevention and service improvement we also act in our own right, as described above.
Terms of service
Please read these terms carefully. They explain what you can expect from us and what we expect from you.
1. About these terms
These terms are the agreement between you (the business or organisation that opens a workspace, “you”) and Cabana, operating Cabana Verify from Nairobi, Kenya (“we”, “us”). They apply to the Cabana Verify website, console, scripts, widgets, links, APIs, webhooks, sandbox and any email or support we provide for it (together, the “Service”). By creating a workspace, adding a website or app, creating an API key, or otherwise using the Service, you accept these terms. If you accept them for an organisation, you confirm you have the authority to bind it. If you do not agree, do not use the Service.
Cabana Verify is a separate service. It has its own terms, and nothing here gives you rights in other Cabana services.
2. Who may use it
You must be at least 18, be able to enter a contract, and use the Service for business, professional or organisational purposes, not as a consumer. You must give us true and current information when you sign up and keep it up to date. One person may manage several workspaces; each is a separate account.
3. Your workspace and your team
You are responsible for everything done through your workspace, your sign-in codes and your API keys, including by people you invite. Keep secret keys on your servers only, never in a web page, app or public repository. Tell us at once if you think a key or an email account has been compromised so we can help you revoke it. We may assume anyone using your keys or signed in as you is acting for you.
4. Proving you own your website or app
Nothing runs on a website or app until you prove it is yours, by a DNS record, a meta tag or a file for a website, or a declaration on your developer website plus your store listing for an app. You promise that you own or are authorised to manage every website and app you add, and that you will keep the proof in place. We re-check every day. If the proof disappears you have seven days to restore it before the property stops being verified. If a site stops matching what you registered, we may pause the Service on it, tell you why, and restore it once a person at Cabana Verify is satisfied. This protects the people who use your site and everyone else who uses the Service. You agree to this monitoring.
5. Acceptable use
You must not, and must not let anyone else:
- break any law, or use the Service for or on a website or app that is unlawful, deceptive, fraudulent or harmful (including gambling or adult content you are not licensed for, phishing, counterfeit or fake documents, investment fraud, drugs or weapons trade, or content that exploits children);
- run the Service against a website or app you do not own or manage, or pretend to be another business or person;
- probe, scan, overload or try to get around the security or the limits of the Service, or attempt to reach another customer’s data;
- copy, resell, white-label or build a competing service from the Service, or use its output to train a competing model, without our written agreement;
- share your keys, or use more than one free trial by opening several workspaces;
- use the Service in a way that breaches the rights of anyone else.
We may suspend or limit anything that breaks this section, immediately if there is a risk to people or to the Service.
6. What Cabana Verify is, and is not
Cabana Verify checks a person’s identity document and face and returns a Trust Score, a decision, reasons and, depending on your tier, some details. It is a tool that helps you decide. A result is strong evidence, not a guarantee, and not legal advice. You remain responsible for your own decisions about the people you verify, for your onboarding and compliance duties (including anti-money-laundering, sanctions, age and licensing rules that apply to you), and for treating people fairly and lawfully. Cabana Verify does not replace those duties.
7. Verifying people lawfully
You may verify only people you have a genuine, lawful reason to verify. Before you send a person to a check you must give them any notice and obtain any consent the law requires of you, and you must tell them who you are and why you are asking, which the check also shows them. You must offer another way to verify to someone who cannot or will not use the check where the law or fairness requires it, and you must not discriminate unlawfully on the basis of a result. You must not use Cabana Verify to verify children without the legal authority to do so, to build lists of identities, or for surveillance.
8. The photos and who holds them
The document and face photos are encrypted on the person’s device with a key made for that check, and are opened only by Cabana Verify’s own systems to run the check. We do not send them to you automatically, on any plan, and we do not give you access to them in the console or API. They are held by Cabana Verify, and by the AI services described in the privacy notice only while they answer us.
We keep every check for up to a year, the same for every business, to settle disputes and to train and improve our fraud detection and document-layout systems. This is necessary to the Service and applies to every check, and people are told before they start. After that period we destroy the key that opens the photos, then delete the files. We keep only the keyed fingerprints described in the privacy notice for fraud prevention, for a limited period.
9. Requesting a person’s documents
Cabana Verify specialists can release the photos of a specific check to a business that has a real need, such as a dispute, a request by a regulator, court or police, or a suspected fraud. How it works:
- Any business can write to verify@cabana.africa with the check’s reference and the reason. A specialist decides case by case.
- A business that has been checked by us (Assured) can also request the photos of a specific live check from its console. It must give a genuine reason, and each request is reviewed by a Cabana Verify specialist, who may approve it, decline it or ask for more information.
- If approved, the photos are emailed once, to the owner of your workspace, from our system. We do not send them anywhere else. We record the request, who decided it and when it was sent, but not the images’ contents.
- We may refuse or limit any request that is not genuine, not proportionate, would put the person at risk, or that the law does not allow, and we decide in our reasonable discretion. We will tell you why where we can.
- You can only request photos while we still hold them. After the retention period they are gone.
Documents you receive are personal data and you become responsible for them. You must use them only for the reason you gave, keep them secure, share them only with those who need them and where the law requires or allows, not copy or reuse them for any other purpose, and delete them as soon as you no longer need them. We may refuse future requests, suspend your workspace and report misuse to the authorities if you break this clause.
10. Assured tier
Date of birth, document number, expiry date, nationality and the other Assured details are released only to businesses whose registration we have checked and whose purpose we have approved, and who can request documents as set out above. We may ask for your certificate of incorporation, licences and a description of your use, may check them against public registers, and may approve, limit or decline in our discretion. You must keep your information current, use Assured details only for the purpose you told us, store them securely, and delete them when you no longer need them. We may remove Assured if you misuse it, if the information we hold about you stops being true, or if the law changes.
11. Automated checks and review
Checks use our own face and document models, machine-readable-line checks, light-based liveness analysis, fraud signals from across businesses, and AI services that read the document and give a second opinion on the selfie against the document photo. Results are automated; a specialist reviews checks that are unclear or high-risk. A person can ask for a result to be looked at again by writing to us, and you must pass that request on to us if a person raises it with you. If a check is wrongly declined, tell us and we will look.
12. The fraud network
To keep everyone safer, Cabana Verify keeps keyed fingerprints of documents and faces (never the photos) across all its businesses. A document or face used under a different identity, or marked as fraud by our specialists, will affect results for every business. No business can see another business’s checks or the people in them. You agree that your checks contribute to this.
13. Your website, link and button
Verification links, the button and the API work only for websites and apps you have verified. You must not alter or frame the Cabana Verify check, collect the person’s photos yourself, or ask them to send you documents outside it by a route we have not approved. You are responsible for sending links only to the person intended, and for the redirect addresses you set. A status passed back to your website is a hint only. Confirm results on your server or by signed webhook before you act.
14. Test checks
Test keys and test links run the same flow, are not billed, and may use simulated results. Do not use them to verify real customers for real decisions.
15. Data protection
For the people you ask us to verify, you decide the purpose and means for which they are verified, and Cabana Verify carries out the check for you. We are responsible for how we handle the data in our own systems, including for fraud prevention and for improving the Service as described in the privacy notice. Each of us will comply with the data protection laws that apply to us, including the Kenya Data Protection Act, 2019, and, where they apply, the GDPR, POPIA, NDPR and similar laws. You will give the people you verify the notices and obtain the consents the law requires of you, and will help us answer their requests. Our privacy notice forms part of these terms.
16. Security incidents
We protect the data we hold with encryption on the person’s device, separate keys for every check, access limited to those who need it, and records of every access to photos. If we learn of a breach that affects personal data you are responsible for, we will tell you without undue delay and help you meet your duties to regulators and people.
17. Trial, plans and prices
Cabana Verify is free during the trial programme, with the limits shown in your console, for the period shown there. Paid plans and their prices are coming soon. We will announce them well before any charge, you will not be charged anything unless you choose a paid plan and agree to its price, and we will give you reasonable notice before the free trial or any free feature ends or changes. Limits may be adjusted to prevent abuse.
18. Our service, and changes to it
We work hard to keep the Service available and correct, but we do not promise it will be uninterrupted or error-free. We may change, improve or remove features, run maintenance, and set or change usage limits. If we make a change that materially harms you, we will give notice where we reasonably can. The sandbox and test keys are for building and are not for production use.
19. Intellectual property
We own the Service and everything in it, including its software, models, scores, designs, documentation and brand. You get a limited, non-exclusive, non-transferable, revocable right to use the Service during these terms, for your own business, in line with them. You keep everything that is yours: your websites, content, data and brand. You give us the rights we need to read, process and store them to run the Service for you, and, where these terms or the privacy notice say so, to improve our fraud and quality systems. Feedback you give may be used by us without obligation.
20. Confidentiality
Each of us will keep the other’s non-public information confidential, use it only for the Service, and protect it with reasonable care, except where we must disclose it by law or to our advisers and service providers who are bound to confidentiality. Information that is public, or that we learn lawfully from someone else, is not confidential.
21. Disclaimer
The Service is provided “as it is” and “as available”. To the fullest extent the law allows, we give no warranties of any kind, express or implied, including merchantability, fitness for a particular purpose, accuracy, non-infringement, or that results will be achieved. Outputs of automated systems, including AI, can be wrong; you are responsible for how you use them and for your own decisions. Nothing in these terms limits anything that cannot lawfully be limited.
22. Limits on our liability
To the fullest extent the law allows, we are not liable for indirect, incidental, special, consequential or punitive loss, loss of profit, revenue, goodwill or data, or business interruption, even if told it might happen. Our total liability to you for all claims arising from the Service in any 12 months is limited to the amount you paid us for the Service in the 12 months before the first claim, or, if you have paid nothing, to KES 10,000. These limits do not apply to liability that cannot be limited by law, including for fraud or for death or personal injury caused by negligence.
23. Your responsibility to us
You will compensate us for losses, claims, fines and reasonable costs that come from your breach of these terms, your breach of law, your content, or your use of the Service in a way we did not allow, including claims by people whose data you handled through the Service. We will tell you promptly of a claim, let you help defend it, and not settle it in a way that binds you without your agreement, which you will not unreasonably withhold.
24. Suspension and ending
You may stop using the Service at any time and ask us to close your workspace. We may suspend or end the Service for you if you break these terms, if the law requires, if keeping you would put people or the Service at risk, or if we stop offering the Service, and we will tell you why where we can. When a workspace ends, your keys stop working. We delete or anonymise its data as set out in the privacy notice, keeping only what we must by law or need to protect people from fraud. Clauses that by their nature should survive (including ownership, confidentiality, disclaimers, liability, compensation and governing law) do.
25. Notices and support
We will contact you at the email of your workspace owner, and by notices in your console. You can write to us at verify@cabana.africa. Please keep the owner email current: notices sent to it count as received.
26. Changes to these terms
We may update these terms. We will give notice of material changes in your console or by email before they apply, and the date at the bottom will change. If you keep using the Service after the change applies, you accept the new terms. If you do not agree, you may stop and close your workspace.
27. Law and disputes
These terms and any dispute about them are governed by the laws of Kenya. We will try to settle any dispute in good faith first. If we cannot, the courts of Kenya have exclusive jurisdiction, except that either of us may ask any court for urgent protection of its intellectual property or confidential information. If a part of these terms is found unenforceable, the rest still applies. Our failure to enforce a right is not a waiver of it. You may not transfer these terms without our written consent; we may transfer them as part of a merger or sale of the business. These terms, with the privacy notice, are the whole agreement for the Service.
Last updated 15 October 2026.