{
  "openapi": "3.1.0",
  "info": {
    "title": "Multiples Public Companies API v2",
    "version": "2.0.0",
    "description": "API for accessing public company financial data, valuations, and time series metrics. All monetary values are in millions USD unless otherwise noted. v2 is identical to v1 except for the SKU format: v1 uses EXCHANGE_TICKER (e.g. NAS_AAPL) while v2 uses the stable multiples_id in TICKER-COUNTRY form (e.g. AAPL-USA, with an optional .N suffix for collisions: AAPL-USA.1). The multiples_id is frozen per company and never reassigned. Both versions expose ticker and exchange as display fields in responses."
  },
  "servers": [
    {
      "url": "https://multiples.vc"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "paths": {
    "/api/v2/companies": {
      "post": {
        "operationId": "searchCompanies",
        "summary": "Search and filter companies",
        "description": "Returns a list of company identifiers matching the provided filters. All filters are optional; omitting all filters returns all companies.",
        "tags": ["Companies"],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CompanySearchParams"
              },
              "examples": {
                "allCompanies": {
                  "summary": "Get all companies",
                  "value": {}
                },
                "byCountryAndIndustry": {
                  "summary": "US SaaS companies above $10B EV",
                  "value": {
                    "industries": ["Cybersecurity", "Enterprise Software"],
                    "themes": ["B2B SaaS"],
                    "countries": ["USA"],
                    "enterpriseValueAbove": 10000
                  }
                },
                "byRegion": {
                  "summary": "European FinTech companies",
                  "value": {
                    "regions": ["Western Europe", "Northern Europe"],
                    "themes": ["FinTech"]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of matching companies",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": ["data", "meta"],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CompanyIdentifier"
                      }
                    },
                    "meta": {
                      "$ref": "#/components/schemas/CountMeta"
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "sku": "CRWD-USA",
                      "ticker": "CRWD",
                      "exchange": "NAS",
                      "name": "CrowdStrike Holdings Inc",
                      "shortName": "CrowdStrike",
                      "enterpriseValue": 95283.25,
                      "countryCodeIso3": "USA",
                      "country": "United States",
                      "region": "North America",
                      "verticals": ["Cybersecurity"],
                      "themes": ["B2B SaaS", "Horizontal SaaS"]
                    },
                    {
                      "sku": "ZS-USA",
                      "ticker": "ZS",
                      "exchange": "NAS",
                      "name": "Zscaler Inc",
                      "shortName": "Zscaler",
                      "enterpriseValue": 35012.44,
                      "countryCodeIso3": "USA",
                      "country": "United States",
                      "region": "North America",
                      "verticals": ["Cybersecurity", "Network Management"],
                      "themes": ["B2B SaaS", "Horizontal SaaS"]
                    }
                  ],
                  "meta": {
                    "count": 2
                  }
                }
              }
            }
          },
          "400": { "$ref": "#/components/responses/BadRequest" },
          "401": { "$ref": "#/components/responses/Unauthorized" },
          "500": { "$ref": "#/components/responses/InternalError" }
        }
      }
    },
    "/api/v2/companies/current": {
      "post": {
        "operationId": "getCompaniesCurrent",
        "summary": "Get current financial data for companies",
        "description": "Returns current financial data for the specified companies by SKU. Maximum 100 SKUs per request.\n\nThe response includes identity fields, market data, valuation multiples, financials, margins, growth rates, and more. All numeric fields are nullable. Monetary fields also have local-currency variants suffixed with 'Lcu', plus a rateToUsd field.",
        "tags": ["Companies"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SkuRequest"
              },
              "example": {
                "skus": ["MSFT-USA", "AAPL-USA", "CRM-USA"]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Current financial data for the requested companies",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": ["data", "meta"],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CompanyCurrentData"
                      }
                    },
                    "meta": {
                      "$ref": "#/components/schemas/CountMeta"
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "sku": "MSFT-USA",
                      "ticker": "MSFT",
                      "exchange": "NAS",
                      "name": "Microsoft Corporation",
                      "shortName": "Microsoft",
                      "countryCodeIso3": "USA",
                      "country": "United States",
                      "currency": "USD",
                      "tags": ["Enterprise Software", "Cloud Infrastructure"],
                      "themes": ["B2B SaaS"],
                      "marketCap": 2890000,
                      "enterpriseValue": 2850000,
                      "revenueLtm": 261800,
                      "ebitdaLtm": 130200,
                      "evRevenueLtm": 10.9,
                      "evEbitdaLtm": 21.9,
                      "marginGrossLtm": 69.8,
                      "marginEbitdaLtm": 49.7,
                      "revenueGrowthNtmLtm": 12.5,
                      "ruleOf40Ltm": 62.2,
                      "ruleOf40": 58.1
                    }
                  ],
                  "meta": {
                    "count": 1
                  }
                }
              }
            }
          },
          "400": { "$ref": "#/components/responses/BadRequest" },
          "401": { "$ref": "#/components/responses/Unauthorized" },
          "500": { "$ref": "#/components/responses/InternalError" }
        }
      }
    },
    "/api/v2/companies/time-series": {
      "post": {
        "operationId": "getCompaniesTimeSeries",
        "summary": "Get historical monthly time series data",
        "description": "Returns historical monthly data for the specified companies. Optionally filter by fields and date range.",
        "tags": ["Companies"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TimeSeriesRequest"
              },
              "examples": {
                "allFields": {
                  "summary": "All fields, no date filter",
                  "value": {
                    "skus": ["MSFT-USA", "AAPL-USA"]
                  }
                },
                "specificFields": {
                  "summary": "Specific fields with date range",
                  "value": {
                    "skus": ["MSFT-USA"],
                    "fields": ["evRevenueLtm", "evRevenueNtm", "marginEbitdaLtm"],
                    "dateFrom": "2024-01",
                    "dateTo": "2025-12"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Time series data for the requested companies",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": ["data", "meta"],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/CompanyTimeSeriesData"
                      }
                    },
                    "meta": {
                      "$ref": "#/components/schemas/CountMeta"
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "sku": "MSFT-USA",
                      "ticker": "MSFT",
                      "exchange": "NAS",
                      "data": {
                        "evRevenueLtm": {
                          "2024-01": 12.1,
                          "2024-02": 11.8,
                          "2024-03": 11.5
                        },
                        "marginEbitdaLtm": {
                          "2024-01": 48.2,
                          "2024-02": 48.5,
                          "2024-03": 48.9
                        }
                      }
                    }
                  ],
                  "meta": {
                    "count": 1
                  }
                }
              }
            }
          },
          "400": { "$ref": "#/components/responses/BadRequest" },
          "401": { "$ref": "#/components/responses/Unauthorized" },
          "500": { "$ref": "#/components/responses/InternalError" }
        }
      }
    },
    "/api/v2/groups/current": {
      "post": {
        "operationId": "getGroupCurrent",
        "summary": "Get aggregated current data for a group of companies",
        "description": "Returns aggregated sum and median values across companies matching the provided filters. At least one filter is required.\n\n**Sum-only fields**: marketCap, enterpriseValue.\n**Sum + median fields**: revenueLtm, revenueNtm, ebitdaLtm, ebitdaNtm.\n**Median-only fields**: All other numeric fields.",
        "tags": ["Groups"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FilterParamsRequired"
              },
              "example": {
                "industries": ["Enterprise Software"],
                "countries": ["USA"]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Aggregated current data for the group",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": ["data", "meta"],
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/GroupCurrentData"
                    },
                    "meta": {
                      "$ref": "#/components/schemas/CountMeta"
                    }
                  }
                },
                "example": {
                  "data": {
                    "sum": {
                      "marketCap": 12450000,
                      "enterpriseValue": 12180000,
                      "revenueLtm": 685200,
                      "revenueNtm": 762400
                    },
                    "median": {
                      "evRevenueLtm": 8.2,
                      "evEbitdaLtm": 22.5,
                      "marginGrossLtm": 72.4,
                      "marginEbitdaLtm": 28.6,
                      "revenueGrowthNtmLtm": 11.3,
                      "ruleOf40Ltm": 39.9,
                      "ruleOf40": 36.2
                    }
                  },
                  "meta": {
                    "count": 145
                  }
                }
              }
            }
          },
          "400": { "$ref": "#/components/responses/BadRequest" },
          "401": { "$ref": "#/components/responses/Unauthorized" },
          "500": { "$ref": "#/components/responses/InternalError" }
        }
      }
    },
    "/api/v2/groups/time-series": {
      "post": {
        "operationId": "getGroupTimeSeries",
        "summary": "Get aggregated median time series for a group of companies",
        "description": "Returns aggregated median time series data across companies matching the provided filters. At least one filter is required.",
        "tags": ["Groups"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GroupTimeSeriesRequest"
              },
              "example": {
                "industries": ["Enterprise Software"],
                "countries": ["USA"],
                "fields": ["evRevenueLtm", "marginEbitdaLtm"],
                "dateFrom": "2024-01",
                "dateTo": "2024-06"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Aggregated median time series data",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": ["data", "meta"],
                  "properties": {
                    "data": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/GroupTimeSeriesPeriod"
                      }
                    },
                    "meta": {
                      "$ref": "#/components/schemas/GroupTimeSeriesMeta"
                    }
                  }
                },
                "example": {
                  "data": [
                    {
                      "period": "2024-01",
                      "median": {
                        "evRevenueLtm": 8.5,
                        "marginEbitdaLtm": 27.3
                      }
                    },
                    {
                      "period": "2024-02",
                      "median": {
                        "evRevenueLtm": 8.3,
                        "marginEbitdaLtm": 27.8
                      }
                    }
                  ],
                  "meta": {
                    "count": 2,
                    "companies": 145
                  }
                }
              }
            }
          },
          "400": { "$ref": "#/components/responses/BadRequest" },
          "401": { "$ref": "#/components/responses/Unauthorized" },
          "500": { "$ref": "#/components/responses/InternalError" }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "API token provided as a Bearer token in the Authorization header. Generate your token at app.multiples.vc."
      }
    },
    "schemas": {
      "CompanySearchParams": {
        "type": "object",
        "description": "Filters for searching companies. All fields are optional.",
        "properties": {
          "industries": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Filter by vertical names (e.g. Cybersecurity, Enterprise Software, Semiconductors)"
          },
          "themes": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Filter by theme names (e.g. B2B SaaS, FinTech, BioTech, AI)"
          },
          "regions": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": ["Africa", "Caribbean", "Central Asia", "East Asia", "Eastern Europe", "Latin America", "Middle East", "North America", "Northern Europe", "Oceania", "South Asia", "South-East Asia", "Southern Europe", "Western Europe"]
            },
            "description": "Filter by region names"
          },
          "countries": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Filter by ISO 3166-1 alpha-3 country codes (e.g. USA, GBR, DEU)"
          },
          "enterpriseValueAbove": {
            "type": "number",
            "description": "Filter companies with enterprise value >= this amount (in millions USD)"
          },
          "enterpriseValueBelow": {
            "type": "number",
            "description": "Filter companies with enterprise value <= this amount (in millions USD)"
          }
        }
      },
      "FilterParamsRequired": {
        "type": "object",
        "description": "Filters for grouping companies. At least one filter (industries, themes, regions, or countries) must be provided.",
        "properties": {
          "industries": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Filter by vertical names"
          },
          "themes": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Filter by theme names"
          },
          "regions": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Filter by region names"
          },
          "countries": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Filter by ISO 3166-1 alpha-3 country codes (e.g. USA, GBR, DEU)"
          }
        },
        "anyOf": [
          { "required": ["industries"] },
          { "required": ["themes"] },
          { "required": ["regions"] },
          { "required": ["countries"] }
        ]
      },
      "SkuRequest": {
        "type": "object",
        "required": ["skus"],
        "properties": {
          "skus": {
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[^\"\\\\\\u0000-\\u001f\\u007f]{1,32}-[A-Z]{3}(\\.\\d+)?$"
            },
            "minItems": 1,
            "maxItems": 100,
            "description": "Array of company SKUs as multiples_id in TICKER-COUNTRY form (e.g. AAPL-USA; collisions get a .N suffix like KLAR-SWE.1). Maximum 100."
          }
        }
      },
      "TimeSeriesFieldEnum": {
        "type": "string",
        "enum": [
          "stockPrice", "enterpriseValue", "marketCap",
          "revenueLtm", "revenueNtm", "ebitdaLtm", "ebitdaNtm",
          "grossProfitLtm", "grossProfitNtm", "netIncomeLtm", "netIncomeNtm",
          "revenueGrowthNtmLtm", "ebitdaGrowthNtmLtm",
          "evRevenueLtm", "evRevenueNtm", "evEbitdaLtm", "evEbitdaNtm",
          "evEbitLtm", "evEbitNtm", "evFcfLtm", "evFcfNtm",
          "evGrossProfitLtm", "evGrossProfitNtm",
          "evEbitdaGrowthAdjNtmLtm", "evRevenueGrowthAdjNtmLtm",
          "priceEarningsLtm", "priceEarningsNtm",
          "marginEbitdaLtm", "marginEbitdaNtm",
          "marginGrossLtm", "marginGrossNtm",
          "marginNetLtm", "marginNetNtm",
          "marginEbitLtm", "marginEbitNtm",
          "marginFcfLtm", "marginFcfNtm",
          "ruleOf40", "ruleOfX",
          "expensesRevenuePercentageSmLtm", "expensesRevenuePercentageSmNtm",
          "expensesRevenuePercentageGaLtm", "expensesRevenuePercentageGaNtm",
          "expensesRevenuePercentageRdLtm", "expensesRevenuePercentageRdNtm",
          "expensesRevenuePercentageOpexLtm", "expensesRevenuePercentageOpexNtm"
        ]
      },
      "TimeSeriesRequest": {
        "type": "object",
        "required": ["skus"],
        "properties": {
          "skus": {
            "type": "array",
            "items": { "type": "string", "pattern": "^[^\"\\\\\\u0000-\\u001f\\u007f]{1,32}-[A-Z]{3}(\\.\\d+)?$" },
            "minItems": 1,
            "maxItems": 100,
            "description": "Array of company SKUs as multiples_id in TICKER-COUNTRY form (e.g. AAPL-USA)"
          },
          "fields": {
            "type": "array",
            "items": { "$ref": "#/components/schemas/TimeSeriesFieldEnum" },
            "description": "Specific time series fields to return. Omit to return all available fields."
          },
          "dateFrom": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}$",
            "description": "Start of date range in YYYY-MM format (inclusive)"
          },
          "dateTo": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}$",
            "description": "End of date range in YYYY-MM format (inclusive)"
          }
        }
      },
      "GroupTimeSeriesRequest": {
        "type": "object",
        "description": "At least one filter (industries, themes, regions, or countries) must be provided.",
        "properties": {
          "industries": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Filter by vertical names"
          },
          "themes": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Filter by theme names"
          },
          "regions": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Filter by region names"
          },
          "countries": {
            "type": "array",
            "items": { "type": "string" },
            "description": "Filter by ISO 3166-1 alpha-3 country codes"
          },
          "fields": {
            "type": "array",
            "items": { "$ref": "#/components/schemas/TimeSeriesFieldEnum" },
            "description": "Specific time series fields to return. Omit to return all available fields."
          },
          "dateFrom": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}$",
            "description": "Start of date range in YYYY-MM format (inclusive)"
          },
          "dateTo": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}$",
            "description": "End of date range in YYYY-MM format (inclusive)"
          }
        },
        "anyOf": [
          { "required": ["industries"] },
          { "required": ["themes"] },
          { "required": ["regions"] },
          { "required": ["countries"] }
        ]
      },
      "CompanyIdentifier": {
        "type": "object",
        "required": ["sku", "ticker", "exchange"],
        "properties": {
          "sku": {
            "type": "string",
            "description": "Unique company identifier as multiples_id in TICKER-COUNTRY form (e.g. AAPL-USA)"
          },
          "ticker": { "type": "string", "description": "Stock ticker" },
          "exchange": { "type": "string", "description": "Exchange MIC/code" },
          "name": {
            "type": ["string", "null"],
            "description": "Full company name"
          },
          "shortName": {
            "type": ["string", "null"],
            "description": "Short display name"
          },
          "enterpriseValue": {
            "type": ["number", "null"],
            "description": "Enterprise value in millions USD"
          },
          "countryCodeIso3": {
            "type": ["string", "null"],
            "description": "ISO 3166-1 alpha-3 country code"
          },
          "country": {
            "type": ["string", "null"],
            "description": "Full country name"
          },
          "region": {
            "type": ["string", "null"],
            "description": "Geographic region"
          },
          "verticals": {
            "type": ["array", "null"],
            "items": { "type": "string" },
            "description": "Industry verticals"
          },
          "themes": {
            "type": ["array", "null"],
            "items": { "type": "string" },
            "description": "Investment themes"
          }
        }
      },
      "CompanyCurrentData": {
        "type": "object",
        "required": ["sku"],
        "description": "Current financial data for a company. Contains identity fields, market data, valuation multiples, financials (LTM/NTM/FY/FY+1/2023-2029), margins, growth rates, expense ratios, growth-adjusted multiples, and composite metrics. Absolute financials are additionally published for fiscal years 2023-2025 as revenueFy2023, grossProfitFy2023, ebitdaFy2023, ebitFy2023, netIncomeFy2023 and fcfFy2023 with their 2024/2025 twins. These carry the figure AS REPORTED for that fiscal year, not a calendar-year blend: revenueFy2024 for a company whose fiscal year ended in June 2024 is that June-ending year. The year label is the calendar year in which the fiscal year ENDED. The unsuffixed revenueFy/revenueFy1 stay relative - the company's latest and next fiscal year, whichever those are. Morningstar actuals are used wherever they exist; where a company has not filed, the field falls back to FactSet consensus, and lastReportedFy (the latest fiscal year actually filed) tells the two apart. There is no epsFy<year>: no vendor publishes a per-fiscal-year EPS in this feed and no historical share count is stored, so use epsLtm, epsNtm or epsFy. All numeric fields are nullable. Monetary fields have local-currency variants suffixed with 'Lcu' plus a rateToUsd field; that conversion uses the current (or as-of month) rate, never the rate of the stated year; the *Fy<year> twins are always null under asOfDate. Note: ruleOf40/ruleOfX return current-year values; use ruleOf40Ltm/ruleOfXLtm for LTM variants. Fields ruleOf402025 and ruleOfX2025 have been removed. SaaS metrics (saasImpliedArr, saasArrGrowthYoy, saasNetNewArrQ, saasNetNewArrLtm, saasArrPctRevenueNtm, evImpliedArr, saasCustomers, saasImpliedAcv, saasNdr, saasMagicNumber, saasPaybackMonths) cover roughly 100 SaaS companies and are null for every other company; they are USD-only (no 'Lcu' variants) and are null on asOfDate requests.",
        "properties": {
          "sku": { "type": "string", "description": "Company SKU as multiples_id in TICKER-COUNTRY form (e.g. AAPL-USA)" }
        },
        "additionalProperties": {
          "oneOf": [
            { "type": "string" },
            { "type": "number" },
            { "type": "array", "items": { "type": "string" } },
            { "type": "null" }
          ]
        }
      },
      "CompanyTimeSeriesData": {
        "type": "object",
        "required": ["sku", "ticker", "exchange", "data"],
        "properties": {
          "sku": { "type": "string", "description": "Company SKU as multiples_id in TICKER-COUNTRY form (e.g. AAPL-USA)" },
          "ticker": { "type": "string", "description": "Stock ticker" },
          "exchange": { "type": "string", "description": "Exchange MIC/code" },
          "data": {
            "type": "object",
            "description": "Time series data keyed by field name. Each field maps YYYY-MM date keys to numeric values.",
            "additionalProperties": {
              "type": "object",
              "additionalProperties": { "type": ["number", "null"] }
            }
          }
        }
      },
      "GroupCurrentData": {
        "type": "object",
        "required": ["sum", "median"],
        "properties": {
          "sum": {
            "type": "object",
            "description": "Summed values (marketCap, enterpriseValue, revenueLtm, revenueNtm, ebitdaLtm, ebitdaNtm)",
            "additionalProperties": { "type": ["number", "null"] }
          },
          "median": {
            "type": "object",
            "description": "Median values for all numeric fields except marketCap and enterpriseValue",
            "additionalProperties": { "type": ["number", "null"] }
          }
        }
      },
      "GroupTimeSeriesPeriod": {
        "type": "object",
        "required": ["period", "median"],
        "properties": {
          "period": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}$",
            "description": "Month period in YYYY-MM format"
          },
          "median": {
            "type": "object",
            "description": "Median values across all companies for this period",
            "additionalProperties": { "type": ["number", "null"] }
          }
        }
      },
      "CountMeta": {
        "type": "object",
        "required": ["count"],
        "properties": {
          "count": {
            "type": "integer",
            "description": "Number of items in the response"
          }
        }
      },
      "GroupTimeSeriesMeta": {
        "type": "object",
        "required": ["count", "companies"],
        "properties": {
          "count": {
            "type": "integer",
            "description": "Number of time periods"
          },
          "companies": {
            "type": "integer",
            "description": "Number of companies in the group"
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "required": ["error"],
        "properties": {
          "error": {
            "type": "object",
            "required": ["code", "message"],
            "properties": {
              "code": {
                "type": "string",
                "enum": ["BAD_REQUEST", "MISSING_TOKEN", "INVALID_TOKEN", "INTERNAL_ERROR"]
              },
              "message": { "type": "string" },
              "details": {
                "type": "object",
                "properties": {
                  "errors": {
                    "type": "array",
                    "items": { "type": "string" }
                  }
                }
              }
            }
          }
        }
      }
    },
    "responses": {
      "BadRequest": {
        "description": "Validation error",
        "content": {
          "application/json": {
            "schema": { "$ref": "#/components/schemas/ErrorResponse" },
            "example": {
              "error": {
                "code": "BAD_REQUEST",
                "message": "Invalid request",
                "details": {
                  "errors": ["skus must not be empty"]
                }
              }
            }
          }
        }
      },
      "Unauthorized": {
        "description": "Authentication failed",
        "content": {
          "application/json": {
            "schema": { "$ref": "#/components/schemas/ErrorResponse" },
            "examples": {
              "missingToken": {
                "summary": "No Authorization header",
                "value": {
                  "error": {
                    "code": "MISSING_TOKEN",
                    "message": "Authorization header is required"
                  }
                }
              },
              "invalidToken": {
                "summary": "Invalid or expired token",
                "value": {
                  "error": {
                    "code": "INVALID_TOKEN",
                    "message": "The provided API token is invalid"
                  }
                }
              }
            }
          }
        }
      },
      "InternalError": {
        "description": "Server error",
        "content": {
          "application/json": {
            "schema": { "$ref": "#/components/schemas/ErrorResponse" },
            "example": {
              "error": {
                "code": "INTERNAL_ERROR",
                "message": "An internal error occurred"
              }
            }
          }
        }
      }
    }
  }
}
