Company Search API

Search for companies worldwide and retrieve detailed corporate information including officers, owners, filings, and industry codes.

Search Response Object

The search response contains a list of matching companies with basic information. Use the company ID to retrieve full details.

Response Attributes

Field Type Description
results array List of matching companies (see Company Item below)
total_results integer Total number of matching companies returned
has_more boolean Always false - company search returns all results in one response
cached boolean Whether results were returned from cache
cached_at datetime When results were cached
hit_count integer Number of times this cached result has been accessed

Company Item Attributes

Field Type Description
id string Company ID (use this for the details endpoint)
name string Company name
registrationNumber string Company registration/incorporation number
incorporationDate string Date of incorporation (YYYY-MM-DD)
dissolutionDate string Date of dissolution if dissolved
incorporationCountry string Two-letter country code (ISO-2)
incorporationCountryName string Human-readable country name
incorporationType string Type of incorporation
active boolean Whether company is currently active
address object Registered address (line, city, state, postalCode, country, fullAddress)
createdAt string ISO 8601 datetime when the company record was created in the registry
updatedAt string ISO 8601 datetime when the company record was last updated
sourceUrl string URL of the original registry source for this record

Search Response Example

{
  "results": [
    {
      "id": "75735f63615f5f33313130393532",
      "name": "Acme Corporation Ltd",
      "registrationNumber": "12345678",
      "incorporationDate": "2015-03-15",
      "dissolutionDate": null,
      "incorporationCountry": "GB",
      "incorporationCountryName": "United Kingdom",
      "incorporationType": "Private Limited Company",
      "active": true,
      "address": {
        "line": "10 Downing Street",
        "city": "London",
        "state": null,
        "postalCode": "SW1A 2AA",
        "country": "GB",
        "fullAddress": "10 Downing Street, London, SW1A 2AA"
      },
      "sourceUrl": "https://find-and-update.company-information.service.gov.uk"
    }
  ],
  "total_results": 1,
  "has_more": false,
  "cached": false
}

Company Details Object

Full company profile including all basic information plus officers, owners, filings, and industry classifications.

Additional Attributes

Field Type Description
officers array Directors and officers. Each item: entityName, role, active, firstName, middleName, lastName, occupation (optional), nationality (optional)
owners array Shareholders/beneficial owners. Each item: type, role, entityType (individual|company), entityName, ownershipType, ownershipStructure.descriptionString, address. For companies: registrationNumber, incorporationType. For individuals: firstName, lastName, nationality
filings array Company filings. Each item: name, type, date, description (optional), fileUrl (optional)
industryCodes array Industry classification codes
website string Company website URL
email string Company email address
phone string Company phone number
tradingNames array Alternative trading names
previousNames array Historical company names
cached boolean Whether the response came from cache
cached_at datetime When the response was cached
hit_count integer Number of times the cached result has been accessed

Company Details Example

{
  "id": "67625f5f3132333435363738",
  "name": "Acme Corporation Ltd",
  "registrationNumber": "12345678",
  "incorporationDate": "2015-03-15",
  "dissolutionDate": null,
  "incorporationCountry": "GB",
  "incorporationCountryName": "United Kingdom",
  "incorporationType": "Private Limited Company",
  "active": true,
  "address": {
    "line": "10 Downing Street",
    "city": "London",
    "state": null,
    "postalCode": "SW1A 2AA",
    "country": "GB",
    "fullAddress": "10 Downing Street, London, SW1A 2AA"
  },
  "officers": [
    {
      "entityName": "JOHN DOE",
      "role": "director",
      "occupation": "CEO",
      "nationality": "GB",
      "firstName": "John",
      "lastName": "Doe",
      "active": true
    }
  ],
  "owners": [
    {
      "type": "owner",
      "role": "shareholder",
      "entityType": "company",
      "entityName": "Acme Holdings Ltd",
      "incorporationType": "Private Company Limited By Shares",
      "registrationNumber": "09876543",
      "ownershipType": "share_ownership",
      "address": {
        "line": "10 Downing Street",
        "city": "London",
        "postalCode": "SW1A 2AA",
        "country": "GB"
      },
      "ownershipStructure": {
        "descriptionString": "The person holds, directly or indirectly, more than 75% of the shares in the company."
      }
    }
  ],
  "filings": [
    {
      "name": "Annual Accounts",
      "description": "Full accounts made up to 2025-12-31",
      "type": "AA",
      "date": "2026-05-04",
      "fileUrl": "https://beta.companieshouse.gov.uk/company/12345678/filing-history/abc123/document"
    }
  ],
  "industryCodes": [
    {
      "type": "SIC",
      "code": "62011",
      "description": "Ready-made interactive leisure and entertainment software development"
    }
  ],
  "website": "https://acmecorp.com",
  "email": "info@acmecorp.com",
  "phone": "+44 20 7946 0958",
  "tradingNames": ["Acme Ltd"],
  "previousNames": ["Acme Technologies Ltd"],
  "cached": false,
  "cached_at": null,
  "hit_count": null
}

Search Companies

