Verified rental data, with the person's say-so.
Confirm where an applicant lives, see how they have paid rent, verify a landlord's income, or study rental markets across Kenya. Every personal answer is approved by the person it is about, with a code sent to their phone.
Test keys work as soon as you sign up. Live keys after Tenanta checks your organisation.
What you can ask for
Residence check
… / approved requestConfirm the address an applicant gave you. You get confirmed or not confirmed, the town and county, since when, and whether the house they named matches. Replaces a utility bill as proof of residence.
Rent payment history
… / approved requestAlternative credit data for people without payslips: months renting on Tenanta, bills paid on time, late or overdue, current arrears band, and whether deposits came back in full.
Landlord income check
… / approved requestVerified rent collected per month for up to 24 months, number of houses and occupancy, approved by the landlord. Self-declared income, replaced by what tenants actually paid.
Market data
… / reportRents (median and spread), vacancy and arrears by county, town and house type, month by month. Aggregated: no person, house or landlord can be picked out.
Or … a month for unlimited market reports.
Pay with prepaid credits, topped up by M-Pesa or bank transfer. You are only charged when a person approves — a request that is declined, expires or finds no record costs nothing.
How consent works
- 1You ask
Send the ID (or KRA PIN), the phone number the applicant gave you, and why you are asking.
- 2Tenanta texts them
A code goes to the phone already on their Tenanta account — never a number you supply — naming you and your reason.
- 3They give you the code
In your app or at your branch, only if they applied to you. Nothing is shared without it.
- 4You get the answer
Kept to what the product needs. The request shows in their account, and they can switch sharing off.
What you never get:house numbers (only whether the one you were given matches), landlords' names, phone numbers, or a way to search for someone. Tenanta does not trace people.
Whether someone is on Tenanta stays private. Every request looks the same until it is approved: no answer, no charge, if they are not here or have switched sharing off.
Organisations sign a data-sharing agreement and are checked before going live, in line with Kenya's Data Protection Act, 2019. Using data to harass, shame or trace people ends access.
API reference
JSON over HTTPS at https://tenanta.co.ke/api/v1. Authenticate with your key: Authorization: Bearer tnt_live_… (or tnt_test_… for the sandbox).
1. Ask for a verification
curl https://tenanta.co.ke/api/v1/verifications \
-H "Authorization: Bearer $TENANTA_KEY" -H "Content-Type: application/json" \
-d '{
"product": "residence", // or "rent_history", "landlord_income"
"id_number": "12345678", // landlord_income: "kra_pin" instead
"phone": "0712345678", // the number the applicant gave you
"purpose": "Opening a savings account",
"reference": "your-own-ref-001",
"claimed_address": { "town": "Kilimani", "estate": "Elisa Residences", "house": "A2" }
}'201 Created
{ "id": "vr_…", "product": "residence", "status": "awaiting_approval",
"expires_at": "2026-10-14T10:15:00Z", "cost": 0, "result": null, … }The applicant receives a code by SMS if they are on Tenanta and sharing is on. The response is the same either way.
2. Send the code they give you
curl https://tenanta.co.ke/api/v1/verifications/vr_…/confirm \
-H "Authorization: Bearer $TENANTA_KEY" -H "Content-Type: application/json" \
-d '{ "code": "482913" }'200 OK (residence)
{ "status": "approved", "cost": 100,
"result": { "status": "confirmed", "living_there_now": true, "town": "Kilimani", "county": "Nairobi",
"since": "2025-03", "moved_out": null, "area_matches_claim": true, "house_matches_claim": true } }
200 OK (rent_history)
{ "result": { "tenancies": 2, "months_on_tenanta": 31, "first_seen": "2024-04", "bills_on_time": 58,
"bills_late": 3, "bills_overdue": 0, "on_time_rate": 0.95, "current_arrears": "none",
"left_owing_after_moving_out": false, "deposits": { "returned_in_full": 1, "with_deductions": 0 } } }
200 OK (landlord_income)
{ "result": { "properties": 2, "houses": 24, "houses_let": 21, "occupancy": 0.88,
"rent_collected_last_12_months": 3780000, "months": [ { "month": "2026-10", "rent_collected": 315000, "bills_collected": 18400 }, … ] } }Codes last 15 minutes and allow 5 tries. Check a request any time with GET /verifications/{id}; list yours with GET /verifications.
3. Market data
curl "https://tenanta.co.ke/api/v1/market?county=Nairobi&town=Kilimani&house_type=1BR" \
-H "Authorization: Bearer $TENANTA_KEY"{ "month": "2026-10", "charged": 2000, "withheld_below": { "houses": 5, "landlords": 3 },
"data": [ { "county": "Nairobi", "town": "Kilimani", "house_type": "1BR", "houses": 128,
"rent_median": 32000, "rent_p25": 27000, "rent_p75": 38000,
"vacancy_rate": 0.08, "arrears_rate": 0.11, "withheld": false } ] }Balance and prices
curl https://tenanta.co.ke/api/v1/balance -H "Authorization: Bearer $TENANTA_KEY"Sandbox
With a tnt_test_ key, nothing is charged, no SMS is sent and the code is always 123456. Made-up people:
Tenant living there now id_number TEST0001 phone 0700000001 (Kilimani, Nairobi; house A12)
Tenant who moved out id_number TEST0002 phone 0700000002
Landlord kra_pin A000000001Z phone 0700000009Errors
| 400 bad_request | Something is missing or malformed; the message says what. |
| 400 code_wrong | That code is not right. |
| 401 unauthorised | Missing, invalid or revoked key. |
| 402 insufficient_credit | Top up your credits. |
| 403 org_not_approved / org_suspended | Live keys need an approved organisation. |
| 410 code_expired | Start a new request. |
| 429 rate_limited / daily_cap / too_many_attempts | Slow down, or ask Tenanta to raise your daily limit. |
Errors look like { "error": { "code": "…", "message": "…" }, "request_id": "…" }.