Peleza — Trust built on data
🇰🇪 KYB
On this page

Business

Search Kenyan business registrations via POST /api/v1/business/ke. All of registration_number, search_type, and consent (must be true) are required. Use search_type: pvt (company — shares & encumbrances), bn (sole proprietor — partners only), llp (limited liability partnership), or bo (beneficial owner — partners only). Registration format is validated per type. Fresh registry snapshots are reused for up to 7 days. Other country codes are not supported yet.

Test data

Sandbox test data

Use these values against the sandbox host. Click a value to copy it.

Sandbox registration numbers

Verify business registration

POST/api/v1/business/ke
{{baseUrl}}/api/v1/business/ke
HeaderTypeDescription
AuthorizationstringBearer YOUR_ACCESS_TOKEN from the OAuth client-credentials flow
Content-Typestringapplication/json

Body Parameters

ParameterTypeDescriptionRequired
registration_numberstringCompany / BN / LLP registration number. Format rules: bn → BN-prefixed or numeric (≥3 digits); pvt → starts with PVT, PLC, or C; llp → starts with LLP; bo → any of those formatsrequired
search_typestringOne of: pvt | bn | llp | bo (also accepts GENERAL / BENEFICIAL_OWNER). Billing: bn → business; pvt/GENERAL → company; llp → limitted; bo → business-ownershiprequired
consentbooleanMust be true — confirms data-subject consent to perform this verificationrequired
customer_numberstringOptional reference for your own tracking (max 255 characters)optional

Company search (pvt / llp)

Request payload for Company search (pvt / llp):

Sample dataRequest payload
{
  "registration_number": "CPV/2019/184726H",
  "search_type": "pvt",
  "consent": true
}

Expected response for Company search (pvt / llp):

200 OKSample dataExpected response
{
  "success": true,
  "response_code": 200,
  "message": "Company Search verification successful",
  "country": "ke",
  "data": {
    "registration_number": "CPV/2019/184726H",
    "business_name": "SAMPLE HOLDINGS LIMITED",
    "status": "registered",
    "registration_date": "18 March 2019",
    "postal_address": "100 - 00100",
    "physical_address": "123 SAMPLE STREET, NAIROBI, Fl: N/A, Room/Door: N/A, NAIROBI",
    "phone_number": "+254712345678",
    "branch": null,
    "email": "info@sample-holdings.example",
    "kra_pin": null,
    "verified": true,
    "partners": [
      {
        "type": "director_shareholder",
        "shares": [
          { "name": "ORDINARY", "shareCount": 600 }
        ],
        "postal_code": "",
        "postal_address": "",
        "phone_number": "",
        "name": "JOHN DOE SAMPLE",
        "id_type": "citizen",
        "id_number": "12345678",
        "gender": "M",
        "email": ""
      },
      {
        "type": "director_shareholder",
        "shares": [
          { "name": "ORDINARY", "shareCount": 400 }
        ],
        "postal_code": "",
        "postal_address": "",
        "phone_number": "",
        "name": "JANE DOE SAMPLE",
        "id_type": "alien",
        "id_number": "10224095",
        "gender": "F",
        "email": ""
      }
    ],
    "shares": [
      { "name": "ORDINARY", "value": 100, "shares": 1000 }
    ],
    "encumbrances": []
  },
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}

Sole proprietor (bn) / beneficial owner (bo)

Request payload for Sole proprietor (bn) / beneficial owner (bo):

Sample dataRequest payload
{
  "registration_number": "BN/2019/847261K",
  "search_type": "bn",
  "consent": true
}

Expected response for Sole proprietor (bn) / beneficial owner (bo):

