API reference
GET /v1/companies/details: company field reference
Every field the Triguna company endpoint returns: identity, locations, size, industries, specialities, URLs, flags, and funding, with the traps that catch parsers.
On this page
GET /v1/companies/details returns company firmographics: identity, headquarters, size,
industries, specialities, and funding. Every field is nullable.
Endpoint
GET https://api.triguna.ai/v1/companies/details
curl -H "ApiKey: $TRIGUNA_API_KEY" \
"https://api.triguna.ai/v1/companies/details?company_id=northwind&bypass_cache=false"
Query parameters
| Parameter | Type | Notes |
|---|---|---|
| company_id | string · required | A slug, a numeric company id, or a full company / school / showcase URL. The slug is extracted for you. |
| max_age_days | number | Accept a stored copy up to this many days old. 0 means live. Capped by platform policy, currently 7. |
| bypass_cache | boolean | Force a fresh upstream fetch, skipping our store and the provider cache. |
Response headers
Provenance and rate-limit state travel in headers, not in the body:
X-Data-Source: live | store | stale_fallback
X-Fetched-At: 2026-07-31T14:02:11+00:00
X-Data-Age-Seconds: 0
X-RateLimit-Limit: 10
X-RateLimit-Remaining: 9
Full detail in provenance and freshness.
Response
{
"company_id": "1035",
"public_identifier": "northwind",
"company_name": "Northwind Systems",
"tagline": "Short one-line pitch",
"description": "Long About text.",
"company_type": { "type_code": "PRIVATELY_HELD", "type_name": "Privately Held" },
"locations": {
"headquarter": { "country": "pt", "geographic_area": "Lisbon",
"city": "Lisbon", "postal_code": "1050-058",
"address_line1": "Rua Example 1", "is_headquarter": true },
"all_locations": [ /* same shape */ ]
},
"industries": [{ "id": "4", "name": "Software Development" }],
"specialities": ["Developer tools", "Technology", "SaaS"],
"staff_info": { "staff_count": 184, "staff_range": { "start": 201, "end": 500 } },
"founded_on": { "year": 2010, "month": null, "day": null },
"platform_url": "https://example.com/company/northwind",
"company_url": "https://northwind.dev",
"logo_url": "https://cdn.example.com/...",
"call_to_action": { "text": "Learn more", "url": "https://northwind.dev" },
"phone_number": "+351-21-000-0000",
"followers_count": 24800,
"auto_generated": false,
"claimable": false,
"is_paid": true,
"is_showcase": false,
"funding_data": {
"num_of_funding_rounds": 2,
"last_funding_round": {
"funding_type": "Series B",
"money_raised": { "amount": 45000000, "currency": "usd" },
"announced_on": { "year": 2024, "month": 7, "day": null },
"lead_investors": [{ "name": "Example Ventures", "logo": "https://...",
"investor_url": "https://..." }],
"num_of_other_investors": 4,
"round_url": "https://example.com/funding_round/..."
}
},
"showcase_pages": [],
"affiliated_companies": []
}
Identity
| Field | Type | Notes |
|---|---|---|
| company_id | string | Stable company id. The durable key, so store this. |
| public_identifier | string | The URL slug. User-editable. |
| company_name | string | Display name. |
| tagline | string | Short pitch line. |
| description | string | Full About text. |
| company_type | object | { type_code, type_name }, for example PUBLIC_COMPANY / "Public Company". |
There is no entity_urn at the top level, though nested pages under showcase_pages and
affiliated_companies do carry one.
Locations
locations.headquarter and every element of locations.all_locations share one shape, using
field naming that does not match common conventions:
| Field | Type | Maps to |
|---|---|---|
| country | string | Country, as a lowercase 2-letter code ("pt"). |
| geographic_area | string | State or province. |
| city | string | City. |
| postal_code | string | Postal code. |
| address_line1 | string | Street address. |
| is_headquarter | boolean |
Uppercase the country code if you are joining against ISO data. "pt" will not match "PT" in
a naive join.
Size and industry
| Field | Type | Notes |
|---|---|---|
| industries[] | object[] | { id, name }. The first entry is the primary industry. |
| specialities[] | string[] | Note the spelling: specialities, not specialties. |
| staff_info.staff_count | integer | Exact employee count; often null. |
| staff_info.staff_range | object | { start, end }. end is null for open-ended top brackets. |
| followers_count | integer | Page followers, not employees. |
staff_count and staff_range are independently nullable. Fall back to the midpoint of
staff_range when the exact count is missing:
function headcount(staff: StaffInfo | null): number | null {
if (staff?.staff_count != null) return staff.staff_count;
const r = staff?.staff_range;
if (!r?.start) return null;
return r.end == null ? r.start : Math.round((r.start + r.end) / 2);
}
URLs and media
| Field | Type | Notes |
|---|---|---|
| platform_url | string | The company page URL on the source platform. |
| company_url | string | The company's own website. Scheme varies and may be absent, so normalize. |
| logo_url, background_photo_url, cover_image_url | string | CDN URLs; expire. |
| call_to_action | object | { text, url } from the page's CTA button. |
| phone_number | string | Free-text string. |
CDN URLs expire. If you need a logo to persist, re-host it rather than storing the URL.
Flags
| Field | Type | Meaning |
|---|---|---|
| auto_generated | boolean | The page was created automatically rather than by the company. Data quality on these is poor. |
| claimable | boolean | The page is unclaimed. |
| is_paid | boolean | The company has a paid product on the source platform. |
| is_showcase | boolean | The page is a showcase page rather than a primary company page. |
Where auto_generated is available it is a quality signal, not a curiosity: those records are
thin and frequently wrong, and scoring on them pollutes whatever they feed.
Dates
founded_on and funding_data.last_funding_round.announced_on are objects:
{ "year": 2010, "month": null, "day": null }
Unlike the person endpoint, these carry no iso key.
Only year is reliably populated.
Funding
| Field | Type | Notes |
|---|---|---|
| num_of_funding_rounds | integer | |
| last_funding_round.funding_type | string | For example "Series B", "Seed". |
| last_funding_round.money_raised | object | { amount, currency }. amount is a raw number in whole currency units and can exceed 32-bit range, so store as bigint. currency is lowercase ("usd"). |
| last_funding_round.announced_on | object | Partial-date object. |
| last_funding_round.lead_investors[] | object[] | { name, logo, investor_url }. |
| last_funding_round.num_of_other_investors | integer | |
| last_funding_round.round_url | string | Round URL. |
Only the last round is returned. There is no per-round history in this response. Follow the funding-rounds URL for that.
Related pages
showcase_pages[] and affiliated_companies[] share one shape, a trimmed company summary:
{
"company_name": "...",
"public_identifier": "...",
"entity_urn": "urn:tg:company:...",
"company_url": "...",
"description": "...",
"logo_url": "...",
"followers_count": 1234,
"industries": [{ "id": "4", "name": "Software Development" }],
"is_paid": false,
"is_showcase": true
}
Both are commonly empty. Neither carries company_id, so join on public_identifier or
entity_urn.