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

ParameterTypeNotes
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

FieldTypeNotes
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:

FieldTypeMaps 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

FieldTypeNotes
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

FieldTypeNotes
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

FieldTypeMeaning
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

FieldTypeNotes
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.

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.