200 OKSample dataExpected response
{
  "success": true,
  "response_code": 200,
  "message": "Sole Proprietor verification successful",
  "country": "ke",
  "data": {
    "registration_number": "BN/2019/847261K",
    "business_name": "SAMPLE CONSULTANCY",
    "status": "registered",
    "registration_date": "15 January 2020",
    "postal_address": "100 - 00100",
    "physical_address": "123 SAMPLE STREET, NAIROBI",
    "phone_number": "+254712345678",
    "branch": null,
    "email": "info@sample-consultancy.example",
    "kra_pin": null,
    "verified": true,
    "partners": [
      {
        "type": "proprietor",
        "shares": [],
        "postal_code": "",
        "postal_address": "",
        "phone_number": "",
        "name": "JOHN DOE SAMPLE",
        "id_type": "citizen",
        "id_number": "12345678",
        "gender": "M",
        "email": ""
      }
    ]
  },
  "request_id": "550e8400-e29b-41d4-a716-446655440001"
}

Response Fields

FieldTypeDescription
successbooleanWhether the request succeeded
response_codenumberApplication response code (typically mirrors HTTP)
messagestringHuman-readable status message (varies by search_type)
countrystringCountry code from the path (ke)
data.registration_numberstringBusiness registration number
data.business_namestringRegistered business / company name
data.statusstringRegistry status as returned by the registry (e.g. registered)
data.registration_datestring|nullRegistration date when available (often day Month year, e.g. 19 September 2024)
data.postal_addressstring|nullPostal address when available
data.physical_addressstring|nullPhysical address when available
data.phone_numberstring|nullContact phone when available (often E.164, e.g. +254…)
data.branchboolean|nullBranch flag when provided by the registry
data.emailstring|nullContact email when available
data.kra_pinstring|nullKRA PIN when available; null when not returned
data.verifiedboolean|nullRegistry verified flag when available
data.partnersarrayDirectors / partners / owners (always present)
data.partners[].typestringRole code from registry (e.g. director_shareholder, proprietor)
data.partners[].namestringPartner full name
data.partners[].id_typestringID type code (e.g. citizen, alien, visitor)
data.partners[].id_numberstringPartner ID number
data.partners[].genderstringGender code (M / F) when available
data.partners[].sharesarrayPartner shareholdings: [{ name, shareCount }]
data.partners[].emailstringPartner email (may be empty string)
data.partners[].phone_numberstringPartner phone (may be empty string)
data.partners[].postal_codestringPartner postal code (may be empty string)
data.partners[].postal_addressstringPartner postal address (may be empty string)
data.sharesarrayShare capital (pvt / llp only — omitted for bn / bo). Items: { name, value, shares } — e.g. name ORDINARY
data.encumbrancesarrayEncumbrances (pvt / llp only — omitted for bn / bo). Items: { date, description, people, amount }
request_idstringUUID for support and audit trails

Error codes

Standard Peleza HTTP / response_code values (same across all API calls). Validation message text is endpoint-specific. Full reference: Error Codes.

CodeWhenBilled?
200Business details returned — billed as business (bn), company (pvt/GENERAL), limitted (llp), or business-ownership (bo)Yes
422Validation — missing/invalid registration_number, search_type, or consent (must be true)No
401Missing or invalid Bearer tokenNo
402Insufficient wallet balance or credit limitNo
403No active wallet or billing profile (or service not enabled)No
404Business not found in the registryYes
404Unsupported country (not ke)No
429Rate limitedNo
500Unexpected server error during verificationNo
503Business verification service unavailableNo

Invalid registration format

422Sample dataInvalid registration format
{
  "success": false,
  "response_code": 422,
  "message": "Validation failed",
  "country": "ke",
  "errors": {
    "registration_number": [
      "Company registration numbers must start with PVT, PLC, or C and include a valid suffix"
    ]
  },
  "data": null,
  "request_id": "550e8400-e29b-41d4-a716-446655440010"
}

Business not found

404Sample dataBusiness not found
{
  "success": false,
  "response_code": 404,
  "message": "Business not found",
  "country": "ke",
  "data": null,
  "request_id": "550e8400-e29b-41d4-a716-446655440011"
}

Set {{baseUrl}} to https://api.peleza.com (production) or https://sandbox.peleza.com (sandbox). Authenticated calls need a Bearer token from POST /api/v1/oauth/token.