Search for companies by legal name and jurisdiction. Returns a list of matching companies with basic information. First-time searches charge, repeated searches with cached results are free.

POST /api/v1/company-search/
POST /api/v2/company-search/

Request Body

Field Type Required Description
company_name string Yes Company legal name to search for (min 2 characters)
jurisdiction string Yes Two-letter ISO country code (e.g., "US", "GB", "CA")

Search Companies

curl -X POST 'https://api.kycgenie.com/api/v2/company-search/' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: search-$(uuidgen)' \
  -d '{
    "company_name": "Acme Corporation",
    "jurisdiction": "GB"
  }'
import requests
import uuid

response = requests.post(
    'https://api.kycgenie.com/api/v2/company-search/',
    headers={
        'Authorization': 'Bearer YOUR_API_KEY',
        'Idempotency-Key': f'search-{uuid.uuid4()}'
    },
    json={
        'company_name': 'Acme Corporation',
        'jurisdiction': 'GB'
    }
)

result = response.json()
print(f"Found {result['total_results']} companies")
for company in result['results']:
    print(f"  {company['name']} ({company['registrationNumber']})")
    print(f"  ID: {company['id']}")
    print(f"  Active: {company['active']}")
from kycgenie import KYCGenie

client = KYCGenie(api_key="YOUR_API_KEY")

result = client.company_search.execute(
    company_name="Acme Corporation",
    jurisdiction="GB",
)

print(f"Found {result.total_results} companies")
for company in result.results:
    print(f"  {company.name} ({company.registration_number})")
    print(f"  ID: {company.id}")
    print(f"  Active: {company.active}")
(async () => {
    const response = await fetch('https://api.kycgenie.com/api/v2/company-search/', {
        method: 'POST',
        headers: {
            'Authorization': 'Bearer YOUR_API_KEY',
            'Content-Type': 'application/json',
            'Idempotency-Key': `search-${crypto.randomUUID()}`
        },
        body: JSON.stringify({
            company_name: 'Acme Corporation',
            jurisdiction: 'GB'
        })
    });

    const result = await response.json();
    console.log(`Found ${result.total_results} companies`);

    result.results.forEach(company => {
        console.log(`${company.name} (${company.registrationNumber})`);
        console.log(`ID: ${company.id}`);
        console.log(`Active: ${company.active}`);
    });
})();

Success Response

{
  "results": [
    {
      "id": "67625f5f3132333435363738",
      "name": "Acme Corporation Ltd",
      "registrationNumber": "12345678",
      "incorporationDate": "2015-03-15",
      "dissolutionDate": null,
      "incorporationCountry": "GB",
      "incorporationCountryName": "United Kingdom",
      "incorporationType": "Private Limited Company",
      "active": true,
      "address": {
        "line": "10 Downing Street",
        "city": "London",
        "state": null,
        "postalCode": "SW1A 2AA",
        "country": "GB",
        "fullAddress": "10 Downing Street, London, SW1A 2AA"
      },
      "sourceUrl": "https://find-and-update.company-information.service.gov.uk"
    }
  ],
  "total_results": 1,
  "has_more": false,
  "cached": false
}

401 Unauthorized

{
  "error": "Authentication credentials were not provided.",
  "code": "authentication_failed",
  "request_id": "aa09ddb5-428a-445b-a470-21e3eac5b5fc"
}

402 Payment Required

{
  "error": "Insufficient credits to perform this operation.",
  "code": "insufficient_credits",
  "request_id": "aa09ddb5-428a-445b-a470-21e3eac5b5fc"
}

429 Too Many Requests

{
  "error": "Request was throttled. Expected available in 45 seconds.",
  "code": "rate_limited",
  "request_id": "aa09ddb5-428a-445b-a470-21e3eac5b5fc"
}

500 Internal Server Error

{
  "error": "An upstream service is currently unavailable. Please try again later.",
  "code": "upstream_unavailable",
  "request_id": "aa09ddb5-428a-445b-a470-21e3eac5b5fc"
}

Get Company Details

Retrieve full company details including officers, owners, filings, and industry codes using a company ID from a previous search. Free for cached results.

GET /api/v1/company-search/{company_id}/
GET /api/v2/company-search/{company_id}/

Path Parameters

Parameter Type Description
company_id string Company ID returned from a search (e.g. cc_12345abcde)

Get Company Details

curl -X GET 'https://api.kycgenie.com/api/v2/company-search/67625f5f3132333435363738/' \
  -H 'Authorization: Bearer YOUR_API_KEY'
import requests

response = requests.get(
    'https://api.kycgenie.com/api/v2/company-search/67625f5f3132333435363738/',
    headers={'Authorization': 'Bearer YOUR_API_KEY'}
)

company = response.json()
print(f"Company: {company['name']}")
print(f"Registration: {company['registrationNumber']}")
print(f"Incorporated: {company['incorporationDate']}")

print(f"\nOfficers ({len(company.get('officers') or [])}):")
for officer in company.get('officers') or []:
    print(f"  - {officer['entityName']}: {officer['role']}")

