{
  "openapi": "3.0.4",
  "info": {
    "title": "CompanyLens API",
    "description": "Cross-jurisdiction company registry intelligence",
    "version": "v1"
  },
  "servers": [
    {
      "url": "https://api.companylens.io"
    }
  ],
  "paths": {
    "/v1/companies/autocomplete": {
      "get": {
        "tags": [
          "Autocomplete"
        ],
        "description": "Fast typeahead autocomplete — prefix match on the normalised company name. 'jurisdiction' is required (slug or ISO 3166-1 alpha-2 code, e.g. 'uk', 'ie'). Each result includes 'jurisdiction' (canonical slug) and 'number' (registry company number) so callers can resolve the selection in a single round trip without a follow-up search. 'status' filters by company status (default: 'active'); pass 'status=' (empty) or any valid status value to override.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "description": "Search query string. Minimum 2 characters.",
            "schema": {
              "type": "string"
            },
            "example": "Stripe Payments"
          },
          {
            "name": "jurisdiction",
            "in": "query",
            "description": "Jurisdiction slug (e.g. 'uk', 'ireland') or ISO 3166-1 alpha-2 code (e.g. 'ie').",
            "schema": {
              "type": "string"
            },
            "example": "uk"
          },
          {
            "name": "status",
            "in": "query",
            "description": "Filter by company status. Omit to return companies with any status.",
            "schema": {
              "enum": [
                "active",
                "active_proposal_to_strike_off",
                "administration",
                "converted_closed",
                "dissolution",
                "dissolved",
                "examinership",
                "insolvency",
                "liquidation",
                "receivership",
                "strike_off_listed",
                "unknown",
                "voluntary_arrangement"
              ],
              "type": "string",
              "default": "active"
            },
            "example": "active"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of results to return per page.",
            "schema": {
              "maximum": 20,
              "minimum": 1,
              "type": "integer",
              "format": "int32",
              "default": 10
            },
            "example": 20
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanySummaryApiListResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying. Only present on 429 responses.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — API key missing or invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          },
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/v1/companies/search": {
      "get": {
        "tags": [
          "Companies"
        ],
        "description": "Search for companies by name across all jurisdictions. searchMode: 'exact' (default, normalised name match — fast cross-jurisdiction), 'prefix' (starts-with, fast cross-jurisdiction)",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "description": "Search query string. Minimum 2 characters.",
            "schema": {
              "type": "string"
            },
            "example": "Stripe Payments"
          },
          {
            "name": "jurisdiction",
            "in": "query",
            "description": "Jurisdiction slug (e.g. 'uk', 'ireland') or ISO 3166-1 alpha-2 code (e.g. 'ie').",
            "schema": {
              "type": "string"
            },
            "example": "uk"
          },
          {
            "name": "status",
            "in": "query",
            "description": "Filter by company status. Omit to return companies with any status.",
            "schema": {
              "enum": [
                "active",
                "active_proposal_to_strike_off",
                "administration",
                "converted_closed",
                "dissolution",
                "dissolved",
                "examinership",
                "insolvency",
                "liquidation",
                "receivership",
                "strike_off_listed",
                "unknown",
                "voluntary_arrangement"
              ],
              "type": "string"
            },
            "example": "active"
          },
          {
            "name": "incorporatedAfter",
            "in": "query",
            "description": "Return only companies incorporated on or after this date. Format: YYYY-MM-DD.",
            "schema": {
              "type": "string"
            },
            "example": "2020-01-01"
          },
          {
            "name": "incorporatedBefore",
            "in": "query",
            "description": "Return only companies incorporated before this date. Format: YYYY-MM-DD.",
            "schema": {
              "type": "string"
            },
            "example": "2024-12-31"
          },
          {
            "name": "entityType",
            "in": "query",
            "description": "Filter by legal entity type.",
            "schema": {
              "enum": [
                "branch",
                "charitable_incorporated",
                "community_interest",
                "company",
                "company_limited_by_guarantee",
                "converted_closed",
                "cooperative",
                "designated_activity",
                "education",
                "european_cooperative",
                "foreign_branch",
                "foundation",
                "friendly_society",
                "general_partnership",
                "icav",
                "icvc",
                "icvc_securities",
                "icvc_umbrella",
                "industrial_provident",
                "joint_venture",
                "limited_liability_partnership",
                "limited_partnership",
                "nonprofit",
                "old_public",
                "other",
                "overseas",
                "partnership",
                "private_limited",
                "private_unlimited",
                "protected_cell",
                "public_limited",
                "registered_society",
                "royal_charter",
                "simplified_joint_stock",
                "societas_europaea",
                "sole_trader",
                "state_enterprise",
                "state_owned",
                "strata_corporation",
                "trust",
                "uk_establishment",
                "unlimited",
                "unregistered"
              ],
              "type": "string"
            },
            "example": "private_limited"
          },
          {
            "name": "number",
            "in": "query",
            "description": "Company registration number as issued by the registry (e.g. '08480771' for UK).",
            "schema": {
              "type": "string"
            },
            "example": "08480771"
          },
          {
            "name": "searchMode",
            "in": "query",
            "description": "Matching algorithm: 'exact' (normalised name match, default) or 'prefix' (starts-with, recommended for due diligence).",
            "schema": {
              "enum": [
                "exact",
                "prefix"
              ],
              "type": "string"
            },
            "example": "exact"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque pagination cursor returned in meta.nextCursor of the previous response. Pass this value to retrieve the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of results to return per page.",
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer",
              "format": "int32",
              "default": 20
            },
            "example": 20
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanySummaryApiListResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying. Only present on 429 responses.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — API key missing or invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          },
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/v1/companies/{jurisdiction}/{number}": {
      "get": {
        "tags": [
          "Companies"
        ],
        "description": "Full company profile including officers, beneficial owners, and recent filings",
        "parameters": [
          {
            "name": "jurisdiction",
            "in": "path",
            "description": "Jurisdiction slug (e.g. 'uk', 'ireland') or ISO 3166-1 alpha-2 code (e.g. 'ie').",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "uk"
          },
          {
            "name": "number",
            "in": "path",
            "description": "Company registration number as issued by the registry.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "08480771"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyDetailApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying. Only present on 429 responses.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — API key missing or invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          },
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/v1/companies/{jurisdiction}/{number}/officers": {
      "get": {
        "tags": [
          "Companies"
        ],
        "description": "Paginated list of company officers. sort: name, appointedDate (default), resignedDate. order: asc, desc (default).",
        "parameters": [
          {
            "name": "jurisdiction",
            "in": "path",
            "description": "Jurisdiction slug (e.g. 'uk', 'ireland') or ISO 3166-1 alpha-2 code (e.g. 'ie').",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "uk"
          },
          {
            "name": "number",
            "in": "path",
            "description": "Company registration number as issued by the registry.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "08480771"
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Field to sort results by. Valid values depend on the endpoint.",
            "schema": {
              "enum": [
                "name",
                "appointedDate",
                "resignedDate"
              ],
              "type": "string"
            },
            "example": "appointedDate"
          },
          {
            "name": "order",
            "in": "query",
            "description": "Sort direction: 'asc' (ascending) or 'desc' (descending, default).",
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            },
            "example": "desc"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque pagination cursor returned in meta.nextCursor of the previous response. Pass this value to retrieve the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of results to return per page.",
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer",
              "format": "int32",
              "default": 20
            },
            "example": 20
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OfficerSummaryApiListResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying. Only present on 429 responses.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — API key missing or invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          },
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/v1/companies/{jurisdiction}/{number}/beneficial-owners": {
      "get": {
        "tags": [
          "Companies"
        ],
        "description": "Paginated list of beneficial owners",
        "parameters": [
          {
            "name": "jurisdiction",
            "in": "path",
            "description": "Jurisdiction slug (e.g. 'uk', 'ireland') or ISO 3166-1 alpha-2 code (e.g. 'ie').",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "uk"
          },
          {
            "name": "number",
            "in": "path",
            "description": "Company registration number as issued by the registry.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "08480771"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque pagination cursor returned in meta.nextCursor of the previous response. Pass this value to retrieve the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of results to return per page.",
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer",
              "format": "int32",
              "default": 20
            },
            "example": 20
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BeneficialOwnerSummaryApiListResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying. Only present on 429 responses.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — API key missing or invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          },
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/v1/companies/{jurisdiction}/{number}/filings": {
      "get": {
        "tags": [
          "Companies"
        ],
        "description": "Paginated list of company filings. sort: filingDate (default). order: asc, desc (default).",
        "parameters": [
          {
            "name": "jurisdiction",
            "in": "path",
            "description": "Jurisdiction slug (e.g. 'uk', 'ireland') or ISO 3166-1 alpha-2 code (e.g. 'ie').",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "uk"
          },
          {
            "name": "number",
            "in": "path",
            "description": "Company registration number as issued by the registry.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "08480771"
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Field to sort results by. Valid values depend on the endpoint.",
            "schema": {
              "enum": [
                "filingDate"
              ],
              "type": "string"
            },
            "example": "appointedDate"
          },
          {
            "name": "order",
            "in": "query",
            "description": "Sort direction: 'asc' (ascending) or 'desc' (descending, default).",
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            },
            "example": "desc"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque pagination cursor returned in meta.nextCursor of the previous response. Pass this value to retrieve the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of results to return per page.",
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer",
              "format": "int32",
              "default": 20
            },
            "example": 20
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FilingSummaryApiListResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying. Only present on 429 responses.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — API key missing or invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          },
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/v1/companies/{jurisdiction}/{number}/network": {
      "get": {
        "tags": [
          "Companies"
        ],
        "description": "Companies linked via shared officers/beneficial owners, with the shared person identified",
        "parameters": [
          {
            "name": "jurisdiction",
            "in": "path",
            "description": "Jurisdiction slug (e.g. 'uk', 'ireland') or ISO 3166-1 alpha-2 code (e.g. 'ie').",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "uk"
          },
          {
            "name": "number",
            "in": "path",
            "description": "Company registration number as issued by the registry.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "08480771"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque pagination cursor returned in meta.nextCursor of the previous response. Pass this value to retrieve the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of results to return per page.",
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer",
              "format": "int32",
              "default": 50
            },
            "example": 20
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NetworkCompanyApiListResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying. Only present on 429 responses.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — API key missing or invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          },
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/v1/companies/{jurisdiction}/{number}/charges": {
      "get": {
        "tags": [
          "Companies"
        ],
        "description": "Paginated list of registered charges (mortgages) against the company",
        "parameters": [
          {
            "name": "jurisdiction",
            "in": "path",
            "description": "Jurisdiction slug (e.g. 'uk', 'ireland') or ISO 3166-1 alpha-2 code (e.g. 'ie').",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "uk"
          },
          {
            "name": "number",
            "in": "path",
            "description": "Company registration number as issued by the registry.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "08480771"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque pagination cursor returned in meta.nextCursor of the previous response. Pass this value to retrieve the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of results to return per page.",
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer",
              "format": "int32",
              "default": 20
            },
            "example": 20
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ChargeSummaryApiListResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying. Only present on 429 responses.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — API key missing or invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          },
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/v1/companies/{jurisdiction}/by-address": {
      "get": {
        "tags": [
          "Companies"
        ],
        "description": "Companies registered at the same address within a jurisdiction. Uses case-insensitive exact match on the normalised address.",
        "parameters": [
          {
            "name": "jurisdiction",
            "in": "path",
            "description": "Jurisdiction slug (e.g. 'uk', 'ireland') or ISO 3166-1 alpha-2 code (e.g. 'ie').",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "uk"
          },
          {
            "name": "address",
            "in": "query",
            "description": "Registered address to search. Case-insensitive exact match on the normalised address.",
            "schema": {
              "type": "string"
            },
            "example": "1 Canada Square, London"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque pagination cursor returned in meta.nextCursor of the previous response. Pass this value to retrieve the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of results to return per page.",
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer",
              "format": "int32",
              "default": 20
            },
            "example": 20
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanySummaryApiListResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying. Only present on 429 responses.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — API key missing or invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          },
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/v1/companies/batch": {
      "post": {
        "tags": [
          "Companies"
        ],
        "description": "Batch company lookup — resolve up to 50 companies by jurisdiction and number in a single request. Returns one result per lookup including found: false for companies not in the registry. Each lookup in the batch consumes 1 rate limit unit.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BatchLookupRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BatchLookupResultApiBatchResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying. Only present on 429 responses.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — API key missing or invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          },
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/v1/people/search": {
      "get": {
        "tags": [
          "People"
        ],
        "description": "Unified search across officers, beneficial owners, and disqualified directors. searchMode: 'exact' (default, normalised name match), 'prefix' (starts-with). Filter to a single jurisdiction with the 'jurisdiction' query parameter (slug or ISO 3166-1 alpha-2 code, e.g. 'uk', 'ireland', 'ie'). Omit 'jurisdiction' to search all available jurisdictions.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "description": "Search query string. Minimum 2 characters.",
            "schema": {
              "type": "string"
            },
            "example": "Stripe Payments"
          },
          {
            "name": "jurisdiction",
            "in": "query",
            "description": "Jurisdiction slug (e.g. 'uk', 'ireland') or ISO 3166-1 alpha-2 code (e.g. 'ie').",
            "schema": {
              "type": "string"
            },
            "example": "uk"
          },
          {
            "name": "searchMode",
            "in": "query",
            "description": "Matching algorithm: 'exact' (normalised name match, default) or 'prefix' (starts-with, recommended for due diligence).",
            "schema": {
              "enum": [
                "exact",
                "prefix"
              ],
              "type": "string"
            },
            "example": "exact"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque pagination cursor returned in meta.nextCursor of the previous response. Pass this value to retrieve the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of results to return per page.",
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer",
              "format": "int32",
              "default": 20
            },
            "example": 20
          },
          {
            "name": "yearOfBirth",
            "in": "query",
            "description": "Narrow results to people born in the given year.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 1975
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnifiedPersonSearchResultApiListResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying. Only present on 429 responses.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — API key missing or invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          },
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/v1/people/officers/search": {
      "get": {
        "tags": [
          "People"
        ],
        "description": "Search for company directors and officers by name. searchMode: 'exact' (default) or 'prefix'.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "description": "Search query string. Minimum 2 characters.",
            "schema": {
              "type": "string"
            },
            "example": "Stripe Payments"
          },
          {
            "name": "jurisdiction",
            "in": "query",
            "description": "Jurisdiction slug (e.g. 'uk', 'ireland') or ISO 3166-1 alpha-2 code (e.g. 'ie').",
            "schema": {
              "type": "string"
            },
            "example": "uk"
          },
          {
            "name": "searchMode",
            "in": "query",
            "description": "Matching algorithm: 'exact' (normalised name match, default) or 'prefix' (starts-with, recommended for due diligence).",
            "schema": {
              "enum": [
                "exact",
                "prefix"
              ],
              "type": "string"
            },
            "example": "exact"
          },
          {
            "name": "activeOnly",
            "in": "query",
            "description": "When true, returns only currently active appointments. Defaults to false (returns all including historical).",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque pagination cursor returned in meta.nextCursor of the previous response. Pass this value to retrieve the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of results to return per page.",
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer",
              "format": "int32",
              "default": 20
            },
            "example": 20
          },
          {
            "name": "yearOfBirth",
            "in": "query",
            "description": "Narrow results to people born in the given year.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 1975
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OfficerSearchResultApiListResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying. Only present on 429 responses.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — API key missing or invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          },
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/v1/people/beneficial-owners/search": {
      "get": {
        "tags": [
          "People"
        ],
        "description": "Search for beneficial owners by name. searchMode: 'exact' (default) or 'prefix'.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "description": "Search query string. Minimum 2 characters.",
            "schema": {
              "type": "string"
            },
            "example": "Stripe Payments"
          },
          {
            "name": "jurisdiction",
            "in": "query",
            "description": "Jurisdiction slug (e.g. 'uk', 'ireland') or ISO 3166-1 alpha-2 code (e.g. 'ie').",
            "schema": {
              "type": "string"
            },
            "example": "uk"
          },
          {
            "name": "searchMode",
            "in": "query",
            "description": "Matching algorithm: 'exact' (normalised name match, default) or 'prefix' (starts-with, recommended for due diligence).",
            "schema": {
              "enum": [
                "exact",
                "prefix"
              ],
              "type": "string"
            },
            "example": "exact"
          },
          {
            "name": "activeOnly",
            "in": "query",
            "description": "When true, returns only currently active appointments. Defaults to false (returns all including historical).",
            "schema": {
              "type": "boolean",
              "default": false
            },
            "example": false
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque pagination cursor returned in meta.nextCursor of the previous response. Pass this value to retrieve the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of results to return per page.",
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer",
              "format": "int32",
              "default": 20
            },
            "example": 20
          },
          {
            "name": "yearOfBirth",
            "in": "query",
            "description": "Narrow results to people born in the given year.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 1975
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BeneficialOwnerSearchResultApiListResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying. Only present on 429 responses.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — API key missing or invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          },
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/v1/people/disqualified-directors/search": {
      "get": {
        "tags": [
          "People"
        ],
        "description": "Search for disqualified directors by name. searchMode: 'exact' (default) or 'prefix'. Currently covers UK (Companies House) only. The 'jurisdiction' parameter is accepted for schema consistency — only 'uk' (or 'gb' ISO code) returns results; any other valid jurisdiction returns an empty list.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "description": "Search query string. Minimum 2 characters.",
            "schema": {
              "type": "string"
            },
            "example": "Stripe Payments"
          },
          {
            "name": "jurisdiction",
            "in": "query",
            "description": "Jurisdiction slug (e.g. 'uk', 'ireland') or ISO 3166-1 alpha-2 code (e.g. 'ie').",
            "schema": {
              "type": "string"
            },
            "example": "uk"
          },
          {
            "name": "searchMode",
            "in": "query",
            "description": "Matching algorithm: 'exact' (normalised name match, default) or 'prefix' (starts-with, recommended for due diligence).",
            "schema": {
              "enum": [
                "exact",
                "prefix"
              ],
              "type": "string"
            },
            "example": "exact"
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Opaque pagination cursor returned in meta.nextCursor of the previous response. Pass this value to retrieve the next page.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of results to return per page.",
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer",
              "format": "int32",
              "default": 20
            },
            "example": 20
          },
          {
            "name": "yearOfBirth",
            "in": "query",
            "description": "Narrow results to people born in the given year.",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 1975
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DisqualifiedDirectorSearchResultApiListResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying. Only present on 429 responses.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — API key missing or invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          },
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/v1/people/{jurisdiction}/{id}": {
      "get": {
        "tags": [
          "People"
        ],
        "description": "Unified person profile by jurisdiction and internal UUID. Use the 'id' field returned by search endpoints.",
        "parameters": [
          {
            "name": "jurisdiction",
            "in": "path",
            "description": "Jurisdiction slug (e.g. 'uk', 'ireland') or ISO 3166-1 alpha-2 code (e.g. 'ie').",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "uk"
          },
          {
            "name": "id",
            "in": "path",
            "description": "Internal person UUID returned in the 'id' field of search results.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonProfileApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying. Only present on 429 responses.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — API key missing or invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          },
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/v1/people/disqualified-directors/{jurisdiction}/{personId}": {
      "get": {
        "tags": [
          "People"
        ],
        "description": "Full disqualified director profile by jurisdiction and Companies House person ID",
        "parameters": [
          {
            "name": "personId",
            "in": "path",
            "description": "Companies House person ID for the disqualified director.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "jurisdiction",
            "in": "path",
            "description": "Jurisdiction slug (e.g. 'uk', 'ireland') or ISO 3166-1 alpha-2 code (e.g. 'ie').",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "uk"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PersonProfileApiResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying. Only present on 429 responses.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — API key missing or invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          },
          {
            "ApiKey": [ ]
          }
        ]
      }
    },
    "/v1/health": {
      "get": {
        "tags": [
          "Platform"
        ],
        "description": "Database connectivity check",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HealthResponse"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HealthResponse"
                }
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/v1/stats": {
      "get": {
        "tags": [
          "Platform"
        ],
        "description": "Platform statistics: entity/officer/owner counts and last ETL run",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformStatsApiResponse"
                }
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/v1/jurisdictions": {
      "get": {
        "tags": [
          "Platform"
        ],
        "description": "Available jurisdictions with metadata, per-resource endpoint availability, and approximate record counts",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JurisdictionDetailApiListResponse"
                }
              }
            }
          }
        },
        "security": [ ]
      }
    },
    "/v1/usage": {
      "get": {
        "tags": [
          "Platform"
        ],
        "description": "Returns the authenticated user's current plan, rate limits, and usage per product (api, mcp) for the active billing period",
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StringUserUsageDictionaryApiResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
            "headers": {
              "X-RateLimit-Limit": {
                "description": "Maximum number of requests allowed in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Number of requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Reset": {
                "description": "ISO 8601 UTC timestamp when the current rate limit window resets (e.g. 2026-05-01T00:00:00Z).",
                "schema": {
                  "type": "string",
                  "format": "date-time"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying. Only present on 429 responses.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponse"
                }
              }
            }
          }
        },
        "security": [
          {
            "Bearer": [ ]
          },
          {
            "ApiKey": [ ]
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "Address": {
        "type": "object",
        "properties": {
          "line1": {
            "type": "string",
            "nullable": true
          },
          "line2": {
            "type": "string",
            "nullable": true
          },
          "town": {
            "type": "string",
            "nullable": true
          },
          "county": {
            "type": "string",
            "nullable": true
          },
          "country": {
            "type": "string",
            "nullable": true
          },
          "postcode": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ApiBatchMeta": {
        "type": "object",
        "properties": {
          "requested": {
            "type": "integer",
            "format": "int32"
          },
          "found": {
            "type": "integer",
            "format": "int32"
          },
          "notFound": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "ApiCursorMeta": {
        "type": "object",
        "properties": {
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "hasMore": {
            "type": "boolean"
          },
          "nextCursor": {
            "type": "string",
            "nullable": true
          },
          "approximateTotal": {
            "type": "integer",
            "format": "int64",
            "nullable": true
          },
          "requestId": {
            "type": "string",
            "nullable": true
          },
          "dataFreshnessDate": {
            "type": "string",
            "nullable": true
          },
          "searchMode": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ApiError": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "nullable": true
          },
          "message": {
            "type": "string",
            "nullable": true
          },
          "correlationId": {
            "type": "string",
            "nullable": true
          },
          "details": {
            "$ref": "#/components/schemas/RateLimitDetails"
          }
        },
        "additionalProperties": false
      },
      "ApiErrorResponse": {
        "type": "object",
        "properties": {
          "error": {
            "$ref": "#/components/schemas/ApiError"
          }
        },
        "additionalProperties": false
      },
      "ApiHints": {
        "type": "object",
        "properties": {
          "truncated": {
            "type": "boolean",
            "nullable": true
          },
          "possibleNominee": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ApiMeta": {
        "type": "object",
        "properties": {
          "requestId": {
            "type": "string",
            "nullable": true
          },
          "dataFreshnessDate": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "BatchLookupItem": {
        "required": [
          "jurisdiction",
          "number"
        ],
        "type": "object",
        "properties": {
          "jurisdiction": {
            "type": "string",
            "description": "Jurisdiction slug (e.g. 'uk', 'ireland') or ISO 3166-1 alpha-2 code (e.g. 'ie'). Use the list_jurisdictions endpoint to enumerate all available values."
          },
          "number": {
            "type": "string",
            "description": "Company registration number as issued by the registry (e.g. '08480771' for UK)."
          }
        },
        "additionalProperties": false,
        "description": "A single company lookup entry."
      },
      "BatchLookupRequest": {
        "required": [
          "companies"
        ],
        "type": "object",
        "properties": {
          "companies": {
            "maxItems": 50,
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BatchLookupItem"
            },
            "description": "Array of companies to look up (1–50 items). Each item must supply a jurisdiction and a company number."
          }
        },
        "additionalProperties": { },
        "description": "Request body for the batch company lookup endpoint.",
        "example": {
          "companies": [
            {
              "jurisdiction": "uk",
              "number": "08480771"
            },
            {
              "jurisdiction": "ie",
              "number": "IE123456"
            }
          ]
        }
      },
      "BatchLookupResult": {
        "type": "object",
        "properties": {
          "jurisdiction": {
            "type": "string",
            "nullable": true
          },
          "number": {
            "type": "string",
            "nullable": true
          },
          "found": {
            "type": "boolean"
          },
          "company": {
            "$ref": "#/components/schemas/CompanySummary"
          }
        },
        "additionalProperties": false
      },
      "BatchLookupResultApiBatchResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BatchLookupResult"
            },
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/ApiBatchMeta"
          }
        },
        "additionalProperties": false
      },
      "BeneficialOwnerSearchResult": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "sourceId": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "ownerType": {
            "type": "string",
            "nullable": true
          },
          "companyName": {
            "type": "string",
            "nullable": true
          },
          "companyNumber": {
            "type": "string",
            "nullable": true
          },
          "jurisdiction": {
            "type": "string",
            "nullable": true
          },
          "jurisdictionName": {
            "type": "string",
            "nullable": true
          },
          "flag": {
            "type": "string",
            "nullable": true
          },
          "sharePercentageMin": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "sharePercentageMax": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "naturesOfControl": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "isActive": {
            "type": "boolean",
            "nullable": true
          },
          "isDisqualified": {
            "type": "boolean"
          },
          "_links": {
            "$ref": "#/components/schemas/PersonProfileLinks"
          }
        },
        "additionalProperties": false
      },
      "BeneficialOwnerSearchResultApiListResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BeneficialOwnerSearchResult"
            },
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/ApiCursorMeta"
          },
          "hints": {
            "$ref": "#/components/schemas/ApiHints"
          }
        },
        "additionalProperties": false
      },
      "BeneficialOwnerSummary": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "sourceId": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "ownerType": {
            "type": "string",
            "nullable": true
          },
          "nationality": {
            "type": "string",
            "nullable": true
          },
          "countryOfResidence": {
            "type": "string",
            "nullable": true
          },
          "sharePercentageMin": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "sharePercentageMax": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "naturesOfControl": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "isActive": {
            "type": "boolean",
            "nullable": true
          },
          "notifiedDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "ceasedDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "dateOfBirthPartial": {
            "type": "string",
            "nullable": true
          },
          "address": {
            "$ref": "#/components/schemas/Address"
          },
          "identificationType": {
            "type": "string",
            "nullable": true
          },
          "identificationLegalAuthority": {
            "type": "string",
            "nullable": true
          },
          "identificationRegistrationNumber": {
            "type": "string",
            "nullable": true
          },
          "identificationPlaceRegistered": {
            "type": "string",
            "nullable": true
          },
          "identificationCountryRegistered": {
            "type": "string",
            "nullable": true
          },
          "dataInconsistencyWarning": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "BeneficialOwnerSummaryApiListResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BeneficialOwnerSummary"
            },
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/ApiCursorMeta"
          },
          "hints": {
            "$ref": "#/components/schemas/ApiHints"
          }
        },
        "additionalProperties": false
      },
      "ChargeSummary": {
        "type": "object",
        "properties": {
          "sourceId": {
            "type": "string",
            "nullable": true
          },
          "chargeCode": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "dateCreated": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "dateDelivered": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "amountSecured": {
            "type": "string",
            "nullable": true
          },
          "personsEntitled": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "propertyParticulars": {
            "type": "string",
            "nullable": true
          },
          "isSatisfied": {
            "type": "boolean"
          },
          "dateSatisfied": {
            "type": "string",
            "format": "date",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ChargeSummaryApiListResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ChargeSummary"
            },
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/ApiCursorMeta"
          },
          "hints": {
            "$ref": "#/components/schemas/ApiHints"
          }
        },
        "additionalProperties": false
      },
      "CompanyDetail": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "number": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "type": "string",
            "nullable": true
          },
          "typeNormalised": {
            "type": "string",
            "nullable": true
          },
          "jurisdiction": {
            "type": "string",
            "nullable": true
          },
          "jurisdictionName": {
            "type": "string",
            "nullable": true
          },
          "flag": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string",
            "nullable": true
          },
          "incorporatedDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "dissolutionDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "address": {
            "type": "string",
            "nullable": true
          },
          "structuredAddress": {
            "$ref": "#/components/schemas/Address"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "officers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OfficerSummary"
            },
            "nullable": true
          },
          "totalOfficers": {
            "type": "integer",
            "format": "int64"
          },
          "officersTruncated": {
            "type": "boolean"
          },
          "beneficialOwners": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BeneficialOwnerSummary"
            },
            "nullable": true
          },
          "totalBeneficialOwners": {
            "type": "integer",
            "format": "int64"
          },
          "beneficialOwnersTruncated": {
            "type": "boolean"
          },
          "filings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FilingSummary"
            },
            "nullable": true
          },
          "totalFilings": {
            "type": "integer",
            "format": "int64"
          },
          "filingsTruncated": {
            "type": "boolean"
          },
          "countryOfOrigin": {
            "type": "string",
            "nullable": true
          },
          "parentCompanyNumber": {
            "type": "string",
            "nullable": true
          },
          "industryCodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IndustryCode"
            },
            "nullable": true
          },
          "accountCategory": {
            "type": "string",
            "nullable": true
          },
          "accountRefDay": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "accountRefMonth": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "accountsNextDue": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "accountsLastMade": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "confStmtNextDue": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "confStmtLastMade": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "numMortCharges": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "numMortOutstanding": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "numMortPartSatisfied": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "numMortSatisfied": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "numGenPartners": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "numLimPartners": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "previousNames": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PreviousName"
            },
            "nullable": true
          },
          "ticker": {
            "type": "string",
            "nullable": true
          },
          "uri": {
            "type": "string",
            "nullable": true
          },
          "_links": {
            "$ref": "#/components/schemas/CompanyLinks"
          }
        },
        "additionalProperties": false
      },
      "CompanyDetailApiResponse": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/CompanyDetail"
          },
          "meta": {
            "$ref": "#/components/schemas/ApiMeta"
          }
        },
        "additionalProperties": false
      },
      "CompanyLink": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "sourceId": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "ownerType": {
            "type": "string",
            "nullable": true
          },
          "nationality": {
            "type": "string",
            "nullable": true
          },
          "countryOfResidence": {
            "type": "string",
            "nullable": true
          },
          "sharePercentageMin": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "sharePercentageMax": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "naturesOfControl": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "isActive": {
            "type": "boolean",
            "nullable": true
          },
          "notifiedDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "ceasedDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "companyName": {
            "type": "string",
            "nullable": true
          },
          "companyNumber": {
            "type": "string",
            "nullable": true
          },
          "jurisdiction": {
            "type": "string",
            "nullable": true
          },
          "jurisdictionName": {
            "type": "string",
            "nullable": true
          },
          "flag": {
            "type": "string",
            "nullable": true
          },
          "entityStatus": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CompanyLinks": {
        "type": "object",
        "properties": {
          "self": {
            "type": "string",
            "nullable": true
          },
          "officers": {
            "type": "string",
            "nullable": true
          },
          "network": {
            "type": "string",
            "nullable": true
          },
          "beneficialOwners": {
            "type": "string",
            "nullable": true
          },
          "companiesByAddress": {
            "type": "string",
            "nullable": true
          },
          "filings": {
            "type": "string",
            "nullable": true
          },
          "charges": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CompanySummary": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "number": {
            "type": "string",
            "nullable": true
          },
          "type": {
            "type": "string",
            "nullable": true
          },
          "typeNormalised": {
            "type": "string",
            "nullable": true
          },
          "jurisdiction": {
            "type": "string",
            "nullable": true
          },
          "jurisdictionName": {
            "type": "string",
            "nullable": true
          },
          "flag": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string",
            "nullable": true
          },
          "incorporatedDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "dissolutionDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "address": {
            "type": "string",
            "nullable": true
          },
          "industryCodes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IndustryCode"
            },
            "nullable": true
          },
          "_links": {
            "$ref": "#/components/schemas/CompanySummaryLinks"
          },
          "matchScore": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "matchRank": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "relevanceScore": {
            "type": "number",
            "format": "double",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CompanySummaryApiListResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompanySummary"
            },
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/ApiCursorMeta"
          },
          "hints": {
            "$ref": "#/components/schemas/ApiHints"
          }
        },
        "additionalProperties": false
      },
      "CompanySummaryLinks": {
        "type": "object",
        "properties": {
          "self": {
            "type": "string",
            "nullable": true
          },
          "officers": {
            "type": "string",
            "nullable": true
          },
          "network": {
            "type": "string",
            "nullable": true
          },
          "beneficialOwners": {
            "type": "string",
            "nullable": true
          },
          "charges": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DisqualificationRecord": {
        "type": "object",
        "properties": {
          "disqualificationType": {
            "type": "string",
            "nullable": true
          },
          "disqualificationStart": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "disqualificationEnd": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "companyName": {
            "type": "string",
            "nullable": true
          },
          "companyNumber": {
            "type": "string",
            "nullable": true
          },
          "courtName": {
            "type": "string",
            "nullable": true
          },
          "actSection": {
            "type": "string",
            "nullable": true
          },
          "caseReference": {
            "type": "string",
            "nullable": true
          },
          "caseDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "isActive": {
            "type": "boolean",
            "nullable": true
          },
          "sourceCode": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DisqualifiedDirectorSearchResult": {
        "type": "object",
        "properties": {
          "personId": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "disqualificationType": {
            "type": "string",
            "nullable": true
          },
          "disqualificationStart": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "disqualificationEnd": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "companyName": {
            "type": "string",
            "nullable": true
          },
          "companyNumber": {
            "type": "string",
            "nullable": true
          },
          "courtName": {
            "type": "string",
            "nullable": true
          },
          "actSection": {
            "type": "string",
            "nullable": true
          },
          "isActive": {
            "type": "boolean",
            "nullable": true
          },
          "jurisdiction": {
            "type": "string",
            "nullable": true
          },
          "sourceCode": {
            "type": "string",
            "nullable": true
          },
          "_links": {
            "$ref": "#/components/schemas/PersonProfileLinks"
          }
        },
        "additionalProperties": false
      },
      "DisqualifiedDirectorSearchResultApiListResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DisqualifiedDirectorSearchResult"
            },
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/ApiCursorMeta"
          },
          "hints": {
            "$ref": "#/components/schemas/ApiHints"
          }
        },
        "additionalProperties": false
      },
      "FilingSummary": {
        "type": "object",
        "properties": {
          "sourceId": {
            "type": "string",
            "nullable": true
          },
          "filingType": {
            "type": "string",
            "nullable": true
          },
          "filingDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "documentUrl": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "FilingSummaryApiListResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FilingSummary"
            },
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/ApiCursorMeta"
          },
          "hints": {
            "$ref": "#/components/schemas/ApiHints"
          }
        },
        "additionalProperties": false
      },
      "HealthResponse": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "IndustryCode": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "nullable": true
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "scheme": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "JurisdictionCounts": {
        "type": "object",
        "properties": {
          "companies": {
            "type": "integer",
            "format": "int64"
          },
          "officers": {
            "type": "integer",
            "format": "int64"
          },
          "beneficialOwners": {
            "type": "integer",
            "format": "int64"
          },
          "filings": {
            "type": "integer",
            "format": "int64"
          },
          "charges": {
            "type": "integer",
            "format": "int64"
          },
          "disqualifiedDirectors": {
            "type": "integer",
            "format": "int64"
          }
        },
        "additionalProperties": false
      },
      "JurisdictionDates": {
        "type": "object",
        "properties": {
          "etlRunDate": {
            "type": "string",
            "nullable": true
          },
          "dataDate": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "JurisdictionDetail": {
        "type": "object",
        "properties": {
          "slug": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "country": {
            "type": "string",
            "nullable": true
          },
          "flag": {
            "type": "string",
            "nullable": true
          },
          "registry": {
            "type": "string",
            "nullable": true
          },
          "available": {
            "type": "boolean"
          },
          "dataDepth": {
            "type": "string",
            "nullable": true
          },
          "dataIncludes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "licence": {
            "type": "string",
            "nullable": true
          },
          "endpoints": {
            "$ref": "#/components/schemas/JurisdictionEndpoints"
          },
          "counts": {
            "$ref": "#/components/schemas/JurisdictionCounts"
          },
          "dates": {
            "$ref": "#/components/schemas/JurisdictionDates"
          }
        },
        "additionalProperties": false
      },
      "JurisdictionDetailApiListResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JurisdictionDetail"
            },
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/ApiCursorMeta"
          },
          "hints": {
            "$ref": "#/components/schemas/ApiHints"
          }
        },
        "additionalProperties": false
      },
      "JurisdictionEndpoints": {
        "type": "object",
        "properties": {
          "officers": {
            "type": "boolean"
          },
          "beneficialOwners": {
            "type": "boolean"
          },
          "filings": {
            "type": "boolean"
          },
          "charges": {
            "type": "boolean"
          },
          "network": {
            "type": "boolean"
          },
          "disqualifiedDirectors": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "NetworkCompany": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "number": {
            "type": "string",
            "nullable": true
          },
          "jurisdiction": {
            "type": "string",
            "nullable": true
          },
          "jurisdictionName": {
            "type": "string",
            "nullable": true
          },
          "flag": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string",
            "nullable": true
          },
          "sharedVia": {
            "type": "string",
            "nullable": true
          },
          "sharedViaType": {
            "type": "string",
            "nullable": true
          },
          "sharedViaIsActive": {
            "type": "boolean",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "NetworkCompanyApiListResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NetworkCompany"
            },
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/ApiCursorMeta"
          },
          "hints": {
            "$ref": "#/components/schemas/ApiHints"
          }
        },
        "additionalProperties": false
      },
      "OfficerRole": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "sourceId": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "role": {
            "type": "string",
            "nullable": true
          },
          "occupation": {
            "type": "string",
            "nullable": true
          },
          "isActive": {
            "type": "boolean",
            "nullable": true
          },
          "appointedDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "resignedDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "nationality": {
            "type": "string",
            "nullable": true
          },
          "countryOfResidence": {
            "type": "string",
            "nullable": true
          },
          "companyName": {
            "type": "string",
            "nullable": true
          },
          "companyNumber": {
            "type": "string",
            "nullable": true
          },
          "jurisdiction": {
            "type": "string",
            "nullable": true
          },
          "jurisdictionName": {
            "type": "string",
            "nullable": true
          },
          "flag": {
            "type": "string",
            "nullable": true
          },
          "entityStatus": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OfficerSearchResult": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "sourceId": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "role": {
            "type": "string",
            "nullable": true
          },
          "occupation": {
            "type": "string",
            "nullable": true
          },
          "isActive": {
            "type": "boolean",
            "nullable": true
          },
          "appointedDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "resignedDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "nationality": {
            "type": "string",
            "nullable": true
          },
          "countryOfResidence": {
            "type": "string",
            "nullable": true
          },
          "dateOfBirthPartial": {
            "type": "string",
            "nullable": true
          },
          "companyName": {
            "type": "string",
            "nullable": true
          },
          "companyNumber": {
            "type": "string",
            "nullable": true
          },
          "jurisdiction": {
            "type": "string",
            "nullable": true
          },
          "jurisdictionName": {
            "type": "string",
            "nullable": true
          },
          "flag": {
            "type": "string",
            "nullable": true
          },
          "isDisqualified": {
            "type": "boolean"
          },
          "_links": {
            "$ref": "#/components/schemas/PersonProfileLinks"
          }
        },
        "additionalProperties": false
      },
      "OfficerSearchResultApiListResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OfficerSearchResult"
            },
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/ApiCursorMeta"
          },
          "hints": {
            "$ref": "#/components/schemas/ApiHints"
          }
        },
        "additionalProperties": false
      },
      "OfficerSummary": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "sourceId": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "role": {
            "type": "string",
            "nullable": true
          },
          "occupation": {
            "type": "string",
            "nullable": true
          },
          "isActive": {
            "type": "boolean",
            "nullable": true
          },
          "appointedDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "resignedDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "nationality": {
            "type": "string",
            "nullable": true
          },
          "countryOfResidence": {
            "type": "string",
            "nullable": true
          },
          "isDisqualified": {
            "type": "boolean"
          },
          "dateOfBirthPartial": {
            "type": "string",
            "nullable": true
          },
          "formerNames": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          },
          "address": {
            "$ref": "#/components/schemas/Address"
          },
          "_links": {
            "$ref": "#/components/schemas/PersonProfileLinks"
          }
        },
        "additionalProperties": false
      },
      "OfficerSummaryApiListResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OfficerSummary"
            },
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/ApiCursorMeta"
          },
          "hints": {
            "$ref": "#/components/schemas/ApiHints"
          }
        },
        "additionalProperties": false
      },
      "PersonDetail": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "sourceId": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "subType": {
            "type": "string",
            "nullable": true
          },
          "nationality": {
            "type": "string",
            "nullable": true
          },
          "countryOfResidence": {
            "type": "string",
            "nullable": true
          },
          "dateOfBirthPartial": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PersonProfile": {
        "type": "object",
        "properties": {
          "person": {
            "$ref": "#/components/schemas/PersonDetail"
          },
          "beneficialOwnerLinks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CompanyLink"
            },
            "nullable": true
          },
          "totalBeneficialOwnerLinks": {
            "type": "integer",
            "format": "int64"
          },
          "beneficialOwnerLinksTruncated": {
            "type": "boolean"
          },
          "officerRoles": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OfficerRole"
            },
            "nullable": true
          },
          "totalOfficerRoles": {
            "type": "integer",
            "format": "int64"
          },
          "officerRolesTruncated": {
            "type": "boolean"
          },
          "disqualifications": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DisqualificationRecord"
            },
            "nullable": true
          },
          "types": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PersonProfileApiResponse": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/PersonProfile"
          },
          "meta": {
            "$ref": "#/components/schemas/ApiMeta"
          }
        },
        "additionalProperties": false
      },
      "PersonProfileLinks": {
        "type": "object",
        "properties": {
          "profile": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PlatformStats": {
        "type": "object",
        "properties": {
          "entities": {
            "type": "integer",
            "format": "int64"
          },
          "officers": {
            "type": "integer",
            "format": "int64"
          },
          "beneficialOwners": {
            "type": "integer",
            "format": "int64"
          },
          "jurisdictions": {
            "type": "integer",
            "format": "int64"
          },
          "lastUpdated": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "PlatformStatsApiResponse": {
        "type": "object",
        "properties": {
          "data": {
            "$ref": "#/components/schemas/PlatformStats"
          },
          "meta": {
            "$ref": "#/components/schemas/ApiMeta"
          }
        },
        "additionalProperties": false
      },
      "PreviousName": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true
          },
          "changedDate": {
            "type": "string",
            "format": "date",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RateLimitDetails": {
        "type": "object",
        "properties": {
          "limitType": {
            "type": "string",
            "nullable": true
          },
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "resetAt": {
            "type": "string",
            "nullable": true
          },
          "retryAfterSeconds": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "StringUserUsageDictionaryApiResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/UserUsage"
            },
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/ApiMeta"
          }
        },
        "additionalProperties": false
      },
      "UnifiedPersonSearchResult": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "nullable": true
          },
          "sourceId": {
            "type": "string",
            "nullable": true
          },
          "sourceJurisdiction": {
            "type": "string",
            "nullable": true
          },
          "sourceType": {
            "type": "string",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "nameNormalised": {
            "type": "string",
            "nullable": true
          },
          "subType": {
            "type": "string",
            "nullable": true
          },
          "companyName": {
            "type": "string",
            "nullable": true
          },
          "companyNumber": {
            "type": "string",
            "nullable": true
          },
          "jurisdiction": {
            "type": "string",
            "nullable": true
          },
          "jurisdictionName": {
            "type": "string",
            "nullable": true
          },
          "flag": {
            "type": "string",
            "nullable": true
          },
          "isActive": {
            "type": "boolean",
            "nullable": true
          },
          "sharePercentageMin": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "sharePercentageMax": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "role": {
            "type": "string",
            "nullable": true
          },
          "disqualificationStart": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "disqualificationEnd": {
            "type": "string",
            "format": "date",
            "nullable": true
          },
          "isDisqualified": {
            "type": "boolean"
          },
          "_links": {
            "$ref": "#/components/schemas/PersonProfileLinks"
          }
        },
        "additionalProperties": false
      },
      "UnifiedPersonSearchResultApiListResponse": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UnifiedPersonSearchResult"
            },
            "nullable": true
          },
          "meta": {
            "$ref": "#/components/schemas/ApiCursorMeta"
          },
          "hints": {
            "$ref": "#/components/schemas/ApiHints"
          }
        },
        "additionalProperties": false
      },
      "UserUsage": {
        "type": "object",
        "properties": {
          "tierId": {
            "type": "string",
            "nullable": true
          },
          "displayName": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "string",
            "nullable": true
          },
          "limitType": {
            "type": "string",
            "nullable": true
          },
          "dailyLimit": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "monthlyLimit": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "used": {
            "type": "integer",
            "format": "int32"
          },
          "limit": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "remaining": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "resetAt": {
            "type": "string",
            "nullable": true
          },
          "trialEndsAt": {
            "type": "string",
            "nullable": true
          },
          "currentPeriodEnd": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      }
    },
    "securitySchemes": {
      "Bearer": {
        "type": "http",
        "description": "API key via Bearer token. Pass your `cl_live_` prefixed key as `Authorization: Bearer <key>`.",
        "scheme": "bearer",
        "bearerFormat": "API Key"
      },
      "ApiKey": {
        "type": "apiKey",
        "description": "API key via header. Pass your `cl_live_` prefixed key directly in the `X-Api-Key` header.",
        "name": "X-Api-Key",
        "in": "header"
      }
    }
  },
  "tags": [
    {
      "name": "Autocomplete"
    },
    {
      "name": "Companies"
    },
    {
      "name": "People"
    },
    {
      "name": "Platform"
    }
  ]
}