{"openapi":"3.0.3","info":{"title":"The Semiconductor Hub Public API","version":"1.1.0","description":"Read access to public directory profiles, job listings, events, the Hub Product Codes taxonomy standard and the Data Catalog (dated observation series with per-dataset contracts), plus a write endpoint for posting job listings. Authenticate with an API key created from your company workspace: `Authorization: Bearer <key>`. Open-tier datasets, the catalogue listing, contracts and snapshots answer without a key. Rate limit: 120 requests/minute per key. Only public data is exposed. Private and members-only profile fields are never returned. See /developers for terms of use."},"servers":[{"url":"https://www.thesemiconhub.com/api/v1"}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer"}}},"security":[{"ApiKeyAuth":[]}],"paths":{"/companies":{"get":{"summary":"List directory companies","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"segment","in":"query","schema":{"type":"string"},"description":"Filter by value-chain segment enum value."}],"responses":{"200":{"description":"Paginated company list. When the rich company page is on, each record has a provenance object giving, per field, its source mode (vendor_stated or published_and_recorded), the date it was stated or recorded, whether a representative has confirmed it, and whether it is past its review date. A field the company page hides is null."}}}},"/companies/{id}":{"get":{"summary":"Get one company profile, including its public offerings","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Company profile, with the same provenance object as the list when the rich company page is on."},"404":{"description":"Not found."}}}},"/reference":{"get":{"summary":"List published reference pages","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}}],"responses":{"200":{"description":"Paginated list of reference pages with their kind and maturity."}}}},"/reference/{slug}":{"get":{"summary":"Get one reference page's current revision, with each claim and its source","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The page, its current revision body, its claims with their sources and dates, and its revision list."},"404":{"description":"Not found."}}}},"/jobs":{"get":{"summary":"List live job listings","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}}],"responses":{"200":{"description":"Paginated job listing list."}}},"post":{"summary":"Post a job listing to your own company (ATS integration)","description":"Scoped to the API key's own company. Same validation and 60-day expiry as posting manually.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["title","primaryDiscipline","seniority","remotePolicy","country","description","externalApplyUrl"],"properties":{"title":{"type":"string"},"primaryDiscipline":{"type":"string"},"seniority":{"type":"string"},"remotePolicy":{"type":"string"},"city":{"type":"string"},"country":{"type":"string"},"description":{"type":"string"},"requirements":{"type":"string"},"externalApplyUrl":{"type":"string","format":"uri"}}}}}},"responses":{"201":{"description":"Created."},"422":{"description":"Validation failed."}}}},"/events":{"get":{"summary":"List published events","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}}],"responses":{"200":{"description":"Paginated event list."}}}},"/community/boards":{"get":{"summary":"Liveness counts for every public community board and company space: threads, posts, participants and latest activity","description":"Counts exclude removed content, AI first answers and system accounts, and include quiet boards with their real numbers. The definition of each count is returned with the data.","responses":{"200":{"description":"Boards with counts and definitions."}}}},"/ip-catalogue":{"get":{"summary":"List confirmed IP catalogue entries, each attribute value with its own source type and stated date","parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1}},{"name":"class","in":"query","schema":{"type":"string"},"description":"Filter by function class key (see ipClasses in /api/taxonomy/schema.json)."}],"responses":{"200":{"description":"Paginated entries; every value carries sourceType (VENDOR_STATED, DERIVED, SPECIFICATION, THIRD_PARTY) and, where vendor-stated, statedAt."}}}},"/taxonomy":{"get":{"summary":"List Hub Product Codes: the open, versioned value-chain segment and product/service category standard","parameters":[{"name":"kind","in":"query","schema":{"type":"string","enum":["SEGMENT","OFFERING_CATEGORY"]},"description":"Filter by node kind."}],"responses":{"200":{"description":"Full active taxonomy, with the current schema version."}}}},"/datasets":{"get":{"summary":"List the Data Catalog: every published dataset with kind, topic, tier, computed coverage window and endpoints","security":[],"parameters":[{"name":"kind","in":"query","schema":{"type":"string","enum":["CHART","REFERENCE","TOOL","COLLECTING","LEDGER"]}},{"name":"topic","in":"query","schema":{"type":"string"}},{"name":"tier","in":"query","schema":{"type":"string","enum":["OPEN","FREE","PAID"]}}],"responses":{"200":{"description":"Catalog listing. No key required."}}}},"/datasets/{slug}":{"get":{"summary":"One dataset's observation series (JSON or CSV)","description":"Open-tier datasets answer without a key; Free-key and Pro datasets need `Authorization: Bearer <key>`. Every row carries its period, as-of date, series key, value, source name/type and a backfill flag, plus (since 17 Oct 2026, additive) a closed sourceKind, a confidenceTier with no numeric score, its tierBasis, the estimator and basis for estimates, and a published band where one exists. `format=csv` returns the same rows as a CSV download for spreadsheets, with the new columns after recorded_at. A withdrawn dataset answers 410 with its corrections entry, with no key needed.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"series","in":"query","schema":{"type":"string"},"description":"Restrict to one series key."},{"name":"from","in":"query","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","schema":{"type":"string","format":"date"}},{"name":"format","in":"query","schema":{"type":"string","enum":["json","csv"],"default":"json"}},{"name":"asOf","in":"query","schema":{"type":"string","format":"date"},"description":"Since 17 Oct 2026: the rows exactly as the append-only ledger held them at the end of this UTC day, in the same shape. Repeat requests return the same rows. The JSON's ledger object states when capture began."}],"responses":{"200":{"description":"Dataset with observations."},"401":{"description":"Key required for this tier."},"404":{"description":"Not found."},"410":{"description":"Withdrawn: the body carries its corrections entry."}}}},"/datasets/{slug}/contract":{"get":{"summary":"Machine-readable data contract: coverage computed from the rows, cadence, revision policy, sources, known gaps, access","security":[],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Data contract. No key required."},"404":{"description":"Not found."},"410":{"description":"Withdrawn: the body carries its corrections entry."}}}},"/indicators/{slug}":{"get":{"summary":"One published indicator: value, kind, coverage, versioned method note and ledger history","description":"No key. Every value carries its kind (observed, estimated, forecast) and every history row its class (movement or restatement) and method note version. A value or slice resting on fewer records than the coverage floor is withheld with the reason. `asOf=YYYY-MM-DD` answers as the ledger held it at the end of that UTC day. Drafts and scheduled indicators answer 404.","security":[],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"asOf","in":"query","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"The indicator."},"400":{"description":"Bad asOf date."},"404":{"description":"Not found or not published."}}}},"/snapshot":{"get":{"summary":"Point-in-time replay: the value every ledger series carried on a given date","security":[],"parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","format":"date"},"description":"YYYY-MM-DD (UTC)."},{"name":"scope","in":"query","schema":{"type":"string","enum":["ledger","all"],"default":"ledger"}},{"name":"basis","in":"query","schema":{"type":"string","enum":["observed","recorded"],"default":"observed"},"description":"observed (unchanged default): the latest observation describing a period on or before the date, as held today. recorded (since 17 Oct 2026): what was live on that date, from the append-only ledger, identical on every request."}],"responses":{"200":{"description":"Snapshot. No key required."},"400":{"description":"Bad date."}}}}}}