{"openapi":"3.0.0","info":{"title":"SGP Directory API","version":"1.0","description":"Public API for accessing Singapore Business Directory data. Date fields use YYYY-MM-DD. Datetime fields use ISO-8601 date-time. Rate-limit reset timestamps use Unix epoch milliseconds with field/header names ending in AtMs, and durations use seconds with names ending in Seconds.","contact":{"name":"API Support","email":"support@sgpdirectory.com","url":"https://sgpdirectory.com"}},"servers":[{"url":"https://api.sgpdirectory.com/v1","description":"Production"},{"url":"http://localhost:3002/v1","description":"Local dev"}],"components":{"schemas":{"EntityBasic":{"type":"object","properties":{"uen":{"type":"string","description":"Unique Entity Number"},"entity_name":{"type":"string","description":"Name of the entity"},"entity_slug":{"type":"string","description":"URL-friendly unique slug for the entity"},"entity_type":{"type":"string","description":"Type of entity (e.g., PRIVATE COMPANY LIMITED BY SHARES)"},"entity_status":{"type":"string","description":"Current status (e.g., Live, Struck Off)"},"registration_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Date of registration (YYYY-MM-DD)"},"primary_industry_section":{"type":"string","description":"Primary SSIC industry section code"},"primary_industry_description":{"type":"string","description":"Description of primary industry"},"primary_ssic_code":{"type":"string","description":"Primary SSIC code"},"primary_ssic_description":{"type":"string","description":"Primary SSIC description"}},"required":["uen","entity_name"],"additionalProperties":false},"Entity":{"type":"object","properties":{"uen":{"type":"string","description":"Unique Entity Number"},"entity_name":{"type":"string","description":"Name of the entity"},"entity_slug":{"type":"string","description":"URL-friendly unique slug for the entity"},"entity_type":{"type":"string","description":"Type of entity (e.g., PRIVATE COMPANY LIMITED BY SHARES)"},"entity_status":{"type":"string","description":"Current status (e.g., Live, Struck Off)"},"entity_status_description":{"type":"string","description":"Description of the status"},"registration_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Date of registration (YYYY-MM-DD)"},"uen_issue_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Date of UEN issuance (YYYY-MM-DD)"},"account_due_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Account due date (YYYY-MM-DD)"},"annual_return_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Annual return date (YYYY-MM-DD)"},"no_of_officers":{"type":"number","description":"Number of officers"},"full_address":{"type":"string","description":"Full formatted address"},"postal_code":{"type":"string","description":"Postal code"},"primary_industry_section":{"type":"string","description":"SSIC Section Code"},"primary_industry_description":{"type":"string","description":"Description of primary industry"},"primary_ssic_code":{"type":"string","description":"SSIC Code"},"primary_ssic_description":{"type":"string","description":"SSIC Description"},"secondary_industry_section":{"type":"string","description":"Secondary SSIC Section Code"},"secondary_industry_description":{"type":"string","description":"Description of secondary industry"},"secondary_ssic_code":{"type":"string","description":"Secondary SSIC Code"},"secondary_ssic_description":{"type":"string","description":"Secondary SSIC Description"}},"required":["uen","entity_name"],"additionalProperties":false},"EntityCompliance":{"type":"object","properties":{"uen":{"type":"string","description":"Unique Entity Number"},"entity_name":{"type":"string","description":"Registered name of the entity"},"entity_type":{"type":"string","description":"Type of entity (e.g., PRIVATE COMPANY LIMITED BY SHARES)"},"entity_status":{"type":"string","description":"Current status (e.g., Live, Struck Off)"},"uen_issue_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Date the UEN was issued (YYYY-MM-DD)"},"account_due_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Date accounts are due for filing (YYYY-MM-DD)"},"estimated_agm_due":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Estimated Annual General Meeting due date (YYYY-MM-DD)"},"estimated_ar_due":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Estimated Annual Return due date (YYYY-MM-DD)"}},"required":["uen","entity_name"],"additionalProperties":false},"EntityOfficer":{"type":"object","properties":{"officer_name":{"type":"string","description":"Full legal name of the officer"},"nationality":{"type":"string","description":"Nationality of the officer (e.g., SINGAPOREAN)"},"position":{"type":"string","description":"Role or position held (e.g., DIRECTOR, CEO, SECRETARY)"},"appointment_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Date the officer was appointed (YYYY-MM-DD)"},"cessation_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Date the officer ceased the role, null if still active (YYYY-MM-DD)"},"officer_status":{"type":"string","description":"Current status of the appointment (e.g., Active, Ceased)"}},"required":["officer_name"],"additionalProperties":false},"EntityShareholder":{"type":"object","properties":{"shareholder_name":{"type":"string","description":"Full legal name of the shareholder"},"shareholder_nationality":{"type":"string","description":"Nationality of the shareholder (e.g., SINGAPOREAN)"},"share_type":{"type":"string","description":"Class of shares held (e.g., ORDINARY, PREFERENCE)"},"share_percentage":{"type":"number","description":"Percentage of total shares held (0–100)"},"appointment_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Date the shares were acquired (YYYY-MM-DD)"},"cessation_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Date the shareholding ended, null if current (YYYY-MM-DD)"},"appointment_status":{"type":"string","description":"Current holding status (e.g., Active, Ceased)"},"is_corporate":{"type":"boolean","description":"True if the shareholder is a corporate entity rather than an individual"},"corporate_uen":{"type":"string","description":"UEN of the corporate shareholder, present only when is_corporate is true"},"corporate_country":{"type":"string","description":"Country of incorporation of the corporate shareholder"}},"required":["shareholder_name"],"additionalProperties":false},"EntityFinancials":{"type":"object","properties":{"highlights":{"type":"array","items":{"type":"object","properties":{"fye_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Financial year-end date (YYYY-MM-DD)"},"revenue":{"type":"number","description":"Total revenue for the period (in currency units)"},"profit_before_tax":{"type":"number","description":"Profit before tax (in currency units)"},"profit_after_tax":{"type":"number","description":"Profit after tax (in currency units)"},"total_assets":{"type":"number","description":"Total assets (in currency units)"},"total_liabilities":{"type":"number","description":"Total liabilities (in currency units)"},"total_equity":{"type":"number","description":"Total equity / net assets (in currency units)"},"cash_and_equivalents":{"type":"number","description":"Cash and cash equivalents (in currency units)"},"currency":{"type":"string","description":"ISO 4217 currency code (e.g., SGD)"}},"required":["fye_date"],"additionalProperties":false},"description":"Annual financial highlights, ordered by financial year-end date descending"},"charges":{"type":"array","items":{"type":"object","properties":{"charge_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Date the charge was registered (YYYY-MM-DD)"},"charge_amount":{"type":"number","description":"Amount secured by the charge (in currency units)"},"currency":{"type":"string","description":"ISO 4217 currency code (e.g., SGD)"},"charge_status":{"type":"string","description":"Status of the charge (e.g., Outstanding, Satisfied)"}},"additionalProperties":false},"description":"Registered charges and mortgages against the entity"}},"required":["highlights","charges"],"additionalProperties":false},"EntityHistory":{"type":"object","properties":{"former_name":{"type":"string","description":"Previous registered name of the entity"},"effective_from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Date this name became effective (YYYY-MM-DD)"},"effective_to":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Date this name was replaced by the current name (YYYY-MM-DD)"}},"required":["former_name"],"additionalProperties":false},"SSICRecommendation":{"type":"object","properties":{"code":{"type":"string","description":"5-digit SSIC classification code (e.g., \"62010\")"},"description":{"type":"string","description":"Human-readable description of the industry activity"},"used_by_peer":{"type":"string","description":"Name of the peer company that uses this SSIC code"}},"required":["code","description"],"additionalProperties":false},"SearchEntitiesInput":{"type":"object","properties":{"query":{"type":"string","description":"Optional full-text search query for company name, UEN, or keywords. Leave empty when listing entities by filters such as registration date."},"uen":{"type":"string","description":"Optional exact Unique Entity Number (UEN) filter. Use this when the UEN is known."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Number of results to return, from 1 to 100."},"page":{"type":"integer","minimum":1,"default":1,"description":"Page number for paginated results, starting at 1."},"status":{"type":"string","description":"Filter by entity status (e.g., 'Live', 'Struck Off'). Optional."},"industry":{"type":"string","description":"Filter by primary industry section code (e.g., 'M' for Professional, Scientific and Technical Activities). Optional."},"registrationDateStart":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Inclusive lower bound for registration_date in YYYY-MM-DD format. Use with registrationDateEnd for recent-entity analysis."},"registrationDateEnd":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Inclusive upper bound for registration_date in YYYY-MM-DD format."},"order":{"type":"string","description":"Sort order. For newest entities, use 'registration_date.desc.nullslast,uen.desc'."}},"additionalProperties":false},"GetEntityInput":{"type":"object","properties":{"uen":{"type":"string","description":"Unique Entity Number (UEN) of the company. If you only have a company name, use search_entities first to find the UEN."}},"required":["uen"],"additionalProperties":false},"CheckNameAvailabilityInput":{"type":"object","properties":{"name":{"type":"string","description":"The proposed entity name to check"}},"required":["name"],"additionalProperties":false},"SearchSSICInput":{"type":"object","properties":{"keywords":{"type":"string","description":"Space-separated keywords to search SSIC descriptions (AND logic — all terms must match). Example: \"software development\" matches codes whose description contains both words. Use peers for OR-style lookup across multiple entities."},"peers":{"type":"string","description":"Comma-separated list of peer entity UENs to find their SSIC codes. Example: \"202100001A,202200002B\"."}},"additionalProperties":false},"NameCheckResponse":{"type":"object","properties":{"available":{"type":"boolean","description":"True if the name passes all checks and is likely available for registration"},"name":{"type":"string","description":"The proposed name exactly as submitted"},"core_name":{"type":"string","description":"Normalised slug used for similarity deduplication (punctuation stripped, common words removed)"},"issues":{"type":"array","items":{"type":"object","properties":{"rule":{"type":"string","enum":["prohibited_word","too_similar","exact_match"]},"message":{"type":"string"},"word":{"type":"string"},"similar_to":{"type":"string"}},"required":["rule","message"],"additionalProperties":false},"description":"Array of issues found; empty when available is true"}},"required":["available","name","core_name","issues"],"additionalProperties":false},"SearchEntitiesResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"uen":{"type":"string","description":"Unique Entity Number"},"entity_name":{"type":"string","description":"Name of the entity"},"entity_slug":{"type":"string","description":"URL-friendly unique slug for the entity"},"entity_type":{"type":"string","description":"Type of entity (e.g., PRIVATE COMPANY LIMITED BY SHARES)"},"entity_status":{"type":"string","description":"Current status (e.g., Live, Struck Off)"},"registration_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Date of registration (YYYY-MM-DD)"},"primary_industry_section":{"type":"string","description":"Primary SSIC industry section code"},"primary_industry_description":{"type":"string","description":"Description of primary industry"},"primary_ssic_code":{"type":"string","description":"Primary SSIC code"},"primary_ssic_description":{"type":"string","description":"Primary SSIC description"}},"required":["uen","entity_name"],"additionalProperties":false},"description":"Array of matching entities for the requested page"},"count":{"type":"number","description":"Total number of entities matching the query across all pages (use with limit and page for pagination)"}},"required":["data","count"],"additionalProperties":false}},"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"paths":{"/entities":{"get":{"summary":"Search / list entities","description":"Returns a paginated list of business entities. Supports full-text search and filtering by status, industry, or registration date.","operationId":"searchEntities","tags":["Entities"],"parameters":[{"name":"query","in":"query","description":"Full-text search query (company name, UEN, keywords)","schema":{"type":"string","example":"Temasek"}},{"name":"uen","in":"query","description":"Filter by exact Unique Entity Number (UEN)","schema":{"type":"string","example":"197501035Z"}},{"name":"status","in":"query","description":"Filter by entity status","schema":{"type":"string","enum":["Live","Struck Off"]}},{"name":"industry","in":"query","description":"Filter by primary industry section code","schema":{"type":"string","example":"M"}},{"name":"registration_date_start","in":"query","description":"Inclusive lower bound for registration_date (YYYY-MM-DD). Use the date 30 days ago with registration_date_end=today to list entities registered in the last 30 days.","schema":{"type":"string","format":"date","example":"2026-04-28"}},{"name":"registration_date_end","in":"query","description":"Inclusive upper bound for registration_date (YYYY-MM-DD). Use with registration_date_start to search entities registered within a date range.","schema":{"type":"string","format":"date","example":"2026-05-28"}},{"name":"order","in":"query","description":"Order by field (e.g. registration_date.desc.nullslast,uen.desc)","schema":{"type":"string"}},{"name":"limit","in":"query","description":"Max results (1–100)","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"page","in":"query","description":"Page number (1-based)","schema":{"type":"integer","minimum":1,"default":1}}],"responses":{"200":{"description":"Paginated entity list","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute for this identity.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when the RPM window resets.","schema":{"type":"integer","format":"int64"}},"X-Quota-Limit":{"description":"Maximum monthly request quota.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Remaining monthly quota.","schema":{"type":"integer"}},"X-Quota-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when monthly quota resets.","schema":{"type":"integer","format":"int64"}},"X-RateLimit-Tier":{"description":"Applied rate-limit tier.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchEntitiesResponse"},"example":{"data":[{"uen":"197501035Z","entity_name":"TEMASEK HOLDINGS (PRIVATE) LIMITED","entity_slug":"temasek-holdings-private-limited","entity_type":"PRIVATE COMPANY LIMITED BY SHARES","entity_status":"Live","registration_date":"1974-06-25","primary_industry_description":"Financial and Insurance Activities"}],"count":1}}}},"429":{"description":"Rate limit or monthly quota exceeded","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute for this identity.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when the RPM window resets.","schema":{"type":"integer","format":"int64"}},"X-Quota-Limit":{"description":"Maximum monthly request quota.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Remaining monthly quota.","schema":{"type":"integer"}},"X-Quota-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when monthly quota resets.","schema":{"type":"integer","format":"int64"}},"X-RateLimit-Tier":{"description":"Applied rate-limit tier.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying this request.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["RATE_LIMIT_EXCEEDED","QUOTA_EXCEEDED","INVALID_API_KEY","API_KEY_REVOKED"]},"message":{"type":"string"},"details":{"type":"object","properties":{"tier":{"type":"string"},"limit":{"type":"integer"},"remaining":{"type":"integer"},"rateResetAtMs":{"type":"integer","format":"int64"},"rateResetAtIso":{"type":"string","format":"date-time"},"retryAfterSeconds":{"type":"integer"},"quotaLimit":{"type":"integer"},"quotaUsed":{"type":"integer"},"quotaResetAtMs":{"type":"integer","format":"int64"},"quotaResetAtIso":{"type":"string","format":"date-time"},"upgradeUrl":{"type":"string","format":"uri"}},"additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}}}}},"/entities/name-check":{"get":{"summary":"Check name availability","description":"Checks whether a proposed business entity name is available for registration.","operationId":"checkNameAvailability","tags":["Entities"],"parameters":[{"name":"name","in":"query","required":true,"description":"Proposed entity name","schema":{"type":"string","example":"Acme Holdings Pte. Ltd."}}],"responses":{"200":{"description":"Name availability result","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute for this identity.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when the RPM window resets.","schema":{"type":"integer","format":"int64"}},"X-Quota-Limit":{"description":"Maximum monthly request quota.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Remaining monthly quota.","schema":{"type":"integer"}},"X-Quota-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when monthly quota resets.","schema":{"type":"integer","format":"int64"}},"X-RateLimit-Tier":{"description":"Applied rate-limit tier.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NameCheckResponse"},"examples":{"available":{"summary":"Name is available","value":{"available":true,"name":"Sunrise Coffee Pte. Ltd.","core_name":"sunrise-coffee","issues":[]}},"taken":{"summary":"Name is too similar to an existing entity","value":{"available":false,"name":"Temasek Holdings Pte. Ltd.","core_name":"temasek-holdings","issues":[{"rule":"too_similar","message":"Name is too similar to an existing entity: TEMASEK HOLDINGS (PRIVATE) LIMITED","similar_to":"TEMASEK HOLDINGS (PRIVATE) LIMITED"}]}}}}}},"429":{"description":"Rate limit or monthly quota exceeded","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute for this identity.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when the RPM window resets.","schema":{"type":"integer","format":"int64"}},"X-Quota-Limit":{"description":"Maximum monthly request quota.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Remaining monthly quota.","schema":{"type":"integer"}},"X-Quota-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when monthly quota resets.","schema":{"type":"integer","format":"int64"}},"X-RateLimit-Tier":{"description":"Applied rate-limit tier.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying this request.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["RATE_LIMIT_EXCEEDED","QUOTA_EXCEEDED","INVALID_API_KEY","API_KEY_REVOKED"]},"message":{"type":"string"},"details":{"type":"object","properties":{"tier":{"type":"string"},"limit":{"type":"integer"},"remaining":{"type":"integer"},"rateResetAtMs":{"type":"integer","format":"int64"},"rateResetAtIso":{"type":"string","format":"date-time"},"retryAfterSeconds":{"type":"integer"},"quotaLimit":{"type":"integer"},"quotaUsed":{"type":"integer"},"quotaResetAtMs":{"type":"integer","format":"int64"},"quotaResetAtIso":{"type":"string","format":"date-time"},"upgradeUrl":{"type":"string","format":"uri"}},"additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}}}}},"/entities/{uen}":{"get":{"summary":"Get entity by UEN","description":"Returns full details for a single entity identified by its Unique Entity Number.","operationId":"getEntity","tags":["Entities"],"parameters":[{"name":"uen","in":"path","required":true,"description":"Unique Entity Number (UEN)","schema":{"type":"string","example":"202100001A"}}],"responses":{"200":{"description":"Entity details","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute for this identity.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when the RPM window resets.","schema":{"type":"integer","format":"int64"}},"X-Quota-Limit":{"description":"Maximum monthly request quota.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Remaining monthly quota.","schema":{"type":"integer"}},"X-Quota-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when monthly quota resets.","schema":{"type":"integer","format":"int64"}},"X-RateLimit-Tier":{"description":"Applied rate-limit tier.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Entity"},"example":{"uen":"197501035Z","entity_name":"TEMASEK HOLDINGS (PRIVATE) LIMITED","entity_slug":"temasek-holdings-private-limited","entity_type":"PRIVATE COMPANY LIMITED BY SHARES","entity_status":"Live","entity_status_description":"Registered and active","registration_date":"1974-06-25","uen_issue_date":"2009-01-01","account_due_date":"2025-10-31","annual_return_date":"2025-05-31","no_of_officers":12,"full_address":"60B ORCHARD ROAD #06-18 TOWER 2 THE ATRIUM@ORCHARD SINGAPORE 238891","postal_code":"238891","primary_industry_section":"K","primary_industry_description":"Financial and Insurance Activities","primary_ssic_code":"64205","primary_ssic_description":"Investment holding companies (with majority shareholding in subsidiaries)","secondary_ssic_code":null,"secondary_ssic_description":null}}}},"400":{"description":"Invalid UEN format","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message"},"details":{"type":"string","description":"Additional context about the error (present on 400 responses)"}},"required":["error"]},"example":{"error":"Invalid UEN format","details":"UEN must be 8-10 alphanumeric characters"}}}},"404":{"description":"Entity not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message"},"details":{"type":"string","description":"Additional context about the error (present on 400 responses)"}},"required":["error"]},"example":{"error":"Entity not found"}}}},"429":{"description":"Rate limit or monthly quota exceeded","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute for this identity.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when the RPM window resets.","schema":{"type":"integer","format":"int64"}},"X-Quota-Limit":{"description":"Maximum monthly request quota.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Remaining monthly quota.","schema":{"type":"integer"}},"X-Quota-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when monthly quota resets.","schema":{"type":"integer","format":"int64"}},"X-RateLimit-Tier":{"description":"Applied rate-limit tier.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying this request.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["RATE_LIMIT_EXCEEDED","QUOTA_EXCEEDED","INVALID_API_KEY","API_KEY_REVOKED"]},"message":{"type":"string"},"details":{"type":"object","properties":{"tier":{"type":"string"},"limit":{"type":"integer"},"remaining":{"type":"integer"},"rateResetAtMs":{"type":"integer","format":"int64"},"rateResetAtIso":{"type":"string","format":"date-time"},"retryAfterSeconds":{"type":"integer"},"quotaLimit":{"type":"integer"},"quotaUsed":{"type":"integer"},"quotaResetAtMs":{"type":"integer","format":"int64"},"quotaResetAtIso":{"type":"string","format":"date-time"},"upgradeUrl":{"type":"string","format":"uri"}},"additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}}}}},"/entities/{uen}/officers":{"get":{"summary":"Get entity officers","description":"Returns directors and officers for a given entity. **Requires API token.**","operationId":"getEntityOfficers","tags":["Entities"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"uen","in":"path","required":true,"description":"Unique Entity Number (UEN)","schema":{"type":"string","example":"202100001A"}}],"responses":{"200":{"description":"Officer list","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute for this identity.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when the RPM window resets.","schema":{"type":"integer","format":"int64"}},"X-Quota-Limit":{"description":"Maximum monthly request quota.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Remaining monthly quota.","schema":{"type":"integer"}},"X-Quota-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when monthly quota resets.","schema":{"type":"integer","format":"int64"}},"X-RateLimit-Tier":{"description":"Applied rate-limit tier.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EntityOfficer"}},"example":[{"officer_name":"TAN AH KOW","nationality":"SINGAPOREAN","position":"DIRECTOR","appointment_date":"2020-01-15","cessation_date":null,"officer_status":"Active"},{"officer_name":"LIM BENG CHOO","nationality":"SINGAPOREAN","position":"SECRETARY","appointment_date":"2020-01-15","cessation_date":null,"officer_status":"Active"}]}}},"401":{"description":"Unauthorized – valid API token required for this endpoint","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message"},"details":{"type":"string","description":"Additional context about the error (present on 400 responses)"}},"required":["error"]},"example":{"error":"Unauthorized: API token is required for this endpoint"}}}},"404":{"description":"Entity not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message"},"details":{"type":"string","description":"Additional context about the error (present on 400 responses)"}},"required":["error"]},"example":{"error":"Entity not found"}}}},"429":{"description":"Rate limit or monthly quota exceeded","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute for this identity.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when the RPM window resets.","schema":{"type":"integer","format":"int64"}},"X-Quota-Limit":{"description":"Maximum monthly request quota.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Remaining monthly quota.","schema":{"type":"integer"}},"X-Quota-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when monthly quota resets.","schema":{"type":"integer","format":"int64"}},"X-RateLimit-Tier":{"description":"Applied rate-limit tier.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying this request.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["RATE_LIMIT_EXCEEDED","QUOTA_EXCEEDED","INVALID_API_KEY","API_KEY_REVOKED"]},"message":{"type":"string"},"details":{"type":"object","properties":{"tier":{"type":"string"},"limit":{"type":"integer"},"remaining":{"type":"integer"},"rateResetAtMs":{"type":"integer","format":"int64"},"rateResetAtIso":{"type":"string","format":"date-time"},"retryAfterSeconds":{"type":"integer"},"quotaLimit":{"type":"integer"},"quotaUsed":{"type":"integer"},"quotaResetAtMs":{"type":"integer","format":"int64"},"quotaResetAtIso":{"type":"string","format":"date-time"},"upgradeUrl":{"type":"string","format":"uri"}},"additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}}}}},"/entities/{uen}/shareholders":{"get":{"summary":"Get entity shareholders","description":"Returns shareholders for a given entity. **Requires API token.**","operationId":"getEntityShareholders","tags":["Entities"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"uen","in":"path","required":true,"description":"Unique Entity Number (UEN)","schema":{"type":"string","example":"202100001A"}}],"responses":{"200":{"description":"Shareholder list","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute for this identity.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when the RPM window resets.","schema":{"type":"integer","format":"int64"}},"X-Quota-Limit":{"description":"Maximum monthly request quota.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Remaining monthly quota.","schema":{"type":"integer"}},"X-Quota-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when monthly quota resets.","schema":{"type":"integer","format":"int64"}},"X-RateLimit-Tier":{"description":"Applied rate-limit tier.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EntityShareholder"}},"example":[{"shareholder_name":"ABC VENTURES PTE. LTD.","shareholder_nationality":"SINGAPOREAN","share_type":"ORDINARY","share_percentage":60,"appointment_date":"2020-03-01","cessation_date":null,"appointment_status":"Active","is_corporate":true,"corporate_uen":"202100001A","corporate_country":"SINGAPORE"},{"shareholder_name":"TAN AH KOW","shareholder_nationality":"SINGAPOREAN","share_type":"ORDINARY","share_percentage":40,"appointment_date":"2020-03-01","cessation_date":null,"appointment_status":"Active","is_corporate":false,"corporate_uen":null,"corporate_country":null}]}}},"401":{"description":"Unauthorized – valid API token required for this endpoint","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message"},"details":{"type":"string","description":"Additional context about the error (present on 400 responses)"}},"required":["error"]},"example":{"error":"Unauthorized: API token is required for this endpoint"}}}},"404":{"description":"Entity not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message"},"details":{"type":"string","description":"Additional context about the error (present on 400 responses)"}},"required":["error"]},"example":{"error":"Entity not found"}}}},"429":{"description":"Rate limit or monthly quota exceeded","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute for this identity.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when the RPM window resets.","schema":{"type":"integer","format":"int64"}},"X-Quota-Limit":{"description":"Maximum monthly request quota.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Remaining monthly quota.","schema":{"type":"integer"}},"X-Quota-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when monthly quota resets.","schema":{"type":"integer","format":"int64"}},"X-RateLimit-Tier":{"description":"Applied rate-limit tier.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying this request.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["RATE_LIMIT_EXCEEDED","QUOTA_EXCEEDED","INVALID_API_KEY","API_KEY_REVOKED"]},"message":{"type":"string"},"details":{"type":"object","properties":{"tier":{"type":"string"},"limit":{"type":"integer"},"remaining":{"type":"integer"},"rateResetAtMs":{"type":"integer","format":"int64"},"rateResetAtIso":{"type":"string","format":"date-time"},"retryAfterSeconds":{"type":"integer"},"quotaLimit":{"type":"integer"},"quotaUsed":{"type":"integer"},"quotaResetAtMs":{"type":"integer","format":"int64"},"quotaResetAtIso":{"type":"string","format":"date-time"},"upgradeUrl":{"type":"string","format":"uri"}},"additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}}}}},"/entities/{uen}/financials":{"get":{"summary":"Get entity financials","description":"Returns financial data for a given entity. **Requires API token.**","operationId":"getEntityFinancials","tags":["Entities"],"security":[{"BearerAuth":[]}],"parameters":[{"name":"uen","in":"path","required":true,"description":"Unique Entity Number (UEN)","schema":{"type":"string","example":"202100001A"}}],"responses":{"200":{"description":"Financial data","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute for this identity.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when the RPM window resets.","schema":{"type":"integer","format":"int64"}},"X-Quota-Limit":{"description":"Maximum monthly request quota.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Remaining monthly quota.","schema":{"type":"integer"}},"X-Quota-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when monthly quota resets.","schema":{"type":"integer","format":"int64"}},"X-RateLimit-Tier":{"description":"Applied rate-limit tier.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityFinancials"},"example":{"highlights":[{"fye_date":"2023-12-31","revenue":4200000,"profit_before_tax":840000,"profit_after_tax":714000,"total_assets":12600000,"total_liabilities":3780000,"total_equity":8820000,"cash_and_equivalents":2100000,"currency":"SGD"},{"fye_date":"2022-12-31","revenue":3600000,"profit_before_tax":612000,"profit_after_tax":520200,"total_assets":10800000,"total_liabilities":3240000,"total_equity":7560000,"cash_and_equivalents":1800000,"currency":"SGD"}],"charges":[{"charge_date":"2021-06-15","charge_amount":2000000,"currency":"SGD","charge_status":"Outstanding"}]}}}},"401":{"description":"Unauthorized – valid API token required for this endpoint","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message"},"details":{"type":"string","description":"Additional context about the error (present on 400 responses)"}},"required":["error"]},"example":{"error":"Unauthorized: API token is required for this endpoint"}}}},"404":{"description":"Entity not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message"},"details":{"type":"string","description":"Additional context about the error (present on 400 responses)"}},"required":["error"]},"example":{"error":"Entity not found"}}}},"429":{"description":"Rate limit or monthly quota exceeded","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute for this identity.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when the RPM window resets.","schema":{"type":"integer","format":"int64"}},"X-Quota-Limit":{"description":"Maximum monthly request quota.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Remaining monthly quota.","schema":{"type":"integer"}},"X-Quota-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when monthly quota resets.","schema":{"type":"integer","format":"int64"}},"X-RateLimit-Tier":{"description":"Applied rate-limit tier.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying this request.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["RATE_LIMIT_EXCEEDED","QUOTA_EXCEEDED","INVALID_API_KEY","API_KEY_REVOKED"]},"message":{"type":"string"},"details":{"type":"object","properties":{"tier":{"type":"string"},"limit":{"type":"integer"},"remaining":{"type":"integer"},"rateResetAtMs":{"type":"integer","format":"int64"},"rateResetAtIso":{"type":"string","format":"date-time"},"retryAfterSeconds":{"type":"integer"},"quotaLimit":{"type":"integer"},"quotaUsed":{"type":"integer"},"quotaResetAtMs":{"type":"integer","format":"int64"},"quotaResetAtIso":{"type":"string","format":"date-time"},"upgradeUrl":{"type":"string","format":"uri"}},"additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}}}}},"/entities/{uen}/compliance":{"get":{"summary":"Get entity compliance info","description":"Returns compliance and filing status for a given entity.","operationId":"getEntityCompliance","tags":["Entities"],"parameters":[{"name":"uen","in":"path","required":true,"description":"Unique Entity Number (UEN)","schema":{"type":"string","example":"202100001A"}}],"responses":{"200":{"description":"Compliance details","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute for this identity.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when the RPM window resets.","schema":{"type":"integer","format":"int64"}},"X-Quota-Limit":{"description":"Maximum monthly request quota.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Remaining monthly quota.","schema":{"type":"integer"}},"X-Quota-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when monthly quota resets.","schema":{"type":"integer","format":"int64"}},"X-RateLimit-Tier":{"description":"Applied rate-limit tier.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityCompliance"},"example":{"uen":"202100001A","entity_name":"SUNRISE COFFEE PTE. LTD.","entity_type":"PRIVATE COMPANY LIMITED BY SHARES","entity_status":"Live","uen_issue_date":"2021-03-15","account_due_date":"2025-09-30","estimated_agm_due":"2025-06-30","estimated_ar_due":"2025-08-31"}}}},"404":{"description":"Entity not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message"},"details":{"type":"string","description":"Additional context about the error (present on 400 responses)"}},"required":["error"]},"example":{"error":"Entity not found"}}}},"429":{"description":"Rate limit or monthly quota exceeded","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute for this identity.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when the RPM window resets.","schema":{"type":"integer","format":"int64"}},"X-Quota-Limit":{"description":"Maximum monthly request quota.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Remaining monthly quota.","schema":{"type":"integer"}},"X-Quota-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when monthly quota resets.","schema":{"type":"integer","format":"int64"}},"X-RateLimit-Tier":{"description":"Applied rate-limit tier.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying this request.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["RATE_LIMIT_EXCEEDED","QUOTA_EXCEEDED","INVALID_API_KEY","API_KEY_REVOKED"]},"message":{"type":"string"},"details":{"type":"object","properties":{"tier":{"type":"string"},"limit":{"type":"integer"},"remaining":{"type":"integer"},"rateResetAtMs":{"type":"integer","format":"int64"},"rateResetAtIso":{"type":"string","format":"date-time"},"retryAfterSeconds":{"type":"integer"},"quotaLimit":{"type":"integer"},"quotaUsed":{"type":"integer"},"quotaResetAtMs":{"type":"integer","format":"int64"},"quotaResetAtIso":{"type":"string","format":"date-time"},"upgradeUrl":{"type":"string","format":"uri"}},"additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}}}}},"/entities/{uen}/history":{"get":{"summary":"Get entity history","description":"Returns historical name and status changes for a given entity.","operationId":"getEntityHistory","tags":["Entities"],"parameters":[{"name":"uen","in":"path","required":true,"description":"Unique Entity Number (UEN)","schema":{"type":"string","example":"202100001A"}}],"responses":{"200":{"description":"History list","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute for this identity.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when the RPM window resets.","schema":{"type":"integer","format":"int64"}},"X-Quota-Limit":{"description":"Maximum monthly request quota.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Remaining monthly quota.","schema":{"type":"integer"}},"X-Quota-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when monthly quota resets.","schema":{"type":"integer","format":"int64"}},"X-RateLimit-Tier":{"description":"Applied rate-limit tier.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EntityHistory"}},"example":[{"former_name":"SUNRISE BEVERAGE COMPANY PTE. LTD.","effective_from":"2018-04-01","effective_to":"2021-03-14"}]}}},"404":{"description":"Entity not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message"},"details":{"type":"string","description":"Additional context about the error (present on 400 responses)"}},"required":["error"]},"example":{"error":"Entity not found"}}}},"429":{"description":"Rate limit or monthly quota exceeded","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute for this identity.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when the RPM window resets.","schema":{"type":"integer","format":"int64"}},"X-Quota-Limit":{"description":"Maximum monthly request quota.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Remaining monthly quota.","schema":{"type":"integer"}},"X-Quota-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when monthly quota resets.","schema":{"type":"integer","format":"int64"}},"X-RateLimit-Tier":{"description":"Applied rate-limit tier.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying this request.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["RATE_LIMIT_EXCEEDED","QUOTA_EXCEEDED","INVALID_API_KEY","API_KEY_REVOKED"]},"message":{"type":"string"},"details":{"type":"object","properties":{"tier":{"type":"string"},"limit":{"type":"integer"},"remaining":{"type":"integer"},"rateResetAtMs":{"type":"integer","format":"int64"},"rateResetAtIso":{"type":"string","format":"date-time"},"retryAfterSeconds":{"type":"integer"},"quotaLimit":{"type":"integer"},"quotaUsed":{"type":"integer"},"quotaResetAtMs":{"type":"integer","format":"int64"},"quotaResetAtIso":{"type":"string","format":"date-time"},"upgradeUrl":{"type":"string","format":"uri"}},"additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}}}}},"/ssic/search":{"get":{"summary":"Search SSIC codes","description":"Searches Singapore Standard Industrial Classification (SSIC) codes by keyword and/or by peer company UEN. At least one of `keyword` or `peers` must be provided. Peer results (codes used by named companies) are returned first, followed by keyword matches.","operationId":"searchSSIC","tags":["SSIC"],"parameters":[{"name":"keyword","in":"query","required":true,"description":"Keyword search against SSIC descriptions. Supports AND logic (space-separated words) and OR logic (comma-separated groups). Example: `retail food,delivery` means (retail AND food) OR (delivery).","schema":{"type":"string","example":"software development"}},{"name":"peers","in":"query","required":false,"description":"Comma-separated list of peer entity UENs whose SSIC codes will be included in results. Example: `202100001A,202200002B`.","schema":{"type":"string","example":"202100001A,202200002B"}}],"responses":{"200":{"description":"Matching SSIC codes. Peer-derived codes (used_by_peer set) appear first.","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute for this identity.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when the RPM window resets.","schema":{"type":"integer","format":"int64"}},"X-Quota-Limit":{"description":"Maximum monthly request quota.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Remaining monthly quota.","schema":{"type":"integer"}},"X-Quota-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when monthly quota resets.","schema":{"type":"integer","format":"int64"}},"X-RateLimit-Tier":{"description":"Applied rate-limit tier.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SSICRecommendation"}},"example":[{"code":"62010","description":"Computer programming activities","used_by_peer":null},{"code":"62090","description":"Other information technology and computer service activities","used_by_peer":null},{"code":"72100","description":"Research and experimental development on natural sciences and engineering","used_by_peer":null}]}}},"400":{"description":"Neither keyword nor peers was provided","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message"},"details":{"type":"string","description":"Additional context about the error (present on 400 responses)"}},"required":["error"]},"example":{"error":"At least one of keyword or peers must be provided"}}}},"429":{"description":"Rate limit or monthly quota exceeded","headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed per minute for this identity.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current minute window.","schema":{"type":"integer"}},"X-RateLimit-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when the RPM window resets.","schema":{"type":"integer","format":"int64"}},"X-Quota-Limit":{"description":"Maximum monthly request quota.","schema":{"type":"integer"}},"X-Quota-Remaining":{"description":"Remaining monthly quota.","schema":{"type":"integer"}},"X-Quota-Reset-Ms":{"description":"Unix epoch timestamp in milliseconds when monthly quota resets.","schema":{"type":"integer","format":"int64"}},"X-RateLimit-Tier":{"description":"Applied rate-limit tier.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying this request.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["RATE_LIMIT_EXCEEDED","QUOTA_EXCEEDED","INVALID_API_KEY","API_KEY_REVOKED"]},"message":{"type":"string"},"details":{"type":"object","properties":{"tier":{"type":"string"},"limit":{"type":"integer"},"remaining":{"type":"integer"},"rateResetAtMs":{"type":"integer","format":"int64"},"rateResetAtIso":{"type":"string","format":"date-time"},"retryAfterSeconds":{"type":"integer"},"quotaLimit":{"type":"integer"},"quotaUsed":{"type":"integer"},"quotaResetAtMs":{"type":"integer","format":"int64"},"quotaResetAtIso":{"type":"string","format":"date-time"},"upgradeUrl":{"type":"string","format":"uri"}},"additionalProperties":true}},"required":["code","message"]}},"required":["error"]}}}}}}}}}