{
  "components": {
    "schemas": {
      "CreateCustomerRequest": {
        "additionalProperties": false,
        "properties": {
          "name": {
            "description": "Full name. Leading and trailing spaces are removed.",
            "example": "Maria Santos",
            "maxLength": 150,
            "minLength": 1,
            "pattern": "\\S",
            "type": "string"
          },
          "email": {
            "description": "Email address. Omit it, or send null, when there is none.",
            "example": "maria.santos@example.com",
            "format": "email",
            "maxLength": 254,
            "minLength": 1,
            "nullable": true,
            "type": "string"
          },
          "phone": {
            "description": "Phone number: digits, spaces, +, parentheses and hyphens. Omit it, or send null, when there is none.",
            "example": "+63 917 555 0142",
            "maxLength": 30,
            "minLength": 3,
            "nullable": true,
            "pattern": "^[+0-9 ()-]+$",
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "CreateSalesOrderRequest": {
        "additionalProperties": false,
        "properties": {
          "customerId": {
            "description": "Customer the order is for (`id` from GET /v1/customers).",
            "example": "3f6c2a1e-8b4d-4c1a-9e2f-5a7b8c9d0e1f",
            "format": "uuid",
            "type": "string"
          },
          "locationId": {
            "description": "Selling location (`id` from GET /v1/locations). Every item needs a price at this location.",
            "example": "8b2fc6e6-1c44-44e1-9b72-1e6db59e77b0",
            "format": "uuid",
            "type": "string"
          },
          "currency": {
            "description": "ISO 4217 currency code, upper-case. Must match the currency of every item’s location price.",
            "example": "PHP",
            "maxLength": 3,
            "minLength": 3,
            "pattern": "^[A-Z]{3}$",
            "type": "string"
          },
          "reference": {
            "description": "Your reference, such as the order number in your system. When omitted, null or blank, DizLog uses the order number.",
            "example": "SHOP-10023",
            "maxLength": 100,
            "nullable": true,
            "type": "string"
          },
          "items": {
            "description": "Order lines, 1 to 100.",
            "example": [
              {
                "productId": "3f6c2a4e-8b1d-4c7a-9e2f-5a1b7c9d0e12",
                "variantId": "9b2e4f10-6a3c-4d8e-b1f7-2c5d8e0a4b36",
                "quantity": 2
              }
            ],
            "items": {
              "$ref": "#/components/schemas/SalesOrderItemInput"
            },
            "maxItems": 100,
            "minItems": 1,
            "type": "array"
          }
        },
        "required": [
          "customerId",
          "locationId",
          "currency",
          "items"
        ],
        "type": "object"
      },
      "Customer": {
        "description": "A customer of the business.",
        "properties": {
          "id": {
            "description": "Customer ID. Send it as `customerId` when you create a sales order.",
            "example": "3f6c2a1e-8b4d-4c1a-9e2f-5a7b8c9d0e1f",
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "description": "Full name, trimmed. Can be an empty string on older records.",
            "example": "Maria Santos",
            "type": "string"
          },
          "email": {
            "description": "Email address as entered (case kept); null when not set. Older records may hold invalid addresses.",
            "example": "maria.santos@example.com",
            "nullable": true,
            "type": "string"
          },
          "phone": {
            "description": "Phone number as entered, not normalised; null when not set.",
            "example": "+63 917 555 0142",
            "nullable": true,
            "type": "string"
          },
          "updatedAt": {
            "description": "When the customer record was last changed (UTC). A customer can be shared by several businesses, so an edit by another business also changes it.",
            "example": "2026-09-18T03:12:45.123Z",
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "email",
          "phone",
          "updatedAt"
        ],
        "type": "object"
      },
      "Error": {
        "description": "Every error has this body. Branch on `code`, not on `message` or the HTTP status. New codes may be added; handle unknown ones by status.\n\nChecks run in this order, so a request gets the first error that applies: API key present, API enabled, key valid, business override, rate limit, scope, request validation, Idempotency-Key, then business rules. Requests with a malformed body or path are rejected before any of these.\n\n- `INVALID_REQUEST` (400): The request is invalid. See details for each problem.\n- `MALFORMED_JSON` (400): The request body is not valid JSON.\n- `INVALID_CURSOR` (400): The cursor is malformed or was not returned by this endpoint with these filters. Restart from the first page.\n- `IDEMPOTENCY_KEY_REQUIRED` (400): The Idempotency-Key header is required.\n- `IDEMPOTENCY_KEY_INVALID` (400): The Idempotency-Key header must be 8–128 letters, digits, dots, colons, underscores or hyphens.\n- `PRODUCT_PRICE_NOT_AVAILABLE` (400): One or more items cannot be priced at this location in the order currency. See details.\n- `UNAUTHORIZED` (401): The API key is missing or invalid.\n- `FORBIDDEN` (403): This request is not allowed.\n- `TENANT_OVERRIDE_NOT_ALLOWED` (403): The business is set by the API key and cannot be overridden.\n- `INSUFFICIENT_SCOPE` (403): The API key does not have the scope this endpoint requires.\n- `NOT_FOUND` (404): The requested resource was not found.\n- `LOCATION_NOT_FOUND` (404): locationId does not match a location of this business.\n- `CUSTOMER_NOT_FOUND` (404): customerId does not match a customer of this business.\n- `ROUTE_NOT_FOUND` (404): No endpoint matches this method and path.\n- `CONFLICT` (409): The request conflicts with the current state of the resource.\n- `IDEMPOTENCY_CONFLICT` (409): This Idempotency-Key was already used with a different request body.\n- `PAYLOAD_TOO_LARGE` (413): The request body is larger than 1 MB.\n- `UNSUPPORTED_MEDIA_TYPE` (415): The request body encoding is not supported. Send UTF-8 JSON.\n- `RATE_LIMIT_EXCEEDED` (429): Rate limit exceeded. Retry after the number of seconds in Retry-After.\n- `INTERNAL_ERROR` (500): An unexpected error occurred. Contact support with the requestId.\n- `SERVICE_UNAVAILABLE` (503): The service is temporarily unavailable. Retry after the number of seconds in Retry-After.",
        "properties": {
          "error": {
            "description": "The error.",
            "example": {
              "code": "INVALID_REQUEST",
              "message": "The request is invalid. See details for each problem.",
              "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10",
              "details": [
                {
                  "field": "items[0].quantity",
                  "message": "must not be less than 0.000001"
                }
              ]
            },
            "properties": {
              "code": {
                "description": "Machine-readable error code from the list above.",
                "example": "INVALID_REQUEST",
                "type": "string"
              },
              "message": {
                "description": "Human-readable explanation. Do not parse it: the wording may change.",
                "example": "The request is invalid. See details for each problem.",
                "type": "string"
              },
              "requestId": {
                "description": "Same as the X-Request-Id header. Quote it when you contact support.",
                "example": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10",
                "format": "uuid",
                "type": "string"
              },
              "details": {
                "description": "For INVALID_REQUEST and PRODUCT_PRICE_NOT_AVAILABLE: one entry per problem when DizLog can tell which input failed. Absent otherwise.",
                "example": [
                  {
                    "field": "items[0].quantity",
                    "message": "must not be less than 0.000001"
                  }
                ],
                "items": {
                  "$ref": "#/components/schemas/ErrorDetail"
                },
                "type": "array"
              }
            },
            "required": [
              "code",
              "message",
              "requestId"
            ],
            "type": "object"
          }
        },
        "required": [
          "error"
        ],
        "type": "object"
      },
      "ErrorDetail": {
        "description": "One problem with the request.",
        "properties": {
          "field": {
            "description": "Path of the offending input, such as `limit`, `id` or `items[0].quantity`.",
            "example": "items[0].quantity",
            "type": "string"
          },
          "message": {
            "description": "What is wrong with it. Never echoes the value you sent.",
            "example": "must not be less than 0.000001",
            "type": "string"
          }
        },
        "required": [
          "field",
          "message"
        ],
        "type": "object"
      },
      "InventoryLevel": {
        "description": "Stock of one product or variant at one location.",
        "properties": {
          "productId": {
            "description": "Product ID.",
            "example": "3f6c2a4e-8b1d-4c7a-9e2f-5a1b7c9d0e12",
            "format": "uuid",
            "type": "string"
          },
          "variantId": {
            "description": "Variant ID, or null for the product’s own stock row. A product with variants can also have a null-variant row.",
            "example": "9b2e4f10-6a3c-4d8e-b1f7-2c5d8e0a4b36",
            "format": "uuid",
            "nullable": true,
            "type": "string"
          },
          "locationId": {
            "description": "The requested location.",
            "example": "8b2fc6e6-1c44-44e1-9b72-1e6db59e77b0",
            "format": "uuid",
            "type": "string"
          },
          "onHand": {
            "description": "Quantity in stock, in the product’s unit (up to 6 decimals). Can be negative when the merchant sells below zero. Capped at delivered, unexpired lots for lot- or expiry-tracked products. 0 when `stockTracked` is false or the stored value is not a finite number.",
            "example": 24,
            "type": "number"
          },
          "reserved": {
            "description": "Quantity held for sales-order fulfilments at this location that are released but not yet shipped (up to 6 decimals). Never negative; 0 when `stockTracked` is false.",
            "example": 4,
            "type": "number"
          },
          "available": {
            "description": "`onHand` minus `reserved` (up to 6 decimals): what can still be promised. Can be negative.",
            "example": 20,
            "type": "number"
          },
          "stockTracked": {
            "description": "false for product types without stock (SERVICE, RENTAL_SERVICE, SERVICE_GOODS, DIGITAL, FOOD_SERVICE). Their quantities are 0 and mean nothing: treat them as always available.",
            "example": true,
            "type": "boolean"
          }
        },
        "required": [
          "productId",
          "variantId",
          "locationId",
          "onHand",
          "reserved",
          "available",
          "stockTracked"
        ],
        "type": "object"
      },
      "Invoice": {
        "description": "An invoice issued by the business.",
        "properties": {
          "id": {
            "description": "Invoice ID.",
            "example": "3f6c2a9e-8d4b-4c1a-9b7e-2f1d0c5a7e91",
            "format": "uuid",
            "type": "string"
          },
          "number": {
            "description": "Invoice number from the business’s numbering rule; not a stable key. null when not set.",
            "example": "2026-0042",
            "nullable": true,
            "type": "string"
          },
          "status": {
            "description": "Upper-case status. Known values: DRAFT, PENDING_APPROVAL, APPROVED, SENT, PAYMENT_PENDING, PARTIALLY_PAID, PAID, CANCELLED, VOID. New values may be added; treat unknown values as opaque.",
            "example": "PARTIALLY_PAID",
            "type": "string"
          },
          "customerId": {
            "description": "Billed customer; null when there is none or it was deleted.",
            "example": "3f6c2a1e-8b4d-4c1a-9e2f-5a7b8c9d0e1f",
            "format": "uuid",
            "nullable": true,
            "type": "string"
          },
          "locationId": {
            "description": "Issuing location; null when there is none or it was deleted.",
            "example": "8b2fc6e6-1c44-44e1-9b72-1e6db59e77b0",
            "format": "uuid",
            "nullable": true,
            "type": "string"
          },
          "currency": {
            "description": "ISO 4217 currency code of the amounts, as configured by the merchant (upper-case); null when not set.",
            "example": "PHP",
            "nullable": true,
            "type": "string"
          },
          "total": {
            "description": "Grand total billed (2 decimals), including taxes, shipping and other costs. Creditable withholding tax is not deducted.",
            "example": 11200,
            "type": "number"
          },
          "outstanding": {
            "description": "Balance still receivable (2 decimals): total minus withholding tax minus payments received, never below 0. 0 when status is PAID or total is 0. Matches the balance DizLog shows.",
            "example": 5200,
            "type": "number"
          },
          "dueDate": {
            "description": "Due date (UTC).",
            "example": "2026-10-24T00:00:00.000Z",
            "format": "date-time",
            "type": "string"
          },
          "createdAt": {
            "description": "When the invoice was created in DizLog (UTC); not the invoice date.",
            "example": "2026-09-24T03:12:45.318Z",
            "format": "date-time",
            "type": "string"
          },
          "updatedAt": {
            "description": "When the invoice, including payments and status changes, was last changed (UTC).",
            "example": "2026-09-18T03:12:45.123Z",
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "id",
          "number",
          "status",
          "customerId",
          "locationId",
          "currency",
          "total",
          "outstanding",
          "dueDate",
          "createdAt",
          "updatedAt"
        ],
        "type": "object"
      },
      "Location": {
        "description": "A store, branch or warehouse of the business.",
        "properties": {
          "id": {
            "description": "Location ID.",
            "example": "8b2fc6e6-1c44-44e1-9b72-1e6db59e77b0",
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "description": "Display name.",
            "example": "Makati Branch",
            "type": "string"
          },
          "addressLine1": {
            "description": "First line of the street address; null when not set.",
            "example": "123 Ayala Avenue",
            "nullable": true,
            "type": "string"
          },
          "city": {
            "description": "City; null when not set.",
            "example": "Makati",
            "nullable": true,
            "type": "string"
          },
          "state": {
            "description": "State, province or region as free text; null when not set.",
            "example": "Metro Manila",
            "nullable": true,
            "type": "string"
          },
          "zip": {
            "description": "Postal code as free text; null when not set.",
            "example": "1226",
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "addressLine1",
          "city",
          "state",
          "zip"
        ],
        "type": "object"
      },
      "Product": {
        "description": "A catalog product.",
        "properties": {
          "id": {
            "description": "Product ID. Send it as `items[].productId` when you create a sales order.",
            "example": "3f6c2a4e-8b1d-4c7a-9e2f-5a1b7c9d0e12",
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "description": "Display name as the merchant entered it; not unique. null when not set.",
            "example": "Iced Latte 16oz",
            "nullable": true,
            "type": "string"
          },
          "sku": {
            "description": "Merchant stock-keeping unit; not guaranteed to be unique. null when not set.",
            "example": "BEV-LAT-16",
            "nullable": true,
            "type": "string"
          },
          "price": {
            "description": "Catalog base selling price per unit, in `currency`. Informational: sales orders are priced from the location price.",
            "example": 150,
            "type": "number"
          },
          "currency": {
            "description": "ISO 4217 currency code of `price`, as configured by the merchant (upper-case); null when not set.",
            "example": "PHP",
            "nullable": true,
            "type": "string"
          },
          "unitOfMeasure": {
            "description": "Name of the unit the product is sold and stocked in; null when not set.",
            "example": "Per Item",
            "nullable": true,
            "type": "string"
          },
          "updatedAt": {
            "description": "When the product, including fields this API does not return, was last changed (UTC).",
            "example": "2026-09-18T03:12:45.123Z",
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "sku",
          "price",
          "currency",
          "unitOfMeasure",
          "updatedAt"
        ],
        "type": "object"
      },
      "ProductVariant": {
        "description": "A variant of a product, such as a size or flavour.",
        "properties": {
          "id": {
            "description": "Variant ID. Send it as `items[].variantId` when you create a sales order; inventory rows use it as `variantId`.",
            "example": "9b2e4f10-6a3c-4d8e-b1f7-2c5d8e0a4b36",
            "format": "uuid",
            "type": "string"
          },
          "productId": {
            "description": "ID of the parent product.",
            "example": "3f6c2a4e-8b1d-4c7a-9e2f-5a1b7c9d0e12",
            "format": "uuid",
            "type": "string"
          },
          "name": {
            "description": "Option values joined with \" / \", ordered by option name; null when the variant has none.",
            "example": "Large / Oat milk",
            "nullable": true,
            "type": "string"
          },
          "sku": {
            "description": "Variant stock-keeping unit; not guaranteed to be unique. null when not set.",
            "example": "BEV-LAT-16-OAT",
            "nullable": true,
            "type": "string"
          },
          "price": {
            "description": "Variant catalog base price, in `currency`; null when not set (it is not inherited from the product). Informational: sales orders are priced from the location price.",
            "example": 165,
            "nullable": true,
            "type": "number"
          },
          "currency": {
            "description": "ISO 4217 currency code of `price`, as configured by the merchant (upper-case); null when not set.",
            "example": "PHP",
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "id",
          "productId",
          "name",
          "sku",
          "price",
          "currency"
        ],
        "type": "object"
      },
      "SalesOrder": {
        "description": "A sales order with its lines.",
        "properties": {
          "id": {
            "description": "Sales order ID.",
            "example": "9b2f1c4e-0b45-44e3-9a76-1f2c3d4e5f60",
            "format": "uuid",
            "type": "string"
          },
          "number": {
            "description": "Order number from the business’s numbering rule; null on some older orders.",
            "example": "2026-0096",
            "nullable": true,
            "type": "string"
          },
          "status": {
            "description": "Lifecycle status. Orders created through the API start as DRAFT.",
            "enum": [
              "DRAFT",
              "CONFIRMED",
              "INVOICED",
              "CANCELLED"
            ],
            "example": "DRAFT",
            "type": "string"
          },
          "customerId": {
            "description": "Customer on the order; null when there is none or it was deleted.",
            "example": "3f6c2a1e-8b4d-4c1a-9e2f-5a7b8c9d0e1f",
            "format": "uuid",
            "nullable": true,
            "type": "string"
          },
          "locationId": {
            "description": "Selling location; null when there is none or it was deleted.",
            "example": "8b2fc6e6-1c44-44e1-9b72-1e6db59e77b0",
            "format": "uuid",
            "nullable": true,
            "type": "string"
          },
          "currency": {
            "description": "ISO 4217 currency code of the amounts, as configured by the merchant (upper-case); null when not set.",
            "example": "PHP",
            "nullable": true,
            "type": "string"
          },
          "total": {
            "description": "Grand total in `currency` (up to 4 decimals): line totals plus shipping and other costs, minus discounts, plus taxes added on top of prices.",
            "example": 140,
            "type": "number"
          },
          "reference": {
            "description": "External reference. For API orders, the `reference` you sent, or the order number when you sent none. null when not set.",
            "example": "SHOP-10023",
            "nullable": true,
            "type": "string"
          },
          "createdAt": {
            "description": "When the order was created (UTC).",
            "example": "2026-09-18T03:12:45.123Z",
            "format": "date-time",
            "type": "string"
          },
          "updatedAt": {
            "description": "When the order was last changed (UTC).",
            "example": "2026-09-18T03:12:45.123Z",
            "format": "date-time",
            "type": "string"
          },
          "items": {
            "description": "Order lines, ordered by line ID (not by entry order).",
            "example": [
              {
                "id": "c3a1e0d2-7b6f-4e8a-9c1d-2e3f4a5b6c7d",
                "productId": "3f6c2a4e-8b1d-4c7a-9e2f-5a1b7c9d0e12",
                "variantId": "9b2e4f10-6a3c-4d8e-b1f7-2c5d8e0a4b36",
                "quantity": 2,
                "price": 70,
                "total": 140
              }
            ],
            "items": {
              "$ref": "#/components/schemas/SalesOrderItem"
            },
            "type": "array"
          }
        },
        "required": [
          "id",
          "number",
          "status",
          "customerId",
          "locationId",
          "currency",
          "total",
          "reference",
          "createdAt",
          "updatedAt",
          "items"
        ],
        "type": "object"
      },
      "SalesOrderItem": {
        "description": "A line of a sales order.",
        "properties": {
          "id": {
            "description": "Line ID.",
            "example": "c3a1e0d2-7b6f-4e8a-9c1d-2e3f4a5b6c7d",
            "format": "uuid",
            "type": "string"
          },
          "productId": {
            "description": "Product on the line; null when the line has none or the product was deleted.",
            "example": "3f6c2a4e-8b1d-4c7a-9e2f-5a1b7c9d0e12",
            "format": "uuid",
            "nullable": true,
            "type": "string"
          },
          "variantId": {
            "description": "Variant on the line; null when there is none.",
            "example": "9b2e4f10-6a3c-4d8e-b1f7-2c5d8e0a4b36",
            "format": "uuid",
            "nullable": true,
            "type": "string"
          },
          "quantity": {
            "description": "Ordered quantity (up to 6 decimals).",
            "example": 2,
            "type": "number"
          },
          "price": {
            "description": "Unit price DizLog applied, after price lists (up to 4 decimals).",
            "example": 70,
            "type": "number"
          },
          "total": {
            "description": "Line total (up to 4 decimals).",
            "example": 140,
            "type": "number"
          }
        },
        "required": [
          "id",
          "productId",
          "variantId",
          "quantity",
          "price",
          "total"
        ],
        "type": "object"
      },
      "SalesOrderItemInput": {
        "additionalProperties": false,
        "properties": {
          "productId": {
            "description": "Product to sell (`id` from GET /v1/products).",
            "example": "3f6c2a4e-8b1d-4c7a-9e2f-5a1b7c9d0e12",
            "format": "uuid",
            "type": "string"
          },
          "variantId": {
            "description": "Variant of the product (`id` from GET /v1/products/{id}/variants). Omit it, or send null, for a product without variants.",
            "example": "9b2e4f10-6a3c-4d8e-b1f7-2c5d8e0a4b36",
            "format": "uuid",
            "nullable": true,
            "type": "string"
          },
          "quantity": {
            "description": "Quantity in the product’s unit; up to 6 decimals are kept. DizLog sets the price.",
            "example": 2,
            "maximum": 1000000,
            "minimum": 0.000001,
            "type": "number"
          }
        },
        "required": [
          "productId",
          "quantity"
        ],
        "type": "object"
      },
      "SalesOrderSummary": {
        "description": "A sales order, without its lines.",
        "properties": {
          "id": {
            "description": "Sales order ID.",
            "example": "9b2f1c4e-0b45-44e3-9a76-1f2c3d4e5f60",
            "format": "uuid",
            "type": "string"
          },
          "number": {
            "description": "Order number from the business’s numbering rule; null on some older orders.",
            "example": "2026-0096",
            "nullable": true,
            "type": "string"
          },
          "status": {
            "description": "Lifecycle status. Orders created through the API start as DRAFT.",
            "enum": [
              "DRAFT",
              "CONFIRMED",
              "INVOICED",
              "CANCELLED"
            ],
            "example": "DRAFT",
            "type": "string"
          },
          "customerId": {
            "description": "Customer on the order; null when there is none or it was deleted.",
            "example": "3f6c2a1e-8b4d-4c1a-9e2f-5a7b8c9d0e1f",
            "format": "uuid",
            "nullable": true,
            "type": "string"
          },
          "locationId": {
            "description": "Selling location; null when there is none or it was deleted.",
            "example": "8b2fc6e6-1c44-44e1-9b72-1e6db59e77b0",
            "format": "uuid",
            "nullable": true,
            "type": "string"
          },
          "currency": {
            "description": "ISO 4217 currency code of the amounts, as configured by the merchant (upper-case); null when not set.",
            "example": "PHP",
            "nullable": true,
            "type": "string"
          },
          "total": {
            "description": "Grand total in `currency` (up to 4 decimals): line totals plus shipping and other costs, minus discounts, plus taxes added on top of prices.",
            "example": 140,
            "type": "number"
          },
          "reference": {
            "description": "External reference. For API orders, the `reference` you sent, or the order number when you sent none. null when not set.",
            "example": "SHOP-10023",
            "nullable": true,
            "type": "string"
          },
          "createdAt": {
            "description": "When the order was created (UTC).",
            "example": "2026-09-18T03:12:45.123Z",
            "format": "date-time",
            "type": "string"
          },
          "updatedAt": {
            "description": "When the order was last changed (UTC).",
            "example": "2026-09-18T03:12:45.123Z",
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "id",
          "number",
          "status",
          "customerId",
          "locationId",
          "currency",
          "total",
          "reference",
          "createdAt",
          "updatedAt"
        ],
        "type": "object"
      }
    },
    "securitySchemes": {
      "apiKey": {
        "in": "header",
        "name": "x-api-key",
        "type": "apiKey"
      }
    }
  },
  "info": {
    "contact": {},
    "description": "Read your DizLog catalog, stock, customers, sales orders and invoices, and create customers and draft sales orders. Every request is scoped to the business that owns the API key: send the key in `x-api-key`. Responses are JSON; amounts and quantities are numbers, timestamps are UTC ISO 8601 and IDs are lower-case UUIDs.",
    "title": "DizLog API",
    "version": "1.0.0"
  },
  "openapi": "3.0.0",
  "paths": {
    "/v1/customers": {
      "get": {
        "description": "Returns the customers linked to the business. Results are ordered by `id` and paged with `limit` and `cursor`: pass the `nextCursor` of one page as `cursor` to get the next, until it is null.\n\nRequires the `customers:read` scope.",
        "operationId": "PublicApiController_customers",
        "parameters": [
          {
            "description": "Maximum number of results on the page.",
            "example": 50,
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Opaque `nextCursor` from the previous page. Omit it for the first page. A cursor only works with the endpoint and filters that returned it.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "maxLength": 200,
              "minLength": 1,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Customer"
                      },
                      "type": "array"
                    },
                    "limit": {
                      "description": "The page size applied.",
                      "example": 50,
                      "maximum": 100,
                      "minimum": 1,
                      "type": "integer"
                    },
                    "nextCursor": {
                      "description": "Pass as `cursor` to get the next page; null on the last page.",
                      "example": "WyJjdXN0b21lcnMiLCIzZjZjMmExZS04YjRkLTRjMWEtOWUyZi01YTdiOGM5ZDBlMWYiXQ",
                      "nullable": true,
                      "type": "string"
                    }
                  },
                  "required": [
                    "data",
                    "limit",
                    "nextCursor"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "One page of results.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "examples": {
                  "INVALID_REQUEST": {
                    "value": {
                      "error": {
                        "code": "INVALID_REQUEST",
                        "message": "The request is invalid. See details for each problem.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10",
                        "details": [
                          {
                            "field": "limit",
                            "message": "must not be greater than 100"
                          }
                        ]
                      }
                    }
                  },
                  "INVALID_CURSOR": {
                    "value": {
                      "error": {
                        "code": "INVALID_CURSOR",
                        "message": "The cursor is malformed or was not returned by this endpoint with these filters. Restart from the first page.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "examples": {
                  "UNAUTHORIZED": {
                    "value": {
                      "error": {
                        "code": "UNAUTHORIZED",
                        "message": "The API key is missing or invalid.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The API key is missing or invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "content": {
              "application/json": {
                "examples": {
                  "TENANT_OVERRIDE_NOT_ALLOWED": {
                    "value": {
                      "error": {
                        "code": "TENANT_OVERRIDE_NOT_ALLOWED",
                        "message": "The business is set by the API key and cannot be overridden.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "INSUFFICIENT_SCOPE": {
                    "value": {
                      "error": {
                        "code": "INSUFFICIENT_SCOPE",
                        "message": "The API key needs the customers:read scope for this endpoint.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is not allowed for this key.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "examples": {
                  "INTERNAL_ERROR": {
                    "value": {
                      "error": {
                        "code": "INTERNAL_ERROR",
                        "message": "An unexpected error occurred. Contact support with the requestId.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unexpected error.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "examples": {
                  "SERVICE_UNAVAILABLE": {
                    "value": {
                      "error": {
                        "code": "SERVICE_UNAVAILABLE",
                        "message": "The service is temporarily unavailable. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Temporarily unavailable.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKey": []
          }
        ],
        "summary": "List customers",
        "tags": [
          "Customers"
        ]
      },
      "post": {
        "description": "Creates a customer linked to the business and returns it. Only name, email and phone are set: no marketing consent, loyalty or payment details. Requires an Idempotency-Key, so a retried request never creates a second customer. NOT_FOUND on a retry means that customer was removed from the business since.\n\nRequires the `customers:write` scope.",
        "operationId": "PublicApiController_createCustomer",
        "parameters": [
          {
            "description": "Unique key for this create, 8–128 letters, digits, dots, colons, underscores or hyphens. Retrying with the same key and body returns the original result instead of creating a duplicate; the same key with a different body is IDEMPOTENCY_CONFLICT. Concurrent retries with the same key wait for the first request and return the same resource. After any other 4xx, fix the request and send it with a new key.",
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "maxLength": 128,
              "minLength": 8,
              "pattern": "^[A-Za-z0-9_.:-]{8,128}$",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "examples": {
                "customer": {
                  "value": {
                    "name": "Maria Santos",
                    "email": "maria.santos@example.com",
                    "phone": "+63 917 555 0142"
                  }
                }
              },
              "schema": {
                "$ref": "#/components/schemas/CreateCustomerRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Customer"
                    }
                  },
                  "required": [
                    "data"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Created, or the original result when the Idempotency-Key is replayed.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "examples": {
                  "INVALID_REQUEST": {
                    "value": {
                      "error": {
                        "code": "INVALID_REQUEST",
                        "message": "The request is invalid. See details for each problem.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10",
                        "details": [
                          {
                            "field": "email",
                            "message": "must be an email"
                          }
                        ]
                      }
                    }
                  },
                  "MALFORMED_JSON": {
                    "value": {
                      "error": {
                        "code": "MALFORMED_JSON",
                        "message": "The request body is not valid JSON.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "IDEMPOTENCY_KEY_REQUIRED": {
                    "value": {
                      "error": {
                        "code": "IDEMPOTENCY_KEY_REQUIRED",
                        "message": "The Idempotency-Key header is required.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "IDEMPOTENCY_KEY_INVALID": {
                    "value": {
                      "error": {
                        "code": "IDEMPOTENCY_KEY_INVALID",
                        "message": "The Idempotency-Key header must be 8–128 letters, digits, dots, colons, underscores or hyphens.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "examples": {
                  "UNAUTHORIZED": {
                    "value": {
                      "error": {
                        "code": "UNAUTHORIZED",
                        "message": "The API key is missing or invalid.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The API key is missing or invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "content": {
              "application/json": {
                "examples": {
                  "TENANT_OVERRIDE_NOT_ALLOWED": {
                    "value": {
                      "error": {
                        "code": "TENANT_OVERRIDE_NOT_ALLOWED",
                        "message": "The business is set by the API key and cannot be overridden.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "INSUFFICIENT_SCOPE": {
                    "value": {
                      "error": {
                        "code": "INSUFFICIENT_SCOPE",
                        "message": "The API key needs the customers:write scope for this endpoint.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is not allowed for this key.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "examples": {
                  "NOT_FOUND": {
                    "value": {
                      "error": {
                        "code": "NOT_FOUND",
                        "message": "The requested resource was not found.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not found.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "content": {
              "application/json": {
                "examples": {
                  "IDEMPOTENCY_CONFLICT": {
                    "value": {
                      "error": {
                        "code": "IDEMPOTENCY_CONFLICT",
                        "message": "This Idempotency-Key was already used with a different request body.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict with an earlier request.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "content": {
              "application/json": {
                "examples": {
                  "PAYLOAD_TOO_LARGE": {
                    "value": {
                      "error": {
                        "code": "PAYLOAD_TOO_LARGE",
                        "message": "The request body is larger than 1 MB.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The body is too large.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "415": {
            "content": {
              "application/json": {
                "examples": {
                  "UNSUPPORTED_MEDIA_TYPE": {
                    "value": {
                      "error": {
                        "code": "UNSUPPORTED_MEDIA_TYPE",
                        "message": "The request body encoding is not supported. Send UTF-8 JSON.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The body encoding is not supported.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "examples": {
                  "INTERNAL_ERROR": {
                    "value": {
                      "error": {
                        "code": "INTERNAL_ERROR",
                        "message": "An unexpected error occurred. Contact support with the requestId.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unexpected error.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "examples": {
                  "SERVICE_UNAVAILABLE": {
                    "value": {
                      "error": {
                        "code": "SERVICE_UNAVAILABLE",
                        "message": "The service is temporarily unavailable. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Temporarily unavailable.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKey": []
          }
        ],
        "summary": "Create a customer",
        "tags": [
          "Customers"
        ]
      }
    },
    "/v1/customers/{id}": {
      "get": {
        "description": "Returns one customer linked to the business. A customer not linked to it is NOT_FOUND.\n\nRequires the `customers:read` scope.",
        "operationId": "PublicApiController_customer",
        "parameters": [
          {
            "description": "Customer ID.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Customer"
                    }
                  },
                  "required": [
                    "data"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "The requested resource.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "examples": {
                  "INVALID_REQUEST": {
                    "value": {
                      "error": {
                        "code": "INVALID_REQUEST",
                        "message": "The request is invalid. See details for each problem.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10",
                        "details": [
                          {
                            "field": "id",
                            "message": "must be a UUID"
                          }
                        ]
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "examples": {
                  "UNAUTHORIZED": {
                    "value": {
                      "error": {
                        "code": "UNAUTHORIZED",
                        "message": "The API key is missing or invalid.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The API key is missing or invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "content": {
              "application/json": {
                "examples": {
                  "TENANT_OVERRIDE_NOT_ALLOWED": {
                    "value": {
                      "error": {
                        "code": "TENANT_OVERRIDE_NOT_ALLOWED",
                        "message": "The business is set by the API key and cannot be overridden.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "INSUFFICIENT_SCOPE": {
                    "value": {
                      "error": {
                        "code": "INSUFFICIENT_SCOPE",
                        "message": "The API key needs the customers:read scope for this endpoint.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is not allowed for this key.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "examples": {
                  "NOT_FOUND": {
                    "value": {
                      "error": {
                        "code": "NOT_FOUND",
                        "message": "The requested resource was not found.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not found.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "examples": {
                  "INTERNAL_ERROR": {
                    "value": {
                      "error": {
                        "code": "INTERNAL_ERROR",
                        "message": "An unexpected error occurred. Contact support with the requestId.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unexpected error.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "examples": {
                  "SERVICE_UNAVAILABLE": {
                    "value": {
                      "error": {
                        "code": "SERVICE_UNAVAILABLE",
                        "message": "The service is temporarily unavailable. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Temporarily unavailable.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKey": []
          }
        ],
        "summary": "Get a customer",
        "tags": [
          "Customers"
        ]
      }
    },
    "/v1/inventory": {
      "get": {
        "description": "Returns one row per active product, and per variant, stocked at `locationId`, ordered by product then variant (the no-variant row first). Page with `limit` and `cursor`: pass the `nextCursor` of one page as `cursor` to get the next, with the same `locationId`. Quantities are live and can be negative; for products with `stockTracked` false they are 0 and mean nothing. A page can hold fewer rows than `limit` when products change while you page.\n\nRequires the `inventory:read` scope.",
        "operationId": "PublicApiController_inventory",
        "parameters": [
          {
            "description": "Maximum number of results on the page.",
            "example": 50,
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Opaque `nextCursor` from the previous page. Omit it for the first page. A cursor only works with the endpoint and filters that returned it.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "maxLength": 200,
              "minLength": 1,
              "type": "string"
            }
          },
          {
            "description": "Location to read stock at (`id` from GET /v1/locations).",
            "example": "8b2fc6e6-1c44-44e1-9b72-1e6db59e77b0",
            "in": "query",
            "name": "locationId",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/InventoryLevel"
                      },
                      "type": "array"
                    },
                    "limit": {
                      "description": "The page size applied.",
                      "example": 50,
                      "maximum": 100,
                      "minimum": 1,
                      "type": "integer"
                    },
                    "nextCursor": {
                      "description": "Pass as `cursor` to get the next page; null on the last page.",
                      "example": "WyJpbnZlbnRvcnk6OGIyZmM2ZTYtMWM0NC00NGUxLTliNzItMWU2ZGI1OWU3N2IwIiwiM2Y2YzJhNGUtOGIxZC00YzdhLTllMmYtNWExYjdjOWQwZTEyIiwiOWIyZTRmMTAtNmEzYy00ZDhlLWIxZjctMmM1ZDhlMGE0YjM2Il0",
                      "nullable": true,
                      "type": "string"
                    }
                  },
                  "required": [
                    "data",
                    "limit",
                    "nextCursor"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "One page of results.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "examples": {
                  "INVALID_REQUEST": {
                    "value": {
                      "error": {
                        "code": "INVALID_REQUEST",
                        "message": "The request is invalid. See details for each problem.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10",
                        "details": [
                          {
                            "field": "locationId",
                            "message": "must be a UUID"
                          }
                        ]
                      }
                    }
                  },
                  "INVALID_CURSOR": {
                    "value": {
                      "error": {
                        "code": "INVALID_CURSOR",
                        "message": "The cursor is malformed or was not returned by this endpoint with these filters. Restart from the first page.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "examples": {
                  "UNAUTHORIZED": {
                    "value": {
                      "error": {
                        "code": "UNAUTHORIZED",
                        "message": "The API key is missing or invalid.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The API key is missing or invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "content": {
              "application/json": {
                "examples": {
                  "TENANT_OVERRIDE_NOT_ALLOWED": {
                    "value": {
                      "error": {
                        "code": "TENANT_OVERRIDE_NOT_ALLOWED",
                        "message": "The business is set by the API key and cannot be overridden.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "INSUFFICIENT_SCOPE": {
                    "value": {
                      "error": {
                        "code": "INSUFFICIENT_SCOPE",
                        "message": "The API key needs the inventory:read scope for this endpoint.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is not allowed for this key.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "examples": {
                  "LOCATION_NOT_FOUND": {
                    "value": {
                      "error": {
                        "code": "LOCATION_NOT_FOUND",
                        "message": "locationId does not match a location of this business.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not found.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "examples": {
                  "INTERNAL_ERROR": {
                    "value": {
                      "error": {
                        "code": "INTERNAL_ERROR",
                        "message": "An unexpected error occurred. Contact support with the requestId.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unexpected error.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "examples": {
                  "SERVICE_UNAVAILABLE": {
                    "value": {
                      "error": {
                        "code": "SERVICE_UNAVAILABLE",
                        "message": "The service is temporarily unavailable. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Temporarily unavailable.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKey": []
          }
        ],
        "summary": "List stock at a location",
        "tags": [
          "Inventory"
        ]
      }
    },
    "/v1/invoices": {
      "get": {
        "description": "Returns the business’s invoices in every status. Results are ordered by `id` and paged with `limit` and `cursor`: pass the `nextCursor` of one page as `cursor` to get the next, until it is null. `outstanding` is the balance DizLog shows, so it is 0 on paid invoices.\n\nRequires the `invoices:read` scope.",
        "operationId": "PublicApiController_invoices",
        "parameters": [
          {
            "description": "Maximum number of results on the page.",
            "example": 50,
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Opaque `nextCursor` from the previous page. Omit it for the first page. A cursor only works with the endpoint and filters that returned it.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "maxLength": 200,
              "minLength": 1,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Invoice"
                      },
                      "type": "array"
                    },
                    "limit": {
                      "description": "The page size applied.",
                      "example": 50,
                      "maximum": 100,
                      "minimum": 1,
                      "type": "integer"
                    },
                    "nextCursor": {
                      "description": "Pass as `cursor` to get the next page; null on the last page.",
                      "example": "WyJpbnZvaWNlcyIsIjNmNmMyYTllLThkNGItNGMxYS05YjdlLTJmMWQwYzVhN2U5MSJd",
                      "nullable": true,
                      "type": "string"
                    }
                  },
                  "required": [
                    "data",
                    "limit",
                    "nextCursor"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "One page of results.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "examples": {
                  "INVALID_REQUEST": {
                    "value": {
                      "error": {
                        "code": "INVALID_REQUEST",
                        "message": "The request is invalid. See details for each problem.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10",
                        "details": [
                          {
                            "field": "limit",
                            "message": "must not be greater than 100"
                          }
                        ]
                      }
                    }
                  },
                  "INVALID_CURSOR": {
                    "value": {
                      "error": {
                        "code": "INVALID_CURSOR",
                        "message": "The cursor is malformed or was not returned by this endpoint with these filters. Restart from the first page.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "examples": {
                  "UNAUTHORIZED": {
                    "value": {
                      "error": {
                        "code": "UNAUTHORIZED",
                        "message": "The API key is missing or invalid.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The API key is missing or invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "content": {
              "application/json": {
                "examples": {
                  "TENANT_OVERRIDE_NOT_ALLOWED": {
                    "value": {
                      "error": {
                        "code": "TENANT_OVERRIDE_NOT_ALLOWED",
                        "message": "The business is set by the API key and cannot be overridden.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "INSUFFICIENT_SCOPE": {
                    "value": {
                      "error": {
                        "code": "INSUFFICIENT_SCOPE",
                        "message": "The API key needs the invoices:read scope for this endpoint.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is not allowed for this key.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "examples": {
                  "INTERNAL_ERROR": {
                    "value": {
                      "error": {
                        "code": "INTERNAL_ERROR",
                        "message": "An unexpected error occurred. Contact support with the requestId.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unexpected error.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "examples": {
                  "SERVICE_UNAVAILABLE": {
                    "value": {
                      "error": {
                        "code": "SERVICE_UNAVAILABLE",
                        "message": "The service is temporarily unavailable. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Temporarily unavailable.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKey": []
          }
        ],
        "summary": "List invoices",
        "tags": [
          "Invoices"
        ]
      }
    },
    "/v1/invoices/{id}": {
      "get": {
        "description": "Returns one invoice of the business.\n\nRequires the `invoices:read` scope.",
        "operationId": "PublicApiController_invoice",
        "parameters": [
          {
            "description": "Invoice ID.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Invoice"
                    }
                  },
                  "required": [
                    "data"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "The requested resource.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "examples": {
                  "INVALID_REQUEST": {
                    "value": {
                      "error": {
                        "code": "INVALID_REQUEST",
                        "message": "The request is invalid. See details for each problem.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10",
                        "details": [
                          {
                            "field": "id",
                            "message": "must be a UUID"
                          }
                        ]
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "examples": {
                  "UNAUTHORIZED": {
                    "value": {
                      "error": {
                        "code": "UNAUTHORIZED",
                        "message": "The API key is missing or invalid.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The API key is missing or invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "content": {
              "application/json": {
                "examples": {
                  "TENANT_OVERRIDE_NOT_ALLOWED": {
                    "value": {
                      "error": {
                        "code": "TENANT_OVERRIDE_NOT_ALLOWED",
                        "message": "The business is set by the API key and cannot be overridden.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "INSUFFICIENT_SCOPE": {
                    "value": {
                      "error": {
                        "code": "INSUFFICIENT_SCOPE",
                        "message": "The API key needs the invoices:read scope for this endpoint.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is not allowed for this key.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "examples": {
                  "NOT_FOUND": {
                    "value": {
                      "error": {
                        "code": "NOT_FOUND",
                        "message": "The requested resource was not found.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not found.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "examples": {
                  "INTERNAL_ERROR": {
                    "value": {
                      "error": {
                        "code": "INTERNAL_ERROR",
                        "message": "An unexpected error occurred. Contact support with the requestId.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unexpected error.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "examples": {
                  "SERVICE_UNAVAILABLE": {
                    "value": {
                      "error": {
                        "code": "SERVICE_UNAVAILABLE",
                        "message": "The service is temporarily unavailable. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Temporarily unavailable.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKey": []
          }
        ],
        "summary": "Get an invoice",
        "tags": [
          "Invoices"
        ]
      }
    },
    "/v1/locations": {
      "get": {
        "description": "Returns the business’s stores, branches and warehouses. Results are ordered by `id` and paged with `limit` and `cursor`: pass the `nextCursor` of one page as `cursor` to get the next, until it is null.\n\nRequires the `locations:read` scope.",
        "operationId": "PublicApiController_locations",
        "parameters": [
          {
            "description": "Maximum number of results on the page.",
            "example": 50,
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Opaque `nextCursor` from the previous page. Omit it for the first page. A cursor only works with the endpoint and filters that returned it.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "maxLength": 200,
              "minLength": 1,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Location"
                      },
                      "type": "array"
                    },
                    "limit": {
                      "description": "The page size applied.",
                      "example": 50,
                      "maximum": 100,
                      "minimum": 1,
                      "type": "integer"
                    },
                    "nextCursor": {
                      "description": "Pass as `cursor` to get the next page; null on the last page.",
                      "example": "WyJsb2NhdGlvbnMiLCI4YjJmYzZlNi0xYzQ0LTQ0ZTEtOWI3Mi0xZTZkYjU5ZTc3YjAiXQ",
                      "nullable": true,
                      "type": "string"
                    }
                  },
                  "required": [
                    "data",
                    "limit",
                    "nextCursor"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "One page of results.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "examples": {
                  "INVALID_REQUEST": {
                    "value": {
                      "error": {
                        "code": "INVALID_REQUEST",
                        "message": "The request is invalid. See details for each problem.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10",
                        "details": [
                          {
                            "field": "limit",
                            "message": "must not be greater than 100"
                          }
                        ]
                      }
                    }
                  },
                  "INVALID_CURSOR": {
                    "value": {
                      "error": {
                        "code": "INVALID_CURSOR",
                        "message": "The cursor is malformed or was not returned by this endpoint with these filters. Restart from the first page.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "examples": {
                  "UNAUTHORIZED": {
                    "value": {
                      "error": {
                        "code": "UNAUTHORIZED",
                        "message": "The API key is missing or invalid.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The API key is missing or invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "content": {
              "application/json": {
                "examples": {
                  "TENANT_OVERRIDE_NOT_ALLOWED": {
                    "value": {
                      "error": {
                        "code": "TENANT_OVERRIDE_NOT_ALLOWED",
                        "message": "The business is set by the API key and cannot be overridden.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "INSUFFICIENT_SCOPE": {
                    "value": {
                      "error": {
                        "code": "INSUFFICIENT_SCOPE",
                        "message": "The API key needs the locations:read scope for this endpoint.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is not allowed for this key.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "examples": {
                  "INTERNAL_ERROR": {
                    "value": {
                      "error": {
                        "code": "INTERNAL_ERROR",
                        "message": "An unexpected error occurred. Contact support with the requestId.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unexpected error.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "examples": {
                  "SERVICE_UNAVAILABLE": {
                    "value": {
                      "error": {
                        "code": "SERVICE_UNAVAILABLE",
                        "message": "The service is temporarily unavailable. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Temporarily unavailable.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKey": []
          }
        ],
        "summary": "List locations",
        "tags": [
          "Locations"
        ]
      }
    },
    "/v1/locations/{id}": {
      "get": {
        "description": "Returns one location of the business. A location of another business is NOT_FOUND.\n\nRequires the `locations:read` scope.",
        "operationId": "PublicApiController_location",
        "parameters": [
          {
            "description": "Location ID.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Location"
                    }
                  },
                  "required": [
                    "data"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "The requested resource.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "examples": {
                  "INVALID_REQUEST": {
                    "value": {
                      "error": {
                        "code": "INVALID_REQUEST",
                        "message": "The request is invalid. See details for each problem.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10",
                        "details": [
                          {
                            "field": "id",
                            "message": "must be a UUID"
                          }
                        ]
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "examples": {
                  "UNAUTHORIZED": {
                    "value": {
                      "error": {
                        "code": "UNAUTHORIZED",
                        "message": "The API key is missing or invalid.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The API key is missing or invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "content": {
              "application/json": {
                "examples": {
                  "TENANT_OVERRIDE_NOT_ALLOWED": {
                    "value": {
                      "error": {
                        "code": "TENANT_OVERRIDE_NOT_ALLOWED",
                        "message": "The business is set by the API key and cannot be overridden.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "INSUFFICIENT_SCOPE": {
                    "value": {
                      "error": {
                        "code": "INSUFFICIENT_SCOPE",
                        "message": "The API key needs the locations:read scope for this endpoint.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is not allowed for this key.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "examples": {
                  "NOT_FOUND": {
                    "value": {
                      "error": {
                        "code": "NOT_FOUND",
                        "message": "The requested resource was not found.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not found.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "examples": {
                  "INTERNAL_ERROR": {
                    "value": {
                      "error": {
                        "code": "INTERNAL_ERROR",
                        "message": "An unexpected error occurred. Contact support with the requestId.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unexpected error.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "examples": {
                  "SERVICE_UNAVAILABLE": {
                    "value": {
                      "error": {
                        "code": "SERVICE_UNAVAILABLE",
                        "message": "The service is temporarily unavailable. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Temporarily unavailable.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKey": []
          }
        ],
        "summary": "Get a location",
        "tags": [
          "Locations"
        ]
      }
    },
    "/v1/orders": {
      "get": {
        "description": "Returns the business’s sales orders in every status, without their lines; get one order for its items. Results are ordered by `id` and paged with `limit` and `cursor`: pass the `nextCursor` of one page as `cursor` to get the next, until it is null.\n\nRequires the `orders:read` scope.",
        "operationId": "PublicApiController_orders",
        "parameters": [
          {
            "description": "Maximum number of results on the page.",
            "example": 50,
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Opaque `nextCursor` from the previous page. Omit it for the first page. A cursor only works with the endpoint and filters that returned it.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "maxLength": 200,
              "minLength": 1,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/SalesOrderSummary"
                      },
                      "type": "array"
                    },
                    "limit": {
                      "description": "The page size applied.",
                      "example": 50,
                      "maximum": 100,
                      "minimum": 1,
                      "type": "integer"
                    },
                    "nextCursor": {
                      "description": "Pass as `cursor` to get the next page; null on the last page.",
                      "example": "WyJvcmRlcnMiLCI5YjJmMWM0ZS0wYjQ1LTQ0ZTMtOWE3Ni0xZjJjM2Q0ZTVmNjAiXQ",
                      "nullable": true,
                      "type": "string"
                    }
                  },
                  "required": [
                    "data",
                    "limit",
                    "nextCursor"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "One page of results.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "examples": {
                  "INVALID_REQUEST": {
                    "value": {
                      "error": {
                        "code": "INVALID_REQUEST",
                        "message": "The request is invalid. See details for each problem.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10",
                        "details": [
                          {
                            "field": "limit",
                            "message": "must not be greater than 100"
                          }
                        ]
                      }
                    }
                  },
                  "INVALID_CURSOR": {
                    "value": {
                      "error": {
                        "code": "INVALID_CURSOR",
                        "message": "The cursor is malformed or was not returned by this endpoint with these filters. Restart from the first page.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "examples": {
                  "UNAUTHORIZED": {
                    "value": {
                      "error": {
                        "code": "UNAUTHORIZED",
                        "message": "The API key is missing or invalid.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The API key is missing or invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "content": {
              "application/json": {
                "examples": {
                  "TENANT_OVERRIDE_NOT_ALLOWED": {
                    "value": {
                      "error": {
                        "code": "TENANT_OVERRIDE_NOT_ALLOWED",
                        "message": "The business is set by the API key and cannot be overridden.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "INSUFFICIENT_SCOPE": {
                    "value": {
                      "error": {
                        "code": "INSUFFICIENT_SCOPE",
                        "message": "The API key needs the orders:read scope for this endpoint.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is not allowed for this key.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "examples": {
                  "INTERNAL_ERROR": {
                    "value": {
                      "error": {
                        "code": "INTERNAL_ERROR",
                        "message": "An unexpected error occurred. Contact support with the requestId.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unexpected error.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "examples": {
                  "SERVICE_UNAVAILABLE": {
                    "value": {
                      "error": {
                        "code": "SERVICE_UNAVAILABLE",
                        "message": "The service is temporarily unavailable. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Temporarily unavailable.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKey": []
          }
        ],
        "summary": "List sales orders",
        "tags": [
          "Sales orders"
        ]
      },
      "post": {
        "description": "Creates a DRAFT sales order for review in DizLog and returns it with its lines. It does not confirm the order, move stock or take payment: the merchant reviews pricing and tax and confirms it in DizLog.\n\nYou send quantities, not prices. Every item needs an active price at `locationId` in `currency`, for its variant when you send one; otherwise the request fails with PRODUCT_PRICE_NOT_AVAILABLE, with a `details` entry per failing item (absent in the rare case that an item stops being sellable while the order is being created). DizLog then prices each line, applying any matching price list.\n\nRequires an Idempotency-Key. A retry with the same key and body returns the original order, in its current state, instead of creating another. NOT_FOUND on a retry means that order was deleted since.\n\nRequires the `orders:write` scope.",
        "operationId": "PublicApiController_createOrder",
        "parameters": [
          {
            "description": "Unique key for this create, 8–128 letters, digits, dots, colons, underscores or hyphens. Retrying with the same key and body returns the original result instead of creating a duplicate; the same key with a different body is IDEMPOTENCY_CONFLICT. Concurrent retries with the same key wait for the first request and return the same resource. After any other 4xx, fix the request and send it with a new key.",
            "in": "header",
            "name": "Idempotency-Key",
            "required": true,
            "schema": {
              "maxLength": 128,
              "minLength": 8,
              "pattern": "^[A-Za-z0-9_.:-]{8,128}$",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "examples": {
                "order": {
                  "value": {
                    "customerId": "3f6c2a1e-8b4d-4c1a-9e2f-5a7b8c9d0e1f",
                    "locationId": "8b2fc6e6-1c44-44e1-9b72-1e6db59e77b0",
                    "currency": "PHP",
                    "reference": "SHOP-10023",
                    "items": [
                      {
                        "productId": "3f6c2a4e-8b1d-4c7a-9e2f-5a1b7c9d0e12",
                        "variantId": "9b2e4f10-6a3c-4d8e-b1f7-2c5d8e0a4b36",
                        "quantity": 2
                      }
                    ]
                  }
                }
              },
              "schema": {
                "$ref": "#/components/schemas/CreateSalesOrderRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/SalesOrder"
                    }
                  },
                  "required": [
                    "data"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Created, or the original result when the Idempotency-Key is replayed.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "examples": {
                  "INVALID_REQUEST": {
                    "value": {
                      "error": {
                        "code": "INVALID_REQUEST",
                        "message": "The request is invalid. See details for each problem.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10",
                        "details": [
                          {
                            "field": "items[0].quantity",
                            "message": "must not be less than 0.000001"
                          }
                        ]
                      }
                    }
                  },
                  "MALFORMED_JSON": {
                    "value": {
                      "error": {
                        "code": "MALFORMED_JSON",
                        "message": "The request body is not valid JSON.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "IDEMPOTENCY_KEY_REQUIRED": {
                    "value": {
                      "error": {
                        "code": "IDEMPOTENCY_KEY_REQUIRED",
                        "message": "The Idempotency-Key header is required.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "IDEMPOTENCY_KEY_INVALID": {
                    "value": {
                      "error": {
                        "code": "IDEMPOTENCY_KEY_INVALID",
                        "message": "The Idempotency-Key header must be 8–128 letters, digits, dots, colons, underscores or hyphens.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "PRODUCT_PRICE_NOT_AVAILABLE": {
                    "value": {
                      "error": {
                        "code": "PRODUCT_PRICE_NOT_AVAILABLE",
                        "message": "One or more items cannot be priced at this location in the order currency. See details.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10",
                        "details": [
                          {
                            "field": "items[1]",
                            "message": "not sold at this location"
                          }
                        ]
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "examples": {
                  "UNAUTHORIZED": {
                    "value": {
                      "error": {
                        "code": "UNAUTHORIZED",
                        "message": "The API key is missing or invalid.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The API key is missing or invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "content": {
              "application/json": {
                "examples": {
                  "TENANT_OVERRIDE_NOT_ALLOWED": {
                    "value": {
                      "error": {
                        "code": "TENANT_OVERRIDE_NOT_ALLOWED",
                        "message": "The business is set by the API key and cannot be overridden.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "INSUFFICIENT_SCOPE": {
                    "value": {
                      "error": {
                        "code": "INSUFFICIENT_SCOPE",
                        "message": "The API key needs the orders:write scope for this endpoint.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is not allowed for this key.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "examples": {
                  "CUSTOMER_NOT_FOUND": {
                    "value": {
                      "error": {
                        "code": "CUSTOMER_NOT_FOUND",
                        "message": "customerId does not match a customer of this business.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "LOCATION_NOT_FOUND": {
                    "value": {
                      "error": {
                        "code": "LOCATION_NOT_FOUND",
                        "message": "locationId does not match a location of this business.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "NOT_FOUND": {
                    "value": {
                      "error": {
                        "code": "NOT_FOUND",
                        "message": "The requested resource was not found.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not found.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "content": {
              "application/json": {
                "examples": {
                  "IDEMPOTENCY_CONFLICT": {
                    "value": {
                      "error": {
                        "code": "IDEMPOTENCY_CONFLICT",
                        "message": "This Idempotency-Key was already used with a different request body.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict with an earlier request.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "content": {
              "application/json": {
                "examples": {
                  "PAYLOAD_TOO_LARGE": {
                    "value": {
                      "error": {
                        "code": "PAYLOAD_TOO_LARGE",
                        "message": "The request body is larger than 1 MB.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The body is too large.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "415": {
            "content": {
              "application/json": {
                "examples": {
                  "UNSUPPORTED_MEDIA_TYPE": {
                    "value": {
                      "error": {
                        "code": "UNSUPPORTED_MEDIA_TYPE",
                        "message": "The request body encoding is not supported. Send UTF-8 JSON.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The body encoding is not supported.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "examples": {
                  "INTERNAL_ERROR": {
                    "value": {
                      "error": {
                        "code": "INTERNAL_ERROR",
                        "message": "An unexpected error occurred. Contact support with the requestId.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unexpected error.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "examples": {
                  "SERVICE_UNAVAILABLE": {
                    "value": {
                      "error": {
                        "code": "SERVICE_UNAVAILABLE",
                        "message": "The service is temporarily unavailable. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Temporarily unavailable.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKey": []
          }
        ],
        "summary": "Create a draft sales order",
        "tags": [
          "Sales orders"
        ]
      }
    },
    "/v1/orders/{id}": {
      "get": {
        "description": "Returns one sales order of the business with its lines.\n\nRequires the `orders:read` scope.",
        "operationId": "PublicApiController_order",
        "parameters": [
          {
            "description": "Sales order ID.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/SalesOrder"
                    }
                  },
                  "required": [
                    "data"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "The requested resource.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "examples": {
                  "INVALID_REQUEST": {
                    "value": {
                      "error": {
                        "code": "INVALID_REQUEST",
                        "message": "The request is invalid. See details for each problem.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10",
                        "details": [
                          {
                            "field": "id",
                            "message": "must be a UUID"
                          }
                        ]
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "examples": {
                  "UNAUTHORIZED": {
                    "value": {
                      "error": {
                        "code": "UNAUTHORIZED",
                        "message": "The API key is missing or invalid.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The API key is missing or invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "content": {
              "application/json": {
                "examples": {
                  "TENANT_OVERRIDE_NOT_ALLOWED": {
                    "value": {
                      "error": {
                        "code": "TENANT_OVERRIDE_NOT_ALLOWED",
                        "message": "The business is set by the API key and cannot be overridden.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "INSUFFICIENT_SCOPE": {
                    "value": {
                      "error": {
                        "code": "INSUFFICIENT_SCOPE",
                        "message": "The API key needs the orders:read scope for this endpoint.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is not allowed for this key.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "examples": {
                  "NOT_FOUND": {
                    "value": {
                      "error": {
                        "code": "NOT_FOUND",
                        "message": "The requested resource was not found.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not found.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "examples": {
                  "INTERNAL_ERROR": {
                    "value": {
                      "error": {
                        "code": "INTERNAL_ERROR",
                        "message": "An unexpected error occurred. Contact support with the requestId.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unexpected error.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "examples": {
                  "SERVICE_UNAVAILABLE": {
                    "value": {
                      "error": {
                        "code": "SERVICE_UNAVAILABLE",
                        "message": "The service is temporarily unavailable. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Temporarily unavailable.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKey": []
          }
        ],
        "summary": "Get a sales order",
        "tags": [
          "Sales orders"
        ]
      }
    },
    "/v1/products": {
      "get": {
        "description": "Returns the business’s active products; deleted and inactive products are left out. Results are ordered by `id` and paged with `limit` and `cursor`: pass the `nextCursor` of one page as `cursor` to get the next, until it is null. Variants are listed per product with GET /v1/products/{id}/variants, and stock with GET /v1/inventory.\n\nRequires the `products:read` scope.",
        "operationId": "PublicApiController_products",
        "parameters": [
          {
            "description": "Maximum number of results on the page.",
            "example": 50,
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Opaque `nextCursor` from the previous page. Omit it for the first page. A cursor only works with the endpoint and filters that returned it.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "maxLength": 200,
              "minLength": 1,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/Product"
                      },
                      "type": "array"
                    },
                    "limit": {
                      "description": "The page size applied.",
                      "example": 50,
                      "maximum": 100,
                      "minimum": 1,
                      "type": "integer"
                    },
                    "nextCursor": {
                      "description": "Pass as `cursor` to get the next page; null on the last page.",
                      "example": "WyJwcm9kdWN0cyIsIjNmNmMyYTRlLThiMWQtNGM3YS05ZTJmLTVhMWI3YzlkMGUxMiJd",
                      "nullable": true,
                      "type": "string"
                    }
                  },
                  "required": [
                    "data",
                    "limit",
                    "nextCursor"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "One page of results.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "examples": {
                  "INVALID_REQUEST": {
                    "value": {
                      "error": {
                        "code": "INVALID_REQUEST",
                        "message": "The request is invalid. See details for each problem.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10",
                        "details": [
                          {
                            "field": "limit",
                            "message": "must not be greater than 100"
                          }
                        ]
                      }
                    }
                  },
                  "INVALID_CURSOR": {
                    "value": {
                      "error": {
                        "code": "INVALID_CURSOR",
                        "message": "The cursor is malformed or was not returned by this endpoint with these filters. Restart from the first page.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "examples": {
                  "UNAUTHORIZED": {
                    "value": {
                      "error": {
                        "code": "UNAUTHORIZED",
                        "message": "The API key is missing or invalid.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The API key is missing or invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "content": {
              "application/json": {
                "examples": {
                  "TENANT_OVERRIDE_NOT_ALLOWED": {
                    "value": {
                      "error": {
                        "code": "TENANT_OVERRIDE_NOT_ALLOWED",
                        "message": "The business is set by the API key and cannot be overridden.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "INSUFFICIENT_SCOPE": {
                    "value": {
                      "error": {
                        "code": "INSUFFICIENT_SCOPE",
                        "message": "The API key needs the products:read scope for this endpoint.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is not allowed for this key.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "examples": {
                  "INTERNAL_ERROR": {
                    "value": {
                      "error": {
                        "code": "INTERNAL_ERROR",
                        "message": "An unexpected error occurred. Contact support with the requestId.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unexpected error.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "examples": {
                  "SERVICE_UNAVAILABLE": {
                    "value": {
                      "error": {
                        "code": "SERVICE_UNAVAILABLE",
                        "message": "The service is temporarily unavailable. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Temporarily unavailable.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKey": []
          }
        ],
        "summary": "List products",
        "tags": [
          "Products"
        ]
      }
    },
    "/v1/products/{id}": {
      "get": {
        "description": "Returns one active product of the business. A deleted or inactive product, or one of another business, is NOT_FOUND.\n\nRequires the `products:read` scope.",
        "operationId": "PublicApiController_product",
        "parameters": [
          {
            "description": "Product ID.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Product"
                    }
                  },
                  "required": [
                    "data"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "The requested resource.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "examples": {
                  "INVALID_REQUEST": {
                    "value": {
                      "error": {
                        "code": "INVALID_REQUEST",
                        "message": "The request is invalid. See details for each problem.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10",
                        "details": [
                          {
                            "field": "id",
                            "message": "must be a UUID"
                          }
                        ]
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "examples": {
                  "UNAUTHORIZED": {
                    "value": {
                      "error": {
                        "code": "UNAUTHORIZED",
                        "message": "The API key is missing or invalid.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The API key is missing or invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "content": {
              "application/json": {
                "examples": {
                  "TENANT_OVERRIDE_NOT_ALLOWED": {
                    "value": {
                      "error": {
                        "code": "TENANT_OVERRIDE_NOT_ALLOWED",
                        "message": "The business is set by the API key and cannot be overridden.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "INSUFFICIENT_SCOPE": {
                    "value": {
                      "error": {
                        "code": "INSUFFICIENT_SCOPE",
                        "message": "The API key needs the products:read scope for this endpoint.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is not allowed for this key.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "examples": {
                  "NOT_FOUND": {
                    "value": {
                      "error": {
                        "code": "NOT_FOUND",
                        "message": "The requested resource was not found.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not found.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "examples": {
                  "INTERNAL_ERROR": {
                    "value": {
                      "error": {
                        "code": "INTERNAL_ERROR",
                        "message": "An unexpected error occurred. Contact support with the requestId.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unexpected error.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "examples": {
                  "SERVICE_UNAVAILABLE": {
                    "value": {
                      "error": {
                        "code": "SERVICE_UNAVAILABLE",
                        "message": "The service is temporarily unavailable. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Temporarily unavailable.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKey": []
          }
        ],
        "summary": "Get a product",
        "tags": [
          "Products"
        ]
      }
    },
    "/v1/products/{id}/variants": {
      "get": {
        "description": "Returns the variants of one active product. A product without variants returns an empty page. Results are ordered by `id` and paged with `limit` and `cursor`: pass the `nextCursor` of one page as `cursor` to get the next, until it is null. NOT_FOUND means the product itself is not visible.\n\nRequires the `products:read` scope.",
        "operationId": "PublicApiController_variants",
        "parameters": [
          {
            "description": "Product ID.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "format": "uuid",
              "type": "string"
            }
          },
          {
            "description": "Maximum number of results on the page.",
            "example": 50,
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Opaque `nextCursor` from the previous page. Omit it for the first page. A cursor only works with the endpoint and filters that returned it.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "maxLength": 200,
              "minLength": 1,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "data": {
                      "items": {
                        "$ref": "#/components/schemas/ProductVariant"
                      },
                      "type": "array"
                    },
                    "limit": {
                      "description": "The page size applied.",
                      "example": 50,
                      "maximum": 100,
                      "minimum": 1,
                      "type": "integer"
                    },
                    "nextCursor": {
                      "description": "Pass as `cursor` to get the next page; null on the last page.",
                      "example": "WyJ2YXJpYW50czozZjZjMmE0ZS04YjFkLTRjN2EtOWUyZi01YTFiN2M5ZDBlMTIiLCI5YjJlNGYxMC02YTNjLTRkOGUtYjFmNy0yYzVkOGUwYTRiMzYiXQ",
                      "nullable": true,
                      "type": "string"
                    }
                  },
                  "required": [
                    "data",
                    "limit",
                    "nextCursor"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "One page of results.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "examples": {
                  "INVALID_REQUEST": {
                    "value": {
                      "error": {
                        "code": "INVALID_REQUEST",
                        "message": "The request is invalid. See details for each problem.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10",
                        "details": [
                          {
                            "field": "limit",
                            "message": "must not be greater than 100"
                          }
                        ]
                      }
                    }
                  },
                  "INVALID_CURSOR": {
                    "value": {
                      "error": {
                        "code": "INVALID_CURSOR",
                        "message": "The cursor is malformed or was not returned by this endpoint with these filters. Restart from the first page.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "examples": {
                  "UNAUTHORIZED": {
                    "value": {
                      "error": {
                        "code": "UNAUTHORIZED",
                        "message": "The API key is missing or invalid.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The API key is missing or invalid.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "content": {
              "application/json": {
                "examples": {
                  "TENANT_OVERRIDE_NOT_ALLOWED": {
                    "value": {
                      "error": {
                        "code": "TENANT_OVERRIDE_NOT_ALLOWED",
                        "message": "The business is set by the API key and cannot be overridden.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  },
                  "INSUFFICIENT_SCOPE": {
                    "value": {
                      "error": {
                        "code": "INSUFFICIENT_SCOPE",
                        "message": "The API key needs the products:read scope for this endpoint.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "The request is not allowed for this key.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "examples": {
                  "NOT_FOUND": {
                    "value": {
                      "error": {
                        "code": "NOT_FOUND",
                        "message": "The requested resource was not found.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not found.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "examples": {
                  "RATE_LIMIT_EXCEEDED": {
                    "value": {
                      "error": {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "message": "Rate limit exceeded. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Rate limit exceeded.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "content": {
              "application/json": {
                "examples": {
                  "INTERNAL_ERROR": {
                    "value": {
                      "error": {
                        "code": "INTERNAL_ERROR",
                        "message": "An unexpected error occurred. Contact support with the requestId.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unexpected error.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "content": {
              "application/json": {
                "examples": {
                  "SERVICE_UNAVAILABLE": {
                    "value": {
                      "error": {
                        "code": "SERVICE_UNAVAILABLE",
                        "message": "The service is temporarily unavailable. Retry after the number of seconds in Retry-After.",
                        "requestId": "5f0c9a8e-2b1d-4c3e-9f7a-6b5c4d3e2f10"
                      }
                    }
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Temporarily unavailable.",
            "headers": {
              "Cache-Control": {
                "description": "Always `no-store`.",
                "required": true,
                "schema": {
                  "type": "string"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "required": true,
                "schema": {
                  "minimum": 1,
                  "type": "integer"
                }
              },
              "X-RateLimit-Limit": {
                "description": "Requests allowed per minute for this application. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-RateLimit-Remaining": {
                "description": "Requests left in the current minute. Present once the rate limit was evaluated.",
                "required": false,
                "schema": {
                  "type": "integer"
                }
              },
              "X-Request-Id": {
                "description": "Unique ID of this request. Quote it when you contact support.",
                "required": true,
                "schema": {
                  "format": "uuid",
                  "type": "string"
                }
              }
            }
          }
        },
        "security": [
          {
            "apiKey": []
          }
        ],
        "summary": "List product variants",
        "tags": [
          "Products"
        ]
      }
    }
  },
  "servers": [
    {
      "description": "Production",
      "url": "https://api-payroll.dizlog.com"
    }
  ],
  "tags": [
    {
      "description": "Stores, branches and warehouses. Use their IDs to read stock and to create sales orders.",
      "name": "Locations"
    },
    {
      "description": "Active catalog products and their variants, with catalog prices and units.",
      "name": "Products"
    },
    {
      "description": "Live stock per product and variant at one location: on hand, reserved and available.",
      "name": "Inventory"
    },
    {
      "description": "Customers of the business. Create them before you create sales orders for them.",
      "name": "Customers"
    },
    {
      "description": "Sales orders in every status. Orders you create are drafts that the merchant reviews and confirms in DizLog.",
      "name": "Sales orders"
    },
    {
      "description": "Invoices with their status and outstanding balance. Read-only.",
      "name": "Invoices"
    }
  ],
  "x-tagGroups": [
    {
      "name": "Catalog",
      "tags": [
        "Locations",
        "Products",
        "Inventory"
      ]
    },
    {
      "name": "Sales",
      "tags": [
        "Customers",
        "Sales orders",
        "Invoices"
      ]
    }
  ]
}
