{"openapi":"3.0.3","info":{"title":"Gamma Insights Company API","version":"1.0.0","description":"Read-only, versioned HTTP API for querying the Gamma Insights multi-country\ncompany database -- harmonised registry identity, financials, directors,\nestablishments and ownership links across France, the United Kingdom, Belgium,\nNorway, Spain, Switzerland, Finland, Sweden, Luxembourg, Ireland, Denmark and\nGreece (more as countries come online), plus reviewed public earnings-call\ntranscripts.\n\nAll responses are JSON. The response shape is a **stable contract**: within\n`v1`, fields are only ever added -- never removed or renamed.\n\n## Authentication\n\nEvery data request must carry a valid API key in **one** of these headers:\n\n```\nX-API-Key: gmk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n```\nor\n```\nAuthorization: Api-Key gmk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n```\n\nKeys are issued by a Gamma operator and shown **once** at creation; they are\nstored only as a SHA-256 hash, so a lost key cannot be recovered -- request a\nnew one and revoke the old. Requests without a valid key receive `401`.\nContact us (see below) to obtain a key.\n\nThe `/schema/` and `/coverage/` endpoints are public and need no key.\n\n## Rate limiting\n\nThree stacked limits, all **per user** (every key of the same user shares the\nsame buckets, so minting more keys does not raise the quota):\n\n- **600 requests / hour**\n- **5,000 requests / day**\n- **3 concurrent in-flight requests**\n\nExceeding any of them returns `429 Too Many Requests` with a `Retry-After`\nheader.\n\n## Pagination\n\nList endpoints use page-number pagination with an explicit envelope:\n\n```json\n{\n  \"count\": 4213,\n  \"page\": 1,\n  \"page_size\": 25,\n  \"total_pages\": 169,\n  \"has_next\": true,\n  \"has_previous\": false,\n  \"results\": [ ... ]\n}\n```\n\nControl it with `page` (1-based, default `1`) and `page_size`\n(default `25`, max `100`). Out-of-range values are clamped, not rejected.\n\n## Errors\n\n| Code | Meaning |\n|------|---------|\n| `200` | OK |\n| `400` | Invalid query/filter value (e.g. non-numeric `revenue_min`) |\n| `401` | Missing or invalid API key |\n| `404` | No company / transcript with that identifier |\n| `429` | Rate limit exceeded (see `Retry-After`) |\n\nErrors share one envelope: `{\"detail\": \"...\"}`.\n\n## Data coverage\n\nDatasets vary by country (e.g. France exposes detailed account line items;\nthe UK files mostly balance-sheet-only accounts). Call\n`GET /api/v1/coverage/` for the machine-readable per-country matrix -- it lets\nyou tell \"this company has no filed accounts\" apart from \"this country's\naccounts are not collected at all\".\n\n## Country-native detail fields\n\nThe single-company **detail** endpoint (`GET /api/v1/companies/{id}/`) returns\nthe common company object **plus** a `country_extras` object of country-native\nregistry fields -- e.g. France's corporate purpose and share capital,\nSwitzerland's canton and cantonal-register link, Norway's employee count and VAT\nstatus, Belgium's registry contact channels. It is sparse and country-dependent\n(`{}` when the country exposes none) and is never returned by the list endpoint.\nThe `detail_fields` array in `GET /api/v1/coverage/` lists each country's keys.\n","contact":{"name":"Gamma Insights","email":"contact@gamma-insights.co","url":"https://gamma-insights.co"},"license":{"name":"Proprietary - Gamma Insights"}},"paths":{"/api/v1/companies/":{"get":{"operationId":"api_v1_companies_list","description":"Returns a paginated list of companies matching the supplied filters. All filters are optional and combine with AND. Backed by the harmonised cross-country company table.","summary":"Search companies","parameters":[{"in":"query","name":"activity_code","schema":{"type":"string"},"description":"National activity code (NAF/APE, SIC, ...). Repeat for multiple."},{"in":"query","name":"activity_label","schema":{"type":"string"},"description":"Case-insensitive activity-label substring match."},{"in":"query","name":"city","schema":{"type":"string"},"description":"Case-insensitive city substring match."},{"in":"query","name":"country","schema":{"type":"string"},"description":"ISO 3166-1 alpha-2 code. Repeat for multiple (e.g. ?country=FR&country=GB)."},{"in":"query","name":"is_active","schema":{"type":"string"},"description":"Filter by activity status: 'Yes' or 'No'."},{"in":"query","name":"legal_form","schema":{"type":"string"},"description":"Case-insensitive legal-form substring match."},{"in":"query","name":"nace_code","schema":{"type":"string"},"description":"Harmonised NACE Rev.2 code. Repeat for multiple."},{"in":"query","name":"ordering","schema":{"type":"string"},"description":"Sort field: one of name, -name, country, -country, company_id, -company_id."},{"in":"query","name":"page","schema":{"type":"integer"},"description":"1-based page number (default 1)."},{"in":"query","name":"page_size","schema":{"type":"integer"},"description":"Results per page (default 25, max 100)."},{"in":"query","name":"postal_code","schema":{"type":"string"},"description":"Exact postal code. Repeat for multiple."},{"in":"query","name":"q","schema":{"type":"string"},"description":"Free-text search over name, identifier and activity."},{"in":"query","name":"region","schema":{"type":"string"},"description":"Case-insensitive region substring match."},{"in":"query","name":"revenue_max","schema":{"type":"number","format":"double"},"description":"Maximum latest-known revenue (local currency)."},{"in":"query","name":"revenue_min","schema":{"type":"number","format":"double"},"description":"Minimum latest-known revenue (local currency)."}],"tags":["Companies"],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PublicCompanyListResponse"}},"examples":{"CompanySearchResult":{"value":[{"count":4213,"page":1,"page_size":1,"total_pages":4213,"has_next":true,"has_previous":false,"results":[{"country":"FR","company_id":"552032534","name":"DANONE","legal_form":"SA","activity_code":"70.10Z","activity_label":"Activites des sieges sociaux","nace_code":"70.10","is_active":"Yes","creation_date":"1955-01-01","revenue":27600000000,"address":{"street":"17 boulevard Haussmann","postal_code":"75009","city":"Paris","region":"Ile-de-France"}}]}],"summary":"Company search result"}}}},"description":""},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Invalid query or filter value."},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Missing or invalid API key."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (see Retry-After)."}}}},"/api/v1/companies/{company_id}/":{"get":{"operationId":"api_v1_companies_retrieve","description":"Returns one company by its national registry identifier. When the same identifier exists in more than one country, pass ?country= to disambiguate. The detail object is the list/search company shape PLUS a `country_extras` object of country-native registry fields (e.g. FR corporate_purpose/share_capital, GB company_status, CH canton, NO employees) -- sparse and country-dependent; `{}` where the country exposes none. See /coverage/ `detail_fields` for the per-country set. `country_extras` is never returned by the list endpoint.","summary":"Retrieve a single company","parameters":[{"in":"path","name":"company_id","schema":{"type":"string"},"description":"A unique value identifying this common company record.","required":true},{"in":"query","name":"country","schema":{"type":"string"},"description":"Optional ISO2 country code to disambiguate the identifier."}],"tags":["Companies"],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCompanyDetail"},"examples":{"OneCompany":{"value":{"country":"FR","company_id":"552032534","name":"DANONE","legal_form":"SA","activity_code":"70.10Z","activity_label":"Activites des sieges sociaux","nace_code":"70.10","is_active":"Yes","creation_date":"1955-01-01","revenue":27600000000,"address":{"street":"17 boulevard Haussmann","postal_code":"75009","city":"Paris","region":"Ile-de-France"},"country_extras":{"corporate_purpose":"Acquisition, detention et gestion de participations ; toutes prestations de conseil aux entreprises.","share_capital":"50000","department":"75"}},"summary":"One company"}}}},"description":""},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Missing or invalid API key."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No company with that identifier."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (see Retry-After)."}}}},"/api/v1/companies/{company_id}/establishments/":{"get":{"operationId":"api_v1_companies_establishments_retrieve","description":"Establishments / sites of a company. Available for FR (SIRET-level establishments), BE and NO (sub-units); empty elsewhere -- see /coverage/.","summary":"Company establishments","parameters":[{"in":"path","name":"company_id","schema":{"type":"string"},"description":"A unique value identifying this common company record.","required":true},{"in":"query","name":"country","schema":{"type":"string"},"description":"Optional ISO2 country code to disambiguate."},{"in":"query","name":"page","schema":{"type":"integer"},"description":"1-based page number (default 1)."},{"in":"query","name":"page_size","schema":{"type":"integer"},"description":"Per page (default 25, max 100)."}],"tags":["Companies"],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicEstablishmentsResponse"}}},"description":""},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Missing or invalid API key."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No company with that identifier."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (see Retry-After)."}}}},"/api/v1/companies/{company_id}/financials/":{"get":{"operationId":"api_v1_companies_financials_retrieve","description":"Multi-year financial accounts for a company. FR returns detailed account line items per filing (format \"line_items\"); GB/BE/NO/FI/SE/LU/DK return canonical metrics per period (format \"summary\"). Empty for countries without filed accounts (CH/IE/ES/GR) -- see /coverage/ for the per-country matrix.","summary":"Company financials","parameters":[{"in":"path","name":"company_id","schema":{"type":"string"},"description":"A unique value identifying this common company record.","required":true},{"in":"query","name":"country","schema":{"type":"string"},"description":"Optional ISO2 country code to disambiguate."}],"tags":["Companies"],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicFinancials"},"examples":{"France(format:LineItems)":{"value":{"company_id":"552032534","country":"FR","currency":"EUR","format":"line_items","periods":[{"closing_date":"2023-12-31","filing_date":"2024-06-30","period":"2023","items":[{"code":"CA","label":"Chiffre d'affaires net","value":27600000000},{"code":"RNET","label":"Resultat net","value":880000000}]}]},"summary":"France (format: line_items)"},"GB/BE/NO/FI/SE/LU/DK(format:Summary)":{"value":{"company_id":"00102498","country":"GB","currency":"GBP","format":"summary","periods":[{"period_end":"2023","metrics":{"revenue":1200000,"operating_income":95000,"net_income":72000,"equity":540000,"total_assets":880000}}]},"summary":"GB/BE/NO/FI/SE/LU/DK (format: summary)"}}}},"description":""},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Missing or invalid API key."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No company with that identifier."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (see Retry-After)."}}}},"/api/v1/companies/{company_id}/participations/":{"get":{"operationId":"api_v1_companies_participations_retrieve","description":"Declared inter-company ownership stakes: subsidiaries the company holds (`owns`) and companies that declared holding it (`owned_by`), with the percentage held and the counterpart equity + net result. Available for BE (NBB CBSO ParticipatingInterests); empty elsewhere. This is an explicit ownership graph, distinct from the shared-officer links implied by the representatives endpoint.","summary":"Company participations","parameters":[{"in":"path","name":"company_id","schema":{"type":"string"},"description":"A unique value identifying this common company record.","required":true},{"in":"query","name":"country","schema":{"type":"string"},"description":"Optional ISO2 country code to disambiguate."}],"tags":["Companies"],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicParticipationsResponse"}}},"description":""},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Missing or invalid API key."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No company with that identifier."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (see Retry-After)."}}}},"/api/v1/companies/{company_id}/representatives/":{"get":{"operationId":"api_v1_companies_representatives_retrieve","description":"Directors / officers / beneficial owners. Available for FR (representatives), GB (officers + PSCs), BE (directors), NO (roles), ES (cargos) and GR (directors/partners, with declared ownership percentages); empty for CH/DK/FI/IE/SE/LU -- see /coverage/. Birth dates, where present, are masked to year + month.","summary":"Company representatives","parameters":[{"in":"path","name":"company_id","schema":{"type":"string"},"description":"A unique value identifying this common company record.","required":true},{"in":"query","name":"country","schema":{"type":"string"},"description":"Optional ISO2 country code to disambiguate."},{"in":"query","name":"page","schema":{"type":"integer"},"description":"1-based page number (default 1)."},{"in":"query","name":"page_size","schema":{"type":"integer"},"description":"Per page (default 25, max 100)."}],"tags":["Companies"],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicRepresentativesResponse"},"examples":{"Directors/Officers":{"value":{"count":2,"page":1,"page_size":25,"total_pages":1,"has_next":false,"has_previous":false,"company_id":"552032534","country":"FR","results":[{"first_name":"Jane","last_name":"Doe","full_name":"Jane Doe","role":"President","is_executive":true,"is_corporate":false,"birth_year":1968,"birth_month":3,"kind":"representative"}]},"summary":"Directors / officers"}}}},"description":""},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Missing or invalid API key."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No company with that identifier."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (see Retry-After)."}}}},"/api/v1/coverage/":{"get":{"operationId":"api_v1_coverage_retrieve","description":"Returns the static dataset-availability matrix per country: which sub-resources (financials, representatives, establishments, participations) hold data, the financials format, which extra registry fields the detail endpoint adds in `country_extras` (`detail_fields`), and how well the list-level `revenue` field is populated. Use it to tell \"this company has no data\" apart from \"this country does not collect that dataset\". No API key required.","summary":"Per-country data coverage","tags":["Coverage"],"security":[{}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCoverageResponse"}}},"description":""}}}},"/api/v1/transcripts/":{"get":{"operationId":"api_v1_transcripts_list","description":"Returns a paginated list of earnings-call transcripts (metadata + sentiment summary). Only reviewed, public earnings calls are exposed.","summary":"Search transcripts","parameters":[{"in":"query","name":"company","schema":{"type":"string"},"description":"Case-insensitive company-name substring."},{"in":"query","name":"country","schema":{"type":"string"},"description":"Case-insensitive country substring."},{"in":"query","name":"date_from","schema":{"type":"string"},"description":"Earliest call date (YYYY-MM-DD)."},{"in":"query","name":"date_to","schema":{"type":"string"},"description":"Latest call date (YYYY-MM-DD)."},{"in":"query","name":"industry","schema":{"type":"string"},"description":"Case-insensitive industry substring."},{"in":"query","name":"language","schema":{"type":"string"},"description":"Language code (e.g. en, fr)."},{"in":"query","name":"ordering","schema":{"type":"string"},"description":"Sort: one of call_date, -call_date, company_name, -company_name, ticker, -ticker."},{"in":"query","name":"page","schema":{"type":"integer"},"description":"1-based page number (default 1)."},{"in":"query","name":"page_size","schema":{"type":"integer"},"description":"Results per page (default 25, max 100)."},{"in":"query","name":"q","schema":{"type":"string"},"description":"Free-text search over company, ticker and title."},{"in":"query","name":"quarter","schema":{"type":"string"},"description":"Fiscal quarter substring (e.g. Q1 2024)."},{"in":"query","name":"sector","schema":{"type":"string"},"description":"Case-insensitive sector substring."},{"in":"query","name":"ticker","schema":{"type":"string"},"description":"Exact ticker (case-insensitive)."},{"in":"query","name":"year","schema":{"type":"integer"},"description":"Calendar year of the call date."}],"tags":["Transcripts"],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PublicTranscriptListResponse"}},"examples":{"TranscriptSearchResult":{"value":[{"count":318,"page":1,"page_size":1,"total_pages":318,"has_next":true,"has_previous":false,"results":[{"id":42,"company_name":"Apple Inc.","ticker":"AAPL","sector":"Technology","industry":"Consumer Electronics","country":"US","title":"Apple Q1 2024 Earnings Call","call_type":"earnings","quarter":"Q1 2024","call_date":"2024-02-01","language":"en","summary":"Record quarterly revenue driven by services growth.","sentiment":{"positive_count":42,"neutral_count":18,"negative_count":6,"positive_percentage":63.6,"neutral_percentage":27.3,"negative_percentage":9.1},"url":"https://app.gamma-insights.co/transcripts/42"}]}],"summary":"Transcript search result"}}}},"description":""},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Missing or invalid API key."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (see Retry-After)."}}}},"/api/v1/transcripts/{id}/":{"get":{"operationId":"api_v1_transcripts_retrieve","description":"Returns one transcript: metadata, sentiment summary, and any shared classification label distributions.","summary":"Retrieve a transcript","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true}],"tags":["Transcripts"],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicTranscriptDetail"},"examples":{"OneTranscript":{"value":{"id":42,"company_name":"Apple Inc.","ticker":"AAPL","sector":"Technology","industry":"Consumer Electronics","country":"US","title":"Apple Q1 2024 Earnings Call","call_type":"earnings","quarter":"Q1 2024","call_date":"2024-02-01","language":"en","summary":"Record quarterly revenue driven by services growth.","sentiment":{"positive_count":42,"neutral_count":18,"negative_count":6,"positive_percentage":63.6,"neutral_percentage":27.3,"negative_percentage":9.1},"url":"https://app.gamma-insights.co/transcripts/42","classifications":[{"template":"Guidance tone","total_classified":12,"labels":{"raised":{"count":7},"maintained":{"count":5}}}]},"summary":"One transcript"}}}},"description":""},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Missing or invalid API key."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No public transcript with that id."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (see Retry-After)."}}}},"/api/v1/transcripts/{id}/content/":{"get":{"operationId":"api_v1_transcripts_content_retrieve","description":"Returns the speaker-tagged content blocks of a transcript with their sentiment, paginated by block.","summary":"Retrieve transcript content","parameters":[{"in":"path","name":"id","schema":{"type":"integer"},"required":true},{"in":"query","name":"page","schema":{"type":"integer"},"description":"1-based page number (default 1)."},{"in":"query","name":"page_size","schema":{"type":"integer"},"description":"Blocks per page (default 25, max 100)."}],"tags":["Transcripts"],"security":[{"ApiKeyAuth":[]}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicTranscriptContentResponse"},"examples":{"TranscriptContentBlocks":{"value":{"count":240,"page":1,"page_size":1,"total_pages":240,"has_next":true,"has_previous":false,"transcript_id":42,"results":[{"sequence_order":1,"speaker":"Tim Cook","content":"Thank you and good afternoon everyone.","sentiment":"positive","sentiment_confidence":0.91,"start_time":12.4,"end_time":15.8}]},"summary":"Transcript content blocks"}}}},"description":""},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Missing or invalid API key."},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"No public transcript with that id."},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Rate limit exceeded (see Retry-After)."}}}}},"components":{"schemas":{"ErrorResponse":{"type":"object","description":"Standard error envelope (docs only).","properties":{"detail":{"type":"string"}},"required":["detail"]},"PublicAddress":{"type":"object","properties":{"street":{"type":"string","nullable":true,"default":""},"postal_code":{"type":"string","nullable":true,"default":""},"city":{"type":"string","nullable":true,"default":""},"region":{"type":"string","nullable":true,"default":""}}},"PublicClassification":{"type":"object","description":"A shared (non-user-specific) classification's aggregate label distribution.","properties":{"template":{"type":"string"},"total_classified":{"type":"integer"},"labels":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{}},"nullable":true}},"required":["labels","template","total_classified"]},"PublicCompany":{"type":"object","description":"One company as returned by the public API (list + detail).\n\nBacked by the ``CommonCompanyRecord`` ClickHouse model.","properties":{"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code, e.g. 'FR'."},"company_id":{"type":"string","description":"National registry identifier (SIREN for FR, company number for GB, ...)."},"name":{"type":"string","description":"Registered company name."},"legal_form":{"type":"string","nullable":true,"default":"","description":"Legal form label."},"activity_code":{"type":"string","nullable":true,"default":"","description":"National activity code (NAF/APE, SIC, ...)."},"activity_label":{"type":"string","nullable":true,"default":"","description":"Activity label."},"nace_code":{"type":"string","nullable":true,"default":"","description":"Harmonised NACE Rev.2 code."},"is_active":{"type":"string","default":"Yes","description":"'Yes' if the company is active, else 'No'."},"creation_date":{"type":"string","nullable":true,"default":"","description":"Registration date (ISO-8601 where available)."},"revenue":{"type":"number","format":"double","nullable":true,"description":"Latest known revenue in local currency (coverage varies by country)."},"address":{"allOf":[{"$ref":"#/components/schemas/PublicAddress"}],"readOnly":true}},"required":["address","company_id","country","name"]},"PublicCompanyDetail":{"type":"object","description":"Single-company DETAIL object: the list/search company shape PLUS a\n``country_extras`` object of country-native registry fields fetched via the\ncountry adapter.\n\nStill STRICTLY registry data -- the extras come from the adapter's\n``to_common().country_specific`` (a public projection), never from the CRM /\nenrichment / list layer. ``country_extras`` is `{}` for countries that\nexpose no extras. Purely additive to the list shape; list/search are\nunchanged and never carry it.","properties":{"country":{"type":"string","description":"ISO 3166-1 alpha-2 country code, e.g. 'FR'."},"company_id":{"type":"string","description":"National registry identifier (SIREN for FR, company number for GB, ...)."},"name":{"type":"string","description":"Registered company name."},"legal_form":{"type":"string","nullable":true,"default":"","description":"Legal form label."},"activity_code":{"type":"string","nullable":true,"default":"","description":"National activity code (NAF/APE, SIC, ...)."},"activity_label":{"type":"string","nullable":true,"default":"","description":"Activity label."},"nace_code":{"type":"string","nullable":true,"default":"","description":"Harmonised NACE Rev.2 code."},"is_active":{"type":"string","default":"Yes","description":"'Yes' if the company is active, else 'No'."},"creation_date":{"type":"string","nullable":true,"default":"","description":"Registration date (ISO-8601 where available)."},"revenue":{"type":"number","format":"double","nullable":true,"description":"Latest known revenue in local currency (coverage varies by country)."},"address":{"allOf":[{"$ref":"#/components/schemas/PublicAddress"}],"readOnly":true},"country_extras":{"allOf":[{"$ref":"#/components/schemas/PublicCountryExtras"}],"description":"Country-native registry fields beyond the common shape. Sparse and country-dependent; {} when the country exposes none. See /coverage/ `detail_fields`."}},"required":["address","company_id","country","name"]},"PublicCompanyListResponse":{"type":"object","description":"Envelope for the paginated company list response (docs only).","properties":{"count":{"type":"integer","description":"Total number of companies matching the query."},"page":{"type":"integer"},"page_size":{"type":"integer"},"total_pages":{"type":"integer"},"has_next":{"type":"boolean"},"has_previous":{"type":"boolean"},"results":{"type":"array","items":{"$ref":"#/components/schemas/PublicCompany"}}},"required":["count","has_next","has_previous","page","page_size","results","total_pages"]},"PublicCountryCoverage":{"type":"object","description":"Dataset availability for one country (docs only).","properties":{"country":{"type":"string","description":"ISO 3166-1 alpha-2 code."},"financials":{"type":"string","nullable":true,"description":"'line_items' (FR), 'summary' (GB/BE/NO/FI/SE/LU), or null when no accounts are collected for this country."},"representatives":{"type":"boolean","description":"Whether /companies/{id}/representatives/ returns data."},"representative_kinds":{"type":"array","items":{"type":"string"},"description":"The `kind` values this country emits (officer, psc, ...)."},"establishments":{"type":"boolean","description":"Whether /companies/{id}/establishments/ returns data."},"participations":{"type":"boolean","description":"Whether /companies/{id}/participations/ returns data."},"list_revenue":{"type":"string","description":"Coverage of the `revenue` field on list results: 'high' | 'partial' | 'none'."},"detail_fields":{"type":"array","items":{"type":"string"},"description":"Country-native registry fields returned in the detail `country_extras` object, beyond the list shape (e.g. corporate_purpose, share_capital, canton). Empty when none."},"notes":{"type":"string","description":"Human-readable caveats."}},"required":["country","detail_fields","establishments","financials","list_revenue","notes","participations","representative_kinds","representatives"]},"PublicCountryExtras":{"type":"object","description":"Country-native registry extras returned under ``country_extras`` on the\ncompany DETAIL response. SPARSE: only the keys the company's country\npopulates appear (see /coverage/ `detail_fields` for the per-country set);\neverything else is omitted, not null.\n\nStrictly public registry data -- sourced from the adapter's\n``to_common().country_specific`` projection via an explicit whitelist, never\nfrom the CRM / enrichment / list layer. The union below is the documented\nschema; keep it in step with company_detail_data._PUBLIC_DETAIL_EXTRA_FIELDS.","properties":{"corporate_purpose":{"type":"string","description":"Declared corporate purpose / objet social (FR)."},"department":{"type":"string","description":"Department code (FR)."},"share_capital":{"type":"string","description":"Registered share capital, raw registry value (FR, ES)."},"company_category":{"type":"string","description":"Company category (GB)."},"company_status":{"type":"string","description":"Registry status, e.g. 'Active', 'Liquidation' (GB)."},"country_of_origin":{"type":"string","description":"Country of origin (GB)."},"secondary_activity_code":{"type":"string","description":"Secondary SIC code (GB)."},"secondary_activity_label":{"type":"string","description":"Secondary SIC description (GB)."},"legal_form_code":{"type":"string","description":"Native legal-form code (BE, NO, FI)."},"registry_status":{"type":"string","description":"Enterprise status (BE)."},"enterprise_type":{"type":"string","description":"Type of enterprise, e.g. natural/legal person (BE)."},"phone":{"type":"string","description":"Registry contact phone, where published (BE)."},"email":{"type":"string","description":"Registry contact email, where published (BE)."},"website":{"type":"string","description":"Registry-listed website, where published (BE)."},"province":{"type":"string","description":"Province (ES)."},"employees":{"type":"integer","description":"Registered employee count (NO)."},"registration_date":{"type":"string","description":"Registration date (NO)."},"municipality":{"type":"string","description":"Municipality name (NO, CH)."},"municipality_code":{"type":"string","description":"Municipality code (NO, FI)."},"vat_registered":{"type":"boolean","description":"Whether the entity is VAT-registered (NO)."},"last_accounts_year":{"type":"string","description":"Year of the latest filed accounts (NO)."},"canton":{"type":"string","description":"Canton (CH)."},"cantonal_register_url":{"type":"string","description":"Link to the cantonal commercial register (CH)."},"coordinates":{"type":"string","description":"Geographic coordinates (CH)."}}},"PublicCoverageResponse":{"type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/PublicCountryCoverage"}}},"required":["results"]},"PublicEstablishment":{"type":"object","properties":{"id":{"type":"string","description":"SIRET (FR), establishment number (BE) or sub-unit organisasjonsnummer (NO)."},"name":{"type":"string","default":""},"role":{"type":"string","default":""},"activity_code":{"type":"string","default":""},"activity_label":{"type":"string","default":""},"start_date":{"type":"string","nullable":true},"closed_date":{"type":"string","nullable":true},"address":{"$ref":"#/components/schemas/PublicEstablishmentAddress"}},"required":["address","id"]},"PublicEstablishmentAddress":{"type":"object","properties":{"street":{"type":"string","default":""},"postal_code":{"type":"string","default":""},"city":{"type":"string","default":""},"country":{"type":"string","default":""}}},"PublicEstablishmentsResponse":{"type":"object","properties":{"count":{"type":"integer"},"page":{"type":"integer"},"page_size":{"type":"integer"},"total_pages":{"type":"integer"},"has_next":{"type":"boolean"},"has_previous":{"type":"boolean"},"company_id":{"type":"string"},"country":{"type":"string"},"results":{"type":"array","items":{"$ref":"#/components/schemas/PublicEstablishment"}}},"required":["company_id","count","country","has_next","has_previous","page","page_size","results","total_pages"]},"PublicFinancials":{"type":"object","description":"Multi-year financials. The `periods` item shape is country-specific:\nFR returns labelled account line items per filing (format 'line_items');\nGB/BE/NO/FI/SE/LU/DK return canonical metrics (revenue, operating_income,\nnet_income, equity, ...) per period (format 'summary').","properties":{"company_id":{"type":"string"},"country":{"type":"string"},"currency":{"type":"string","nullable":true},"format":{"type":"string","nullable":true,"description":"'line_items' (FR) or 'summary' (GB/BE/NO/FI/SE/LU/DK)."},"periods":{"type":"array","items":{"type":"object","additionalProperties":{}}}},"required":["company_id","country","currency","format","periods"]},"PublicParticipation":{"type":"object","description":"A declared inter-company ownership stake (BE ParticipatingInterests).","properties":{"company_id":{"type":"string","description":"Counterpart national id."},"name":{"type":"string","default":""},"percentage":{"type":"number","format":"double","nullable":true,"description":"Fraction held (1.0 = 100%)."},"equity":{"type":"number","format":"double","nullable":true},"net_result":{"type":"number","format":"double","nullable":true},"currency":{"type":"string","default":"EUR"},"account_date":{"type":"string","default":""}},"required":["company_id","equity","net_result","percentage"]},"PublicParticipationsResponse":{"type":"object","description":"Ownership graph for one company: subsidiaries it holds (`owns`) and\ncompanies that declared holding it (`owned_by`). BE only today.","properties":{"company_id":{"type":"string"},"country":{"type":"string"},"owns":{"type":"array","items":{"$ref":"#/components/schemas/PublicParticipation"}},"owned_by":{"type":"array","items":{"$ref":"#/components/schemas/PublicParticipation"}}},"required":["company_id","country","owned_by","owns"]},"PublicRepresentative":{"type":"object","properties":{"first_name":{"type":"string","default":""},"last_name":{"type":"string","default":""},"full_name":{"type":"string","default":""},"role":{"type":"string","default":""},"is_executive":{"type":"boolean","default":false},"is_corporate":{"type":"boolean","default":false},"corporate_name":{"type":"string","default":""},"age":{"type":"integer","nullable":true},"birth_year":{"type":"integer","nullable":true},"birth_month":{"type":"integer","nullable":true},"nationality":{"type":"string","default":""},"appointed_date":{"type":"string","nullable":true},"resigned_date":{"type":"string","nullable":true},"natures_of_control":{"type":"string","default":""},"ceased_on":{"type":"string","default":""},"ownership_percentage":{"type":"string","default":"","description":"Declared ownership stake as a string (GR partners), e.g. '99%'. Blank when not declared."},"kind":{"type":"string","description":"representative (FR) | officer/psc (GB) | director (BE) | role (NO) | cargo (ES) | director/partner (GR)."}},"required":["kind"]},"PublicRepresentativesResponse":{"type":"object","properties":{"count":{"type":"integer"},"page":{"type":"integer"},"page_size":{"type":"integer"},"total_pages":{"type":"integer"},"has_next":{"type":"boolean"},"has_previous":{"type":"boolean"},"company_id":{"type":"string"},"country":{"type":"string"},"results":{"type":"array","items":{"$ref":"#/components/schemas/PublicRepresentative"}}},"required":["company_id","count","country","has_next","has_previous","page","page_size","results","total_pages"]},"PublicTranscript":{"type":"object","description":"One transcript's metadata + sentiment summary (list + detail base).","properties":{"id":{"type":"integer"},"company_name":{"type":"string"},"ticker":{"type":"string","default":""},"sector":{"type":"string","nullable":true,"default":""},"industry":{"type":"string","nullable":true,"default":""},"country":{"type":"string","nullable":true,"default":""},"title":{"type":"string","nullable":true,"default":""},"call_type":{"type":"string","nullable":true,"default":""},"quarter":{"type":"string","nullable":true,"default":""},"call_date":{"type":"string","format":"date","nullable":true},"language":{"type":"string","nullable":true,"default":""},"summary":{"type":"string","nullable":true,"default":""},"sentiment":{"allOf":[{"$ref":"#/components/schemas/SentimentSummary"}],"readOnly":true},"url":{"type":"string","readOnly":true}},"required":["call_date","company_name","id","sentiment","url"]},"PublicTranscriptContent":{"type":"object","description":"One speaker block of the transcript with its sentiment.","properties":{"sequence_order":{"type":"integer"},"speaker":{"type":"string","default":""},"content":{"type":"string"},"sentiment":{"type":"string","nullable":true,"default":""},"sentiment_confidence":{"type":"number","format":"double","nullable":true},"start_time":{"type":"number","format":"double","nullable":true},"end_time":{"type":"number","format":"double","nullable":true}},"required":["content","sequence_order"]},"PublicTranscriptContentResponse":{"type":"object","properties":{"count":{"type":"integer"},"page":{"type":"integer"},"page_size":{"type":"integer"},"total_pages":{"type":"integer"},"has_next":{"type":"boolean"},"has_previous":{"type":"boolean"},"transcript_id":{"type":"integer"},"results":{"type":"array","items":{"$ref":"#/components/schemas/PublicTranscriptContent"}}},"required":["count","has_next","has_previous","page","page_size","results","total_pages","transcript_id"]},"PublicTranscriptDetail":{"type":"object","description":"Detail view: metadata + sentiment + shared classification distributions.\n\n``classifications`` is attached to the instance by the view (only\ncompleted, shared classifications -- never per-user ones).","properties":{"id":{"type":"integer"},"company_name":{"type":"string"},"ticker":{"type":"string","default":""},"sector":{"type":"string","nullable":true,"default":""},"industry":{"type":"string","nullable":true,"default":""},"country":{"type":"string","nullable":true,"default":""},"title":{"type":"string","nullable":true,"default":""},"call_type":{"type":"string","nullable":true,"default":""},"quarter":{"type":"string","nullable":true,"default":""},"call_date":{"type":"string","format":"date","nullable":true},"language":{"type":"string","nullable":true,"default":""},"summary":{"type":"string","nullable":true,"default":""},"sentiment":{"allOf":[{"$ref":"#/components/schemas/SentimentSummary"}],"readOnly":true},"url":{"type":"string","readOnly":true},"classifications":{"type":"array","items":{"$ref":"#/components/schemas/PublicClassification"},"readOnly":true}},"required":["call_date","classifications","company_name","id","sentiment","url"]},"PublicTranscriptListResponse":{"type":"object","properties":{"count":{"type":"integer"},"page":{"type":"integer"},"page_size":{"type":"integer"},"total_pages":{"type":"integer"},"has_next":{"type":"boolean"},"has_previous":{"type":"boolean"},"results":{"type":"array","items":{"$ref":"#/components/schemas/PublicTranscript"}}},"required":["count","has_next","has_previous","page","page_size","results","total_pages"]},"SentimentSummary":{"type":"object","description":"Transcript-level sentiment tallies (read from TranscriptInfo fields).","properties":{"positive_count":{"type":"integer"},"neutral_count":{"type":"integer"},"negative_count":{"type":"integer"},"positive_percentage":{"type":"number","format":"double"},"neutral_percentage":{"type":"number","format":"double"},"negative_percentage":{"type":"number","format":"double"}},"required":["negative_count","negative_percentage","neutral_count","neutral_percentage","positive_count","positive_percentage"]}},"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Your Gamma Insights API key (gmk_...)."}}},"servers":[{"url":"https://api.gamma-insights.co","description":"Production"}],"tags":[{"name":"Companies","description":"Search and retrieve companies, financials, directors/officers, establishments and ownership stakes."},{"name":"Transcripts","description":"Search and read reviewed public earnings-call transcripts with sentiment and shared classifications."},{"name":"Coverage","description":"Per-country dataset-availability matrix (public, no API key required)."}],"externalDocs":{"url":"https://gamma-insights.co","description":"Gamma Insights"}}