print(f"\nOwners ({len(company.get('owners') or [])}):")
for owner in company.get('owners') or []:
    desc = (owner.get('ownershipStructure') or {}).get('descriptionString', '')
    print(f"  - {owner['entityName']} ({owner.get('entityType')}): {desc[:60]}")
from kycgenie import KYCGenie

client = KYCGenie(api_key="YOUR_API_KEY")

company = client.company_search.get_details(
    company_id="67625f5f3132333435363738",
)

print(f"Company: {company.name}")
print(f"Registration: {company.registration_number}")
print(f"Incorporated: {company.incorporation_date}")

print(f"\nOfficers ({len(company.officers or [])}):")
for officer in company.officers or []:
    print(f"  - {officer.entity_name}: {officer.role}")

print(f"\nOwners ({len(company.owners or [])}):")
for owner in company.owners or []:
    desc = owner.ownership_structure.description_string if owner.ownership_structure else ''
    print(f"  - {owner.entity_name} ({owner.entity_type}): {desc[:60]}")
(async () => {
    const companyId = '67625f5f3132333435363738';
    const response = await fetch(
        `https://api.kycgenie.com/api/v2/company-search/${companyId}/`,
        {
            headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
        }
    );

    const company = await response.json();
    console.log(`Company: ${company.name}`);
    console.log(`Registration: ${company.registrationNumber}`);
    console.log(`Incorporated: ${company.incorporationDate}`);

    console.log(`\nOfficers (${company.officers?.length || 0}):`);
    company.officers?.forEach(officer => {
        console.log(`  - ${officer.entityName}: ${officer.role}`);
    });

    console.log(`\nOwners (${company.owners?.length || 0}):`);
    company.owners?.forEach(owner => {
        const ownership = owner.ownershipPercentage || 0;
        console.log(`  - ${owner.entityName}: ${ownership}%`);
    });
})();

Success Response

{
  "id": "67625f5f3132333435363738",
  "name": "Acme Corporation Ltd",
  "registrationNumber": "12345678",
  "incorporationDate": "2015-03-15",
  "dissolutionDate": null,
  "incorporationCountry": "GB",
  "incorporationCountryName": "United Kingdom",
  "incorporationType": "Private Limited Company",
  "active": true,
  "address": {
    "line": "10 Downing Street",
    "city": "London",
    "state": null,
    "postalCode": "SW1A 2AA",
    "country": "GB",
    "fullAddress": "10 Downing Street, London, SW1A 2AA"
  },
  "officers": [
    {
      "entityName": "JOHN DOE",
      "role": "director",
      "occupation": "CEO",
      "nationality": "GB",
      "firstName": "John",
      "lastName": "Doe",
      "active": true
    }
  ],
  "owners": [
    {
      "type": "owner",
      "role": "shareholder",
      "entityType": "company",
      "entityName": "Acme Holdings Ltd",
      "incorporationType": "Private Company Limited By Shares",
      "registrationNumber": "09876543",
      "ownershipType": "share_ownership",
      "address": {
        "line": "10 Downing Street",
        "city": "London",
        "postalCode": "SW1A 2AA",
        "country": "GB"
      },
      "ownershipStructure": {
        "descriptionString": "The person holds, directly or indirectly, more than 75% of the shares in the company."
      }
    }
  ],
  "filings": [
    {
      "name": "Annual Accounts",
      "description": "Full accounts made up to 2025-12-31",
      "type": "AA",
      "date": "2026-05-04",
      "fileUrl": "https://beta.companieshouse.gov.uk/company/12345678/filing-history/abc123/document"
    }
  ],
  "industryCodes": [
    {
      "type": "SIC",
      "code": "62011",
      "description": "Ready-made interactive leisure and entertainment software development"
    }
  ],
  "website": "https://acmecorp.com",
  "email": "info@acmecorp.com",
  "phone": "+44 20 7946 0958",
  "tradingNames": ["Acme Ltd"],
  "previousNames": ["Acme Technologies Ltd"],
  "cached": false,
  "cached_at": null,
  "hit_count": null
}

404 Not Found

{
  "error": "No company found with ID: 67625f5f313233343536373812312.",
  "code": "not_found",
  "request_id": "aa09ddb5-428a-445b-a470-21e3eac5b5fc"
}

429 Too Many Requests

{
  "error": "Request was throttled. Expected available in 30 seconds.",
  "code": "rate_limited",
  "request_id": "aa09ddb5-428a-445b-a470-21e3eac5b5fc"
}

Rate Limits

Company search endpoints have different rate limits based on cost and expected usage patterns.

Limits by Endpoint

Endpoint Limit Window
Search Companies 5 requests Per minute
Get Company Details 100 requests Per minute
Why Different Limits?

Search is limited to 5/min because it charges credits and calls external APIs. Details is higher (100/min) because it's free and primarily serves cached data.

Rate Limit Headers

X-RateLimit-Limit: 5
X-RateLimit-Remaining: 3
X-RateLimit-Reset: 1706699460

Exceeded Rate Limit Response

{
  "error": "Request was throttled. Expected available in 45 seconds.",
  "code": "rate_limited",
  "request_id": "aa09ddb5-428a-445b-a470-21e3eac5b5fc"
}