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.
/api/v1/company-search/
/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.
/api/v1/company-search/{company_id}/
/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 |
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"
}