openapi: 3.1.0 info: title: Headout Partner Booking Products API version: '2.0' description: 'Headout''s public Partner API for accessing the experiences marketplace: products, categories, collections and subcategories (v2), plus inventory & pricing and the two-step booking flow (v1). Partners authenticate with a Headout-Auth API key. Production keys are prefixed pk_ and testing keys tk_.' contact: name: Headout Partnerships email: partnerships@headout.com url: https://github.com/headout/api-docs termsOfService: https://www.headout.com/terms-of-use/ servers: - url: https://www.headout.com description: Production - url: https://sandbox.api.test-headout.com description: Sandbox / testing (use tk_ keys) security: - HeadoutAuth: [] tags: - name: Products paths: /api/public/v2/products: get: operationId: listProducts tags: - Products summary: List products for a city description: Fetch products for a given city, optionally filtered by collection, category or subcategory. parameters: - name: cityCode in: query required: true schema: type: string description: The city code to fetch products for. - name: collectionId in: query required: false schema: type: string - name: categoryId in: query required: false schema: type: string - name: subCategoryId in: query required: false schema: type: string - name: languageCode in: query required: false schema: type: string default: EN - name: currencyCode in: query required: false schema: type: string - name: campaignName in: query required: false schema: type: string - $ref: '#/components/parameters/Offset' - $ref: '#/components/parameters/Limit' responses: '200': description: Paginated list of products content: application/json: schema: $ref: '#/components/schemas/ProductPage' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' components: schemas: ProductPage: allOf: - $ref: '#/components/schemas/Pagination' - type: object properties: products: type: array items: $ref: '#/components/schemas/Product' Pagination: type: object properties: nextUrl: type: string prevUrl: type: string total: type: integer nextOffset: type: integer Product: type: object properties: id: type: string name: type: string cityCode: type: string categoryId: type: string subCategoryId: type: string collectionId: type: string Error: type: object description: Headout error envelope. properties: status: type: integer error: type: object properties: code: type: string message: type: string responses: Unauthorized: description: Missing or invalid Headout-Auth token content: application/json: schema: $ref: '#/components/schemas/Error' BadRequest: description: Bad request content: application/json: schema: $ref: '#/components/schemas/Error' parameters: Limit: name: limit in: query required: false schema: type: integer default: 20 description: Pagination limit. Offset: name: offset in: query required: false schema: type: integer default: 0 description: Pagination offset. securitySchemes: HeadoutAuth: type: apiKey in: header name: Headout-Auth description: API token. Production keys are prefixed pk_, testing keys tk_. x-provenance: generated: '2026-07-19' method: generated source: https://github.com/headout/api-docs note: Headout publishes no OpenAPI. This spec was faithfully generated from the public Partner API documentation at github.com/headout/api-docs (conventions, apis/v1, apis/v2, error-handling). Only documented operations, parameters, and the documented error envelope are included; nothing was invented.