{
  "openapi": "3.1.0",
  "info": {
    "title": "EuroPlaybook public API",
    "version": "1.0.0",
    "description": "The EuroPlaybook public API: products and their packaging, sales, obligations, reporting periods and\nfiling packs of ONE account, for your own tools, integrations and AI agents.\n\n**Authentication.** Create an API key under *Instellingen > API-sleutels* and send it as\n`Authorization: Bearer ep_<prefix>_<secret>`. The key belongs to one account; its scopes are limited by\nits creator's current role.\n\n**Conventions.** Masses are integer milligrams. Lists use cursor pagination (`?cursor=`, `next_cursor`).\nSend `Idempotency-Key` on POST/PUT to retry safely. Every response has `X-Request-Id`. Errors are\n`{\"detail\", \"code\", \"params\"?}`; branch on `code`. Too many requests: `429` with `Retry-After`.\n\n**Gate 1 stays human.** The API can propose packaging but never confirm it.\n\n**Partners** (accountants, bookkeepers). A partner key `epp_<prefix>_<secret>` (Partner > API-sleutels)\nmanages the partner's clients under `/partner/...`. For a client's data send the header\n`EuroPlaybook-Account: <account id>` on the normal endpoints (403 `not_a_client` unless that account is a\nlive client of the partner; 400 `account_required` without it). Per client the key is limited by the\npartner's role there (member: writes allowed, packaging stays a proposal).",
    "contact": {
      "name": "EuroPlaybook",
      "url": "https://europlaybook.com"
    }
  },
  "paths": {
    "/account": {
      "get": {
        "operationId": "get_account",
        "summary": "The account of this API key",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountOut"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "The account the API key belongs to, the key's name and the scopes in force now. Any scope.\nUse it to check a key.",
        "tags": [
          "Account"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/legal-entities": {
      "get": {
        "operationId": "list_legal_entities",
        "summary": "List legal entities",
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque cursor from `next_cursor` of the previous page.",
              "title": "Cursor"
            },
            "required": false,
            "description": "Opaque cursor from `next_cursor` of the previous page."
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "description": "Items per page (1-200).",
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            },
            "required": false,
            "description": "Items per page (1-200)."
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LegalEntityPage"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "The account's companies (the sellers in sales lines and the holders of obligations).",
        "tags": [
          "Account"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/legal-entities/{entity_id}": {
      "get": {
        "operationId": "get_legal_entity",
        "summary": "Get a legal entity",
        "parameters": [
          {
            "in": "path",
            "name": "entity_id",
            "schema": {
              "format": "uuid",
              "title": "Entity Id",
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LegalEntityOut"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "tags": [
          "Account"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/products": {
      "get": {
        "operationId": "list_products",
        "summary": "List products",
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque cursor from `next_cursor` of the previous page.",
              "title": "Cursor"
            },
            "required": false,
            "description": "Opaque cursor from `next_cursor` of the previous page."
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "description": "Items per page (1-200).",
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            },
            "required": false,
            "description": "Items per page (1-200)."
          },
          {
            "in": "query",
            "name": "sku",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Exact SKU (returns 0 or 1 product).",
              "examples": [
                "TEA-001"
              ],
              "title": "Sku"
            },
            "required": false,
            "description": "Exact SKU (returns 0 or 1 product).",
            "examples": [
              "TEA-001"
            ]
          },
          {
            "in": "query",
            "name": "q",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Search in SKU, title and GTIN, or an exact identifier.",
              "title": "Q"
            },
            "required": false,
            "description": "Search in SKU, title and GTIN, or an exact identifier."
          },
          {
            "in": "query",
            "name": "archived",
            "schema": {
              "default": "hide",
              "description": "hide = active products only (default), only = archived only, all = both.",
              "enum": [
                "hide",
                "only",
                "all"
              ],
              "title": "Archived",
              "type": "string"
            },
            "required": false,
            "description": "hide = active products only (default), only = archived only, all = both."
          },
          {
            "in": "query",
            "name": "confirmed",
            "schema": {
              "anyOf": [
                {
                  "type": "boolean"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Only products whose packaging is (not) confirmed.",
              "title": "Confirmed"
            },
            "required": false,
            "description": "Only products whose packaging is (not) confirmed."
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductPage"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "Products ordered by SKU. `?sku=` finds one product by its exact SKU (archived included).",
        "tags": [
          "Products"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/products/{product_id}": {
      "get": {
        "operationId": "get_product",
        "summary": "Get a product",
        "parameters": [
          {
            "in": "path",
            "name": "product_id",
            "schema": {
              "format": "uuid",
              "title": "Product Id",
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductOut"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "tags": [
          "Products"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/products/by-sku/{sku}": {
      "put": {
        "operationId": "upsert_product",
        "summary": "Create or update a product by SKU",
        "parameters": [
          {
            "in": "path",
            "name": "sku",
            "schema": {
              "title": "Sku",
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductOut"
                }
              }
            }
          },
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductOut"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "Creates the product (201) or updates the fields you send (200). Product data only: packaging goes\nthrough proposals. Changing a product does not touch its packaging confirmation.",
        "tags": [
          "Products"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProductUpsertIn"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/products/{product_id}/packaging": {
      "get": {
        "operationId": "get_packaging",
        "summary": "Get a product's packaging tree",
        "parameters": [
          {
            "in": "path",
            "name": "product_id",
            "schema": {
              "format": "uuid",
              "title": "Product Id",
              "type": "string"
            },
            "required": true
          },
          {
            "in": "query",
            "name": "on",
            "schema": {
              "anyOf": [
                {
                  "format": "date",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "On"
            },
            "required": false
          },
          {
            "in": "query",
            "name": "history",
            "schema": {
              "default": false,
              "title": "History",
              "type": "boolean"
            },
            "required": false
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PackagingTreeOut"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "Layers > lines > item > materials, with `totals_by_material` per sales unit on `on` (default\ntoday). `history=true` also lists lines that are not valid on `on` (they never count in the totals).",
        "tags": [
          "Packaging"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/products/{product_id}/packaging/proposals": {
      "post": {
        "operationId": "propose_packaging",
        "summary": "Propose packaging lines",
        "parameters": [
          {
            "in": "path",
            "name": "product_id",
            "schema": {
              "format": "uuid",
              "title": "Product Id",
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProposalOut"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "Adds lines with state `proposed`. Like any packaging change this clears the product's\nconfirmation (gate 1) and opens a \"confirm packaging\" task: a person confirms in the portal.",
        "tags": [
          "Packaging"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProposalIn"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/products/{product_id}/evidence": {
      "get": {
        "operationId": "list_evidence",
        "summary": "List a product's evidence files",
        "parameters": [
          {
            "in": "path",
            "name": "product_id",
            "schema": {
              "format": "uuid",
              "title": "Product Id",
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EvidenceList"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "Files that back up the product's packaging data (photos, spec sheets): metadata and a short-lived\nsigned download URL each. Read-only: upload evidence in the portal.",
        "tags": [
          "Packaging"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/products/{product_id}/profiles": {
      "get": {
        "operationId": "list_profiles",
        "summary": "List a product's regime profiles",
        "parameters": [
          {
            "in": "path",
            "name": "product_id",
            "schema": {
              "format": "uuid",
              "title": "Product Id",
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegimeProfileList"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "Per-regime data (e.g. `epr.weee` category, `epr.textiles`), own and inherited from the product's\ngroup, all versions; `in_force` names the profile that applies today per regime.",
        "tags": [
          "Products"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/products/{product_id}/profiles/{regime}": {
      "put": {
        "operationId": "propose_profile",
        "summary": "Propose a regime profile",
        "parameters": [
          {
            "in": "path",
            "name": "product_id",
            "schema": {
              "format": "uuid",
              "title": "Product Id",
              "type": "string"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "regime",
            "schema": {
              "title": "Regime",
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegimeProfileOut"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "Creates or changes the product's own profile for `regime` as a proposal (state `proposed`, source\n`api`); `data` must match the regime's JSON Schema (422 otherwise). A person confirms in the portal.",
        "tags": [
          "Products"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProfileProposalIn"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/product-groups": {
      "get": {
        "operationId": "list_groups",
        "summary": "List product groups",
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque cursor from `next_cursor` of the previous page.",
              "title": "Cursor"
            },
            "required": false,
            "description": "Opaque cursor from `next_cursor` of the previous page."
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "description": "Items per page (1-200).",
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            },
            "required": false,
            "description": "Items per page (1-200)."
          },
          {
            "in": "query",
            "name": "q",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Search in name, code and member SKUs.",
              "title": "Q"
            },
            "required": false,
            "description": "Search in name, code and member SKUs."
          },
          {
            "in": "query",
            "name": "archived",
            "schema": {
              "default": "hide",
              "description": "As for products.",
              "enum": [
                "hide",
                "only",
                "all"
              ],
              "title": "Archived",
              "type": "string"
            },
            "required": false,
            "description": "As for products."
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductGroupPage"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "Groups of products that share packaging, by name. A member inherits the group's lines per layer\nunless it has its own lines on that layer.",
        "tags": [
          "Products"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/product-groups/{group_id}": {
      "get": {
        "operationId": "get_group",
        "summary": "Get a product group with its packaging",
        "parameters": [
          {
            "in": "path",
            "name": "group_id",
            "schema": {
              "format": "uuid",
              "title": "Group Id",
              "type": "string"
            },
            "required": true
          },
          {
            "in": "query",
            "name": "on",
            "schema": {
              "anyOf": [
                {
                  "format": "date",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "On"
            },
            "required": false
          },
          {
            "in": "query",
            "name": "history",
            "schema": {
              "default": false,
              "title": "History",
              "type": "boolean"
            },
            "required": false
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductGroupDetailOut"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "The group, its members (with the layers they override) and its packaging tree on `on`.",
        "tags": [
          "Products"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/packaging-items": {
      "get": {
        "operationId": "list_items",
        "summary": "List packaging items",
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque cursor from `next_cursor` of the previous page.",
              "title": "Cursor"
            },
            "required": false,
            "description": "Opaque cursor from `next_cursor` of the previous page."
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "description": "Items per page (1-200).",
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            },
            "required": false,
            "description": "Items per page (1-200)."
          },
          {
            "in": "query",
            "name": "q",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Q"
            },
            "required": false
          },
          {
            "in": "query",
            "name": "archived",
            "schema": {
              "default": "hide",
              "title": "Archived",
              "type": "string"
            },
            "required": false
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PackagingItemPage"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "The packaging library: reusable parts (boxes, bags, fillers) with their material breakdown.\nParts made for one product only are not listed (they appear in that product's packaging tree).",
        "tags": [
          "Packaging"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/packaging-items/{item_id}": {
      "get": {
        "operationId": "get_item",
        "summary": "Get a packaging item",
        "parameters": [
          {
            "in": "path",
            "name": "item_id",
            "schema": {
              "format": "uuid",
              "title": "Item Id",
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PackagingItemOut"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "tags": [
          "Packaging"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/reference/materials": {
      "get": {
        "operationId": "reference_materials",
        "summary": "Material codes",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferenceList"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "tags": [
          "Reference"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/reference/layers": {
      "get": {
        "operationId": "reference_layers",
        "summary": "Packaging layers",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferenceList"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "tags": [
          "Reference"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/reference/regimes": {
      "get": {
        "operationId": "reference_regimes",
        "summary": "EPR regimes",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferenceList"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "tags": [
          "Reference"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/reference/countries": {
      "get": {
        "operationId": "reference_countries",
        "summary": "Countries",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferenceList"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "tags": [
          "Reference"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/sales": {
      "post": {
        "operationId": "push_sales",
        "summary": "Push sales lines (bulk)",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesPushOut"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "Up to 1000 lines per call, idempotent on `external_id` per account: a line sent again with the\nsame values is unchanged, with new values it is updated. Lines a closed or filed period covers are\nreturned in `held` and not stored. No personal data: unknown fields are refused.",
        "tags": [
          "Sales"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SalesPushIn"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      },
      "get": {
        "operationId": "list_sales",
        "summary": "List sales lines",
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque cursor from `next_cursor` of the previous page.",
              "title": "Cursor"
            },
            "required": false,
            "description": "Opaque cursor from `next_cursor` of the previous page."
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "description": "Items per page (1-200).",
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            },
            "required": false,
            "description": "Items per page (1-200)."
          },
          {
            "in": "query",
            "name": "sold_from",
            "schema": {
              "anyOf": [
                {
                  "format": "date",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "First day (inclusive).",
              "title": "Sold From"
            },
            "required": false,
            "description": "First day (inclusive)."
          },
          {
            "in": "query",
            "name": "sold_to",
            "schema": {
              "anyOf": [
                {
                  "format": "date",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Last day (inclusive).",
              "title": "Sold To"
            },
            "required": false,
            "description": "Last day (inclusive)."
          },
          {
            "in": "query",
            "name": "sku",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Sku"
            },
            "required": false
          },
          {
            "in": "query",
            "name": "legal_entity_id",
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Legal Entity Id"
            },
            "required": false
          },
          {
            "in": "query",
            "name": "source",
            "schema": {
              "default": "all",
              "description": "api = only lines pushed through this API.",
              "enum": [
                "api",
                "all"
              ],
              "title": "Source",
              "type": "string"
            },
            "required": false,
            "description": "api = only lines pushed through this API."
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SalesPage"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "Sales lines from every source (API, CSV, shop and ERP connections), oldest first.",
        "tags": [
          "Sales"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/obligations": {
      "get": {
        "operationId": "list_obligations",
        "summary": "List obligations",
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque cursor from `next_cursor` of the previous page.",
              "title": "Cursor"
            },
            "required": false,
            "description": "Opaque cursor from `next_cursor` of the previous page."
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "description": "Items per page (1-200).",
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            },
            "required": false,
            "description": "Items per page (1-200)."
          },
          {
            "in": "query",
            "name": "legal_entity_id",
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Legal Entity Id"
            },
            "required": false
          },
          {
            "in": "query",
            "name": "jurisdiction",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "examples": [
                "NL"
              ],
              "title": "Jurisdiction"
            },
            "required": false,
            "examples": [
              "NL"
            ]
          },
          {
            "in": "query",
            "name": "status",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            },
            "required": false
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ObligationPage"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "EPR obligations per company, country and regime, with the status per derived year and why.",
        "tags": [
          "Compliance"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/obligations/{obligation_id}": {
      "get": {
        "operationId": "get_obligation",
        "summary": "Get an obligation",
        "parameters": [
          {
            "in": "path",
            "name": "obligation_id",
            "schema": {
              "format": "uuid",
              "title": "Obligation Id",
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ObligationOut"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "tags": [
          "Compliance"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/periods": {
      "get": {
        "operationId": "list_periods",
        "summary": "List reporting periods",
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque cursor from `next_cursor` of the previous page.",
              "title": "Cursor"
            },
            "required": false,
            "description": "Opaque cursor from `next_cursor` of the previous page."
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "description": "Items per page (1-200).",
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            },
            "required": false,
            "description": "Items per page (1-200)."
          },
          {
            "in": "query",
            "name": "legal_entity_id",
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Legal Entity Id"
            },
            "required": false
          },
          {
            "in": "query",
            "name": "status",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            },
            "required": false
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PeriodPage"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "Reporting periods (per filing obligation), oldest first.",
        "tags": [
          "Compliance"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/periods/{period_id}": {
      "get": {
        "operationId": "get_period",
        "summary": "Get a reporting period",
        "parameters": [
          {
            "in": "path",
            "name": "period_id",
            "schema": {
              "format": "uuid",
              "title": "Period Id",
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PeriodOut"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "tags": [
          "Compliance"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/periods/{period_id}/totals": {
      "get": {
        "operationId": "period_totals",
        "summary": "Get a period's ledger totals",
        "parameters": [
          {
            "in": "path",
            "name": "period_id",
            "schema": {
              "format": "uuid",
              "title": "Period Id",
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PeriodTotalsOut"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "The totals of the period's last ledger build (by kind, material, household, obligated party),\nwhether it is stale, what blocks closing it, and what a pack would declare.",
        "tags": [
          "Compliance"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/periods/{period_id}/totals/{key}/explain": {
      "get": {
        "operationId": "explain_total",
        "summary": "Explain a period total",
        "parameters": [
          {
            "in": "path",
            "name": "period_id",
            "schema": {
              "format": "uuid",
              "title": "Period Id",
              "type": "string"
            },
            "required": true
          },
          {
            "in": "path",
            "name": "key",
            "schema": {
              "title": "Key",
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExplainTotalOut"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "Where a figure comes from: the pack line `key` (as in `declared.lines` of the totals) > the ledger\nentries behind it > products > the packaging lines used (own or inherited, with source and evidence\ncount) + sales facts per month and channel. Recorded at the ledger build; closed periods keep it.",
        "tags": [
          "Compliance"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/packs": {
      "get": {
        "operationId": "list_packs",
        "summary": "List filing packs",
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque cursor from `next_cursor` of the previous page.",
              "title": "Cursor"
            },
            "required": false,
            "description": "Opaque cursor from `next_cursor` of the previous page."
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "description": "Items per page (1-200).",
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            },
            "required": false,
            "description": "Items per page (1-200)."
          },
          {
            "in": "query",
            "name": "period_id",
            "schema": {
              "anyOf": [
                {
                  "format": "uuid",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Period Id"
            },
            "required": false
          },
          {
            "in": "query",
            "name": "status",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            },
            "required": false
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PackPage"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "tags": [
          "Filing packs"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/packs/{pack_id}": {
      "get": {
        "operationId": "get_pack",
        "summary": "Get a filing pack",
        "parameters": [
          {
            "in": "path",
            "name": "pack_id",
            "schema": {
              "format": "uuid",
              "title": "Pack Id",
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PackDetailOut"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "A pack with its lines (the figures as filed with the scheme).",
        "tags": [
          "Filing packs"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/packs/{pack_id}/download": {
      "get": {
        "operationId": "download_pack",
        "summary": "Download a filing pack",
        "parameters": [
          {
            "in": "path",
            "name": "pack_id",
            "schema": {
              "format": "uuid",
              "title": "Pack Id",
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DownloadOut"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "A short-lived signed URL for the pack file; GET it without the Authorization header.",
        "tags": [
          "Filing packs"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/partner": {
      "get": {
        "operationId": "get_partner",
        "summary": "The partner of this key",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerWhoAmIOut"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "Who am I: the partner, the key and its scopes. Partner keys only (403 partner_key_required).",
        "tags": [
          "partner"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/partner/clients": {
      "get": {
        "operationId": "list_clients",
        "summary": "List your clients",
        "parameters": [
          {
            "in": "query",
            "name": "cursor",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Opaque cursor from `next_cursor` of the previous page.",
              "title": "Cursor"
            },
            "required": false,
            "description": "Opaque cursor from `next_cursor` of the previous page."
          },
          {
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "description": "Items per page (1-200).",
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            },
            "required": false,
            "description": "Items per page (1-200)."
          },
          {
            "in": "query",
            "name": "q",
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Q"
            },
            "required": false
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientCursorPage"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "Client accounts of your partner that are not revoked: status `invited` (the owner has not accepted\nyet) or `active`, with the open owner invite and the last activity. Cursor pagination.",
        "tags": [
          "partner"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      },
      "post": {
        "operationId": "create_client",
        "summary": "Create a client account",
        "parameters": [],
        "responses": {
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientOut"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "A new client: account (plan pilot) + its first company + an owner invite by e-mail. Your team gets\nthe member role in it at once (enter data, build, draft packs); approving a pack stays with\nthe owner. Send `Idempotency-Key` to retry safely.",
        "tags": [
          "partner"
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClientIn"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/partner/clients/{client_id}": {
      "get": {
        "operationId": "get_client",
        "summary": "Get a client",
        "parameters": [
          {
            "in": "path",
            "name": "client_id",
            "schema": {
              "format": "uuid",
              "title": "Client Id",
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientOut"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "`client_id` is the client's account id. 404 when it is not a live client of your partner.",
        "tags": [
          "partner"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    },
    "/partner/clients/{client_id}/resend-invite": {
      "post": {
        "operationId": "resend_invite",
        "summary": "Resend the owner invite",
        "parameters": [
          {
            "in": "path",
            "name": "client_id",
            "schema": {
              "format": "uuid",
              "title": "Client Id",
              "type": "string"
            },
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClientOut"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicValidationErrorOut"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicErrorOut"
                }
              }
            }
          }
        },
        "description": "A new owner invite mail; the previous link stops working. 409 owner_already_joined.",
        "tags": [
          "partner"
        ],
        "security": [
          {
            "BearerTokenAuth": []
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "AccountOut": {
        "properties": {
          "id": {
            "description": "The account (brand) this API key belongs to.",
            "examples": [
              "0199f5a2-7c1e-7b4a-9d0e-3f6c2a1b8e44"
            ],
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "name": {
            "description": "Account name.",
            "examples": [
              "Demo Garden"
            ],
            "title": "Name",
            "type": "string"
          },
          "plan": {
            "description": "Subscription plan.",
            "examples": [
              "pilot"
            ],
            "title": "Plan",
            "type": "string"
          },
          "token_name": {
            "description": "Name of the API key making this call.",
            "examples": [
              "Shopify sync"
            ],
            "title": "Token Name",
            "type": "string"
          },
          "token_prefix": {
            "description": "Public prefix of the API key (`ep_<prefix>_\u2026`).",
            "examples": [
              "k3x9a2mf"
            ],
            "title": "Token Prefix",
            "type": "string"
          },
          "scopes": {
            "description": "Scopes in force for this key now: its own scopes limited by its creator's current role.",
            "examples": [
              [
                "catalogue:read",
                "sales:write"
              ]
            ],
            "items": {
              "type": "string"
            },
            "title": "Scopes",
            "type": "array"
          }
        },
        "required": [
          "id",
          "name",
          "plan",
          "token_name",
          "token_prefix",
          "scopes"
        ],
        "title": "AccountOut",
        "type": "object"
      },
      "PublicErrorOut": {
        "properties": {
          "detail": {
            "description": "What went wrong, in English, for people and logs.",
            "examples": [
              "This API key lacks the scope catalogue:write"
            ],
            "title": "Detail",
            "type": "string"
          },
          "code": {
            "description": "Stable machine-readable error code; translate and branch on this.",
            "examples": [
              "insufficient_scope"
            ],
            "title": "Code",
            "type": "string"
          },
          "params": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "description": "The values in `detail`, per code (e.g. required_scope, retry_after).",
            "examples": [
              {
                "required_scope": "catalogue:write"
              }
            ],
            "title": "Params"
          }
        },
        "required": [
          "detail",
          "code"
        ],
        "title": "PublicErrorOut",
        "type": "object"
      },
      "PublicValidationErrorOut": {
        "properties": {
          "detail": {
            "description": "What went wrong, in English, for people and logs.",
            "examples": [
              "This API key lacks the scope catalogue:write"
            ],
            "title": "Detail",
            "type": "string"
          },
          "code": {
            "description": "Stable machine-readable error code; translate and branch on this.",
            "examples": [
              "insufficient_scope"
            ],
            "title": "Code",
            "type": "string"
          },
          "params": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "description": "The values in `detail`, per code (e.g. required_scope, retry_after).",
            "examples": [
              {
                "required_scope": "catalogue:write"
              }
            ],
            "title": "Params"
          },
          "errors": {
            "default": [],
            "description": "Per-field problems (pydantic format: loc, msg, type).",
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "title": "Errors",
            "type": "array"
          }
        },
        "required": [
          "detail",
          "code"
        ],
        "title": "PublicValidationErrorOut",
        "type": "object"
      },
      "PageParams": {
        "properties": {
          "cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Opaque cursor from `next_cursor` of the previous page.",
            "title": "Cursor"
          },
          "limit": {
            "default": 50,
            "description": "Items per page (1-200).",
            "maximum": 200,
            "minimum": 1,
            "title": "Limit",
            "type": "integer"
          }
        },
        "title": "PageParams",
        "type": "object"
      },
      "LegalEntityOut": {
        "properties": {
          "id": {
            "examples": [
              "0199f5a2-7c1e-7b4a-9d0e-3f6c2a1b8e44"
            ],
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "name": {
            "description": "Registered company name.",
            "examples": [
              "Demo Garden B.V."
            ],
            "title": "Name",
            "type": "string"
          },
          "legal_form": {
            "description": "Legal form.",
            "examples": [
              "B.V."
            ],
            "title": "Legal Form",
            "type": "string"
          },
          "country": {
            "description": "Country of registration (ISO 3166-1 alpha-2).",
            "examples": [
              "NL"
            ],
            "title": "Country",
            "type": "string"
          },
          "registry_type": {
            "description": "Company registry (kvk, kbo, ...).",
            "examples": [
              "kvk"
            ],
            "title": "Registry Type",
            "type": "string"
          },
          "registry_id": {
            "description": "Number in that registry.",
            "examples": [
              "90000001"
            ],
            "title": "Registry Id",
            "type": "string"
          },
          "vat_number": {
            "description": "VAT number.",
            "examples": [
              "NL800000001B01"
            ],
            "title": "Vat Number",
            "type": "string"
          },
          "is_default": {
            "description": "The company used when a sale names none.",
            "title": "Is Default",
            "type": "boolean"
          },
          "archived_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Set when the company was archived.",
            "title": "Archived At"
          }
        },
        "required": [
          "id",
          "name",
          "legal_form",
          "country",
          "registry_type",
          "registry_id",
          "vat_number",
          "is_default"
        ],
        "title": "LegalEntityOut",
        "type": "object"
      },
      "LegalEntityPage": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/LegalEntityOut"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Pass as `cursor` to get the next page; null on the last page.",
            "examples": [
              "WyIwMTk5ZjVhMi03YzFlLTdiNGEtOWQwZS0zZjZjMmExYjhlNDQiXQ"
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "LegalEntityPage",
        "type": "object"
      },
      "ProductFilters": {
        "properties": {
          "cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Opaque cursor from `next_cursor` of the previous page.",
            "title": "Cursor"
          },
          "limit": {
            "default": 50,
            "description": "Items per page (1-200).",
            "maximum": 200,
            "minimum": 1,
            "title": "Limit",
            "type": "integer"
          },
          "sku": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Exact SKU (returns 0 or 1 product).",
            "examples": [
              "TEA-001"
            ],
            "title": "Sku"
          },
          "q": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Search in SKU, title and GTIN, or an exact identifier.",
            "title": "Q"
          },
          "archived": {
            "default": "hide",
            "description": "hide = active products only (default), only = archived only, all = both.",
            "enum": [
              "hide",
              "only",
              "all"
            ],
            "title": "Archived",
            "type": "string"
          },
          "confirmed": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "description": "Only products whose packaging is (not) confirmed.",
            "title": "Confirmed"
          }
        },
        "title": "ProductFilters",
        "type": "object"
      },
      "ConfirmationOut": {
        "description": "Gate 1 with the packaging fingerprint.",
        "properties": {
          "state": {
            "description": "none = never confirmed; confirmed = the packaging is what a person confirmed; changed = it was confirmed, but the packaging (own or inherited) differs now.",
            "enum": [
              "none",
              "confirmed",
              "changed"
            ],
            "title": "State",
            "type": "string"
          },
          "at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the current confirmation was given.",
            "title": "At"
          },
          "by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Who confirmed (display name).",
            "title": "By"
          }
        },
        "required": [
          "state"
        ],
        "title": "ConfirmationOut",
        "type": "object"
      },
      "ProductOut": {
        "properties": {
          "id": {
            "examples": [
              "0199f5a2-7c1e-7b4a-9d0e-3f6c2a1b8e44"
            ],
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "sku": {
            "description": "Your stock keeping unit; unique per account.",
            "examples": [
              "TEA-001"
            ],
            "title": "Sku",
            "type": "string"
          },
          "title": {
            "description": "Product name.",
            "examples": [
              "Green tea 100 g"
            ],
            "title": "Title",
            "type": "string"
          },
          "brand_name": {
            "description": "Brand on the product.",
            "examples": [
              "Demo Garden"
            ],
            "title": "Brand Name",
            "type": "string"
          },
          "gtin": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "GTIN/EAN (8-14 digits, check digit validated).",
            "examples": [
              "8712345678906"
            ],
            "title": "Gtin"
          },
          "hs_code": {
            "description": "Customs tariff code.",
            "examples": [
              "090210"
            ],
            "title": "Hs Code",
            "type": "string"
          },
          "country_of_origin": {
            "description": "ISO 3166-1 alpha-2.",
            "examples": [
              "NL"
            ],
            "title": "Country Of Origin",
            "type": "string"
          },
          "net_weight_mg": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Net product weight in milligrams.",
            "examples": [
              100000
            ],
            "title": "Net Weight Mg"
          },
          "status": {
            "description": "Archived products are kept for history.",
            "enum": [
              "active",
              "archived"
            ],
            "title": "Status",
            "type": "string"
          },
          "is_kit": {
            "description": "A bundle of other products (bill of materials).",
            "title": "Is Kit",
            "type": "boolean"
          },
          "is_electrical": {
            "description": "Electrical/electronic equipment (WEEE).",
            "title": "Is Electrical",
            "type": "boolean"
          },
          "is_textile": {
            "description": "Textile product (textiles EPR).",
            "title": "Is Textile",
            "type": "boolean"
          },
          "packaging_confirmed": {
            "description": "Gate 1: a person confirmed this product's packaging. Changing packaging (also through a proposal) clears it until someone confirms again in the portal.",
            "title": "Packaging Confirmed",
            "type": "boolean"
          },
          "confirmed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the packaging was confirmed.",
            "title": "Confirmed At"
          },
          "confirmation": {
            "$ref": "#/components/schemas/ConfirmationOut",
            "description": "Gate 1 in detail (complements `packaging_confirmed`, which equals state confirmed when the packaging is unchanged)."
          },
          "group_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The product group whose packaging this product inherits (per layer), if any.",
            "title": "Group Id"
          },
          "archived_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Archived At"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          }
        },
        "required": [
          "id",
          "sku",
          "title",
          "brand_name",
          "hs_code",
          "country_of_origin",
          "status",
          "is_kit",
          "is_electrical",
          "is_textile",
          "packaging_confirmed",
          "confirmation",
          "created_at",
          "updated_at"
        ],
        "title": "ProductOut",
        "type": "object"
      },
      "ProductPage": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/ProductOut"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Pass as `cursor` to get the next page; null on the last page.",
            "examples": [
              "WyIwMTk5ZjVhMi03YzFlLTdiNGEtOWQwZS0zZjZjMmExYjhlNDQiXQ"
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "ProductPage",
        "type": "object"
      },
      "ProductUpsertIn": {
        "additionalProperties": false,
        "description": "Create the product with this SKU, or update the fields you send. Fields you leave out stay as\nthey are (on create they get their default).",
        "examples": [
          {
            "gtin": "8712345678906",
            "net_weight_mg": 100000,
            "title": "Green tea 100 g"
          }
        ],
        "properties": {
          "title": {
            "description": "Product name.",
            "examples": [
              "Green tea 100 g"
            ],
            "maxLength": 300,
            "minLength": 1,
            "title": "Title",
            "type": "string"
          },
          "brand_name": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Brand on the product.",
            "title": "Brand Name"
          },
          "gtin": {
            "anyOf": [
              {
                "maxLength": 14,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "GTIN/EAN; null clears it.",
            "examples": [
              "8712345678906"
            ],
            "title": "Gtin"
          },
          "hs_code": {
            "anyOf": [
              {
                "maxLength": 12,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Customs tariff code.",
            "title": "Hs Code"
          },
          "country_of_origin": {
            "anyOf": [
              {
                "maxLength": 2,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "ISO 3166-1 alpha-2.",
            "title": "Country Of Origin"
          },
          "net_weight_mg": {
            "anyOf": [
              {
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Net weight in milligrams.",
            "examples": [
              100000
            ],
            "title": "Net Weight Mg"
          },
          "is_electrical": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "description": "Electrical/electronic equipment (WEEE).",
            "title": "Is Electrical"
          },
          "is_textile": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "description": "Textile product.",
            "title": "Is Textile"
          }
        },
        "required": [
          "title"
        ],
        "title": "ProductUpsertIn",
        "type": "object"
      },
      "FindingOut": {
        "properties": {
          "code": {
            "description": "Stable check code.",
            "examples": [
              "heavier_than_product"
            ],
            "title": "Code",
            "type": "string"
          },
          "severity": {
            "description": "info, warning or error.",
            "examples": [
              "warning"
            ],
            "title": "Severity",
            "type": "string"
          },
          "params": {
            "additionalProperties": true,
            "default": {},
            "description": "Values for the message, per code.",
            "title": "Params",
            "type": "object"
          },
          "line_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The packaging line the finding is about, if any.",
            "title": "Line Id"
          },
          "dismissed": {
            "default": false,
            "description": "A person marked this finding as right ('klopt zo').",
            "title": "Dismissed",
            "type": "boolean"
          }
        },
        "required": [
          "code",
          "severity"
        ],
        "title": "FindingOut",
        "type": "object"
      },
      "MaterialMassOut": {
        "properties": {
          "material": {
            "description": "Material code from the knowledge pack (see /reference/materials).",
            "examples": [
              "paper"
            ],
            "title": "Material",
            "type": "string"
          },
          "mass_mg": {
            "description": "Mass in milligrams.",
            "examples": [
              12000
            ],
            "title": "Mass Mg",
            "type": "integer"
          }
        },
        "required": [
          "material",
          "mass_mg"
        ],
        "title": "MaterialMassOut",
        "type": "object"
      },
      "PackagingItemOut": {
        "properties": {
          "id": {
            "examples": [
              "0199f5a2-7c1e-7b4a-9d0e-3f6c2a1b8e44"
            ],
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "name": {
            "description": "Name of the packaging part.",
            "examples": [
              "Folding box S"
            ],
            "title": "Name",
            "type": "string"
          },
          "code": {
            "description": "Your code for the part (unique per account when set).",
            "examples": [
              "BOX-S"
            ],
            "title": "Code",
            "type": "string"
          },
          "role_default": {
            "description": "Usual role: sales, grouped, transport, shipping or filler.",
            "title": "Role Default",
            "type": "string"
          },
          "household_default": {
            "description": "Usually ends up with households (vs. businesses).",
            "title": "Household Default",
            "type": "boolean"
          },
          "separable": {
            "description": "Can be separated from the other parts by hand.",
            "title": "Separable",
            "type": "boolean"
          },
          "rigidity": {
            "enum": [
              "rigid",
              "flexible"
            ],
            "title": "Rigidity",
            "type": "string"
          },
          "recycled_content_pct": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Recycled content in percent.",
            "title": "Recycled Content Pct"
          },
          "recyclability_grade": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "A-E, when known.",
            "title": "Recyclability Grade"
          },
          "custom_for_product_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Set for a part made for one product only (not in the shared library).",
            "title": "Custom For Product Id"
          },
          "materials": {
            "description": "Material breakdown of ONE part.",
            "items": {
              "$ref": "#/components/schemas/MaterialMassOut"
            },
            "title": "Materials",
            "type": "array"
          },
          "total_mass_mg": {
            "description": "Sum of the materials, milligrams.",
            "examples": [
              12500
            ],
            "title": "Total Mass Mg",
            "type": "integer"
          },
          "archived_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Archived At"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "code",
          "role_default",
          "household_default",
          "separable",
          "rigidity",
          "materials",
          "total_mass_mg",
          "created_at",
          "updated_at"
        ],
        "title": "PackagingItemOut",
        "type": "object"
      },
      "PackagingLayerOut": {
        "properties": {
          "layer": {
            "description": "sales (primary), grouped (secondary) or transport (tertiary).",
            "enum": [
              "sales",
              "grouped",
              "transport"
            ],
            "title": "Layer",
            "type": "string"
          },
          "lines": {
            "items": {
              "$ref": "#/components/schemas/PackagingLineOut"
            },
            "title": "Lines",
            "type": "array"
          },
          "mass_mg": {
            "description": "Mass per sales unit of this layer's lines that count in the totals.",
            "title": "Mass Mg",
            "type": "integer"
          }
        },
        "required": [
          "layer",
          "lines",
          "mass_mg"
        ],
        "title": "PackagingLayerOut",
        "type": "object"
      },
      "PackagingLineOut": {
        "description": "One packaging line: `quantity` parts of `item` per sales unit, valid over a date range.",
        "properties": {
          "id": {
            "examples": [
              "0199f5a2-7c1e-7b4a-9d0e-3f6c2a1b8e44"
            ],
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "state": {
            "description": "proposed = not yet checked by a person; confirmed = part of a gate-1 confirmation.",
            "enum": [
              "proposed",
              "confirmed"
            ],
            "title": "State",
            "type": "string"
          },
          "quantity": {
            "description": "Parts per sales unit (may be a fraction, e.g. 1 film per 1440).",
            "examples": [
              "1.0000"
            ],
            "title": "Quantity",
            "type": "string"
          },
          "household": {
            "description": "Ends up with households (counts as household packaging).",
            "title": "Household",
            "type": "boolean"
          },
          "scope_channel": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Only for sales in this channel; null = all.",
            "title": "Scope Channel"
          },
          "scope_fulfilment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Only for this fulfilment; null = all.",
            "title": "Scope Fulfilment"
          },
          "valid_from": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "First day (inclusive); null = from the start.",
            "title": "Valid From"
          },
          "valid_to": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "End day (exclusive); null = open-ended.",
            "title": "Valid To"
          },
          "mass_mg": {
            "description": "Packaging mass per sales unit for this line (item mass x quantity).",
            "title": "Mass Mg",
            "type": "integer"
          },
          "in_totals": {
            "description": "Counted in `totals_by_material`: valid on `on` and not limited to a channel/fulfilment.",
            "title": "In Totals",
            "type": "boolean"
          },
          "source": {
            "description": "Where the line came from (provenance).",
            "enum": [
              "manual",
              "csv",
              "odoo",
              "shopify",
              "picqer",
              "supplier_spec",
              "photo",
              "api",
              "ai"
            ],
            "examples": [
              "shopify"
            ],
            "title": "Source",
            "type": "string"
          },
          "source_ref": {
            "default": "",
            "description": "Which record of that source, e.g. `api:token:<prefix>`.",
            "examples": [
              "csv:0199f5a2"
            ],
            "title": "Source Ref",
            "type": "string"
          },
          "inherited": {
            "default": false,
            "description": "The line is the product group's: the product has no own line on that layer.",
            "title": "Inherited",
            "type": "boolean"
          },
          "group_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The group the line belongs to (inherited lines).",
            "title": "Group Id"
          },
          "item": {
            "$ref": "#/components/schemas/PackagingItemOut"
          }
        },
        "required": [
          "id",
          "state",
          "quantity",
          "household",
          "mass_mg",
          "in_totals",
          "source",
          "item"
        ],
        "title": "PackagingLineOut",
        "type": "object"
      },
      "PackagingTreeOut": {
        "description": "A product's packaging as a tree: layers > lines > item > materials, plus the totals per material\nfor one day. The product's own lines and the lines it inherits from its group (per layer: own lines\nvalid on a day replace the group's); each line has `source`, `source_ref`, `inherited`, `group_id`.",
        "properties": {
          "product_id": {
            "examples": [
              "0199f5a2-7c1e-7b4a-9d0e-3f6c2a1b8e44"
            ],
            "format": "uuid",
            "title": "Product Id",
            "type": "string"
          },
          "sku": {
            "examples": [
              "TEA-001"
            ],
            "title": "Sku",
            "type": "string"
          },
          "group_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The product's group, if any.",
            "title": "Group Id"
          },
          "on": {
            "description": "The day the totals are for (query parameter `on`, default today).",
            "format": "date",
            "title": "On",
            "type": "string"
          },
          "packaging_confirmed": {
            "description": "Gate 1 passed (see ProductOut.packaging_confirmed).",
            "title": "Packaging Confirmed",
            "type": "boolean"
          },
          "confirmed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Confirmed At"
          },
          "confirmation": {
            "$ref": "#/components/schemas/ConfirmationOut"
          },
          "layers": {
            "items": {
              "$ref": "#/components/schemas/PackagingLayerOut"
            },
            "title": "Layers",
            "type": "array"
          },
          "totals_by_material": {
            "description": "Packaging per sales unit by material on `on` (lines with in_totals), heaviest first.",
            "items": {
              "$ref": "#/components/schemas/MaterialMassOut"
            },
            "title": "Totals By Material",
            "type": "array"
          },
          "total_mass_mg": {
            "description": "Sum of totals_by_material.",
            "examples": [
              14500
            ],
            "title": "Total Mass Mg",
            "type": "integer"
          },
          "findings": {
            "default": [],
            "description": "Automatic plausibility checks on today's lines.",
            "items": {
              "$ref": "#/components/schemas/FindingOut"
            },
            "title": "Findings",
            "type": "array"
          }
        },
        "required": [
          "product_id",
          "sku",
          "on",
          "packaging_confirmed",
          "confirmation",
          "layers",
          "totals_by_material",
          "total_mass_mg"
        ],
        "title": "PackagingTreeOut",
        "type": "object"
      },
      "ProposalOut": {
        "properties": {
          "proposed_line_ids": {
            "description": "The lines this call created (or found unchanged).",
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "title": "Proposed Line Ids",
            "type": "array"
          },
          "packaging": {
            "$ref": "#/components/schemas/PackagingTreeOut"
          }
        },
        "required": [
          "proposed_line_ids",
          "packaging"
        ],
        "title": "ProposalOut",
        "type": "object"
      },
      "MaterialMassIn": {
        "additionalProperties": false,
        "properties": {
          "material": {
            "description": "Material code (see /reference/materials).",
            "examples": [
              "paper"
            ],
            "maxLength": 64,
            "minLength": 1,
            "title": "Material",
            "type": "string"
          },
          "mass_mg": {
            "description": "Mass of this material in ONE part, milligrams.",
            "examples": [
              12000
            ],
            "minimum": 0,
            "title": "Mass Mg",
            "type": "integer"
          }
        },
        "required": [
          "material",
          "mass_mg"
        ],
        "title": "MaterialMassIn",
        "type": "object"
      },
      "NewPartIn": {
        "additionalProperties": false,
        "description": "A new packaging part for this product only, created together with the proposed line.",
        "properties": {
          "name": {
            "examples": [
              "Kraft pouch 100 g"
            ],
            "maxLength": 200,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          },
          "materials": {
            "description": "Material breakdown of one part.",
            "items": {
              "$ref": "#/components/schemas/MaterialMassIn"
            },
            "minItems": 1,
            "title": "Materials",
            "type": "array"
          },
          "rigidity": {
            "default": "rigid",
            "enum": [
              "rigid",
              "flexible"
            ],
            "title": "Rigidity",
            "type": "string"
          },
          "separable": {
            "default": true,
            "title": "Separable",
            "type": "boolean"
          }
        },
        "required": [
          "name",
          "materials"
        ],
        "title": "NewPartIn",
        "type": "object"
      },
      "ProposalIn": {
        "additionalProperties": false,
        "description": "Proposed packaging lines. They are stored with state `proposed`; the product's packaging\nconfirmation (gate 1) is cleared and a person confirms in the portal. The API never confirms.",
        "examples": [
          {
            "lines": [
              {
                "item_id": "0199f5a2-7c1e-7b4a-9d0e-3f6c2a1b8e44",
                "layer": "sales",
                "quantity": "1",
                "valid_from": "2026-01-01"
              },
              {
                "layer": "sales",
                "new_item": {
                  "materials": [
                    {
                      "mass_mg": 8000,
                      "material": "paper"
                    }
                  ],
                  "name": "Kraft pouch"
                }
              }
            ]
          }
        ],
        "properties": {
          "lines": {
            "items": {
              "$ref": "#/components/schemas/ProposalLineIn"
            },
            "maxItems": 50,
            "minItems": 1,
            "title": "Lines",
            "type": "array"
          }
        },
        "required": [
          "lines"
        ],
        "title": "ProposalIn",
        "type": "object"
      },
      "ProposalLineIn": {
        "additionalProperties": false,
        "description": "One proposed line. Send `item_id` (a part from the library, see /packaging-items) or `new_item`.",
        "properties": {
          "item_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "An existing packaging item.",
            "title": "Item Id"
          },
          "new_item": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/NewPartIn"
              },
              {
                "type": "null"
              }
            ],
            "description": "A new part for this product only."
          },
          "layer": {
            "default": "sales",
            "enum": [
              "sales",
              "grouped",
              "transport"
            ],
            "title": "Layer",
            "type": "string"
          },
          "quantity": {
            "anyOf": [
              {
                "exclusiveMinimum": 0.0,
                "type": "number"
              },
              {
                "type": "string"
              }
            ],
            "default": "1",
            "description": "Parts per `per_units` sales units.",
            "examples": [
              "1"
            ],
            "title": "Quantity"
          },
          "per_units": {
            "anyOf": [
              {
                "minimum": 1,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "E.g. 1 film per 1440 jars: quantity 1, per_units 1440.",
            "title": "Per Units"
          },
          "household": {
            "default": true,
            "title": "Household",
            "type": "boolean"
          },
          "scope_channel": {
            "anyOf": [
              {
                "enum": [
                  "webshop",
                  "bol",
                  "amazon",
                  "odoo",
                  "other"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Only for this sales channel.",
            "title": "Scope Channel"
          },
          "scope_fulfilment": {
            "anyOf": [
              {
                "enum": [
                  "own",
                  "fba",
                  "lvb",
                  "3pl"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Only for this fulfilment.",
            "title": "Scope Fulfilment"
          },
          "valid_from": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "First day (inclusive); null = from the start.",
            "title": "Valid From"
          },
          "valid_to": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "End (exclusive); null = open-ended.",
            "title": "Valid To"
          }
        },
        "title": "ProposalLineIn",
        "type": "object"
      },
      "EvidenceList": {
        "properties": {
          "product_id": {
            "format": "uuid",
            "title": "Product Id",
            "type": "string"
          },
          "items": {
            "description": "Evidence on the product, its packaging lines (own and inherited) and their items.",
            "items": {
              "$ref": "#/components/schemas/EvidenceOut"
            },
            "title": "Items",
            "type": "array"
          },
          "expires_in": {
            "description": "Seconds the download URLs stay valid.",
            "examples": [
              300
            ],
            "title": "Expires In",
            "type": "integer"
          }
        },
        "required": [
          "product_id",
          "items",
          "expires_in"
        ],
        "title": "EvidenceList",
        "type": "object"
      },
      "EvidenceOut": {
        "description": "A file that backs up packaging data. Read-only in the API.",
        "properties": {
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "kind": {
            "enum": [
              "photo",
              "spec_sheet",
              "invoice",
              "other"
            ],
            "title": "Kind",
            "type": "string"
          },
          "note": {
            "default": "",
            "title": "Note",
            "type": "string"
          },
          "target": {
            "description": "What the file is about.",
            "enum": [
              "product",
              "item",
              "packaging_line"
            ],
            "title": "Target",
            "type": "string"
          },
          "product_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Product Id"
          },
          "item_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Item Id"
          },
          "packaging_line_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Packaging Line Id"
          },
          "filename": {
            "title": "Filename",
            "type": "string"
          },
          "mime": {
            "title": "Mime",
            "type": "string"
          },
          "size_bytes": {
            "title": "Size Bytes",
            "type": "integer"
          },
          "sha256": {
            "title": "Sha256",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "download_url": {
            "description": "Short-lived signed URL; GET it without the Authorization header.",
            "title": "Download Url",
            "type": "string"
          }
        },
        "required": [
          "id",
          "kind",
          "target",
          "filename",
          "mime",
          "size_bytes",
          "sha256",
          "created_at",
          "download_url"
        ],
        "title": "EvidenceOut",
        "type": "object"
      },
      "RegimeProfileList": {
        "properties": {
          "product_id": {
            "format": "uuid",
            "title": "Product Id",
            "type": "string"
          },
          "items": {
            "description": "Own and inherited profiles, all versions.",
            "items": {
              "$ref": "#/components/schemas/RegimeProfileOut"
            },
            "title": "Items",
            "type": "array"
          },
          "in_force": {
            "additionalProperties": {
              "format": "uuid",
              "type": "string"
            },
            "description": "Per regime, the profile that applies today.",
            "title": "In Force",
            "type": "object"
          }
        },
        "required": [
          "product_id",
          "items",
          "in_force"
        ],
        "title": "RegimeProfileList",
        "type": "object"
      },
      "RegimeProfileOut": {
        "description": "Per-regime product data (e.g. WEEE category), validated by the knowledge pack's JSON Schema.",
        "properties": {
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "regime": {
            "examples": [
              "epr.weee"
            ],
            "title": "Regime",
            "type": "string"
          },
          "schema_version": {
            "title": "Schema Version",
            "type": "string"
          },
          "data": {
            "additionalProperties": true,
            "title": "Data",
            "type": "object"
          },
          "state": {
            "description": "proposed (e.g. from the API) or confirmed by a person.",
            "enum": [
              "proposed",
              "confirmed"
            ],
            "title": "State",
            "type": "string"
          },
          "inherited": {
            "description": "The group's profile (the product has no own one for the regime).",
            "title": "Inherited",
            "type": "boolean"
          },
          "group_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group Id"
          },
          "valid_from": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Valid From"
          },
          "valid_to": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Exclusive; null = open-ended.",
            "title": "Valid To"
          },
          "source": {
            "enum": [
              "manual",
              "csv",
              "odoo",
              "shopify",
              "picqer",
              "supplier_spec",
              "photo",
              "api",
              "ai"
            ],
            "title": "Source",
            "type": "string"
          },
          "source_ref": {
            "default": "",
            "title": "Source Ref",
            "type": "string"
          },
          "confirmed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Confirmed At"
          }
        },
        "required": [
          "id",
          "regime",
          "schema_version",
          "data",
          "state",
          "inherited",
          "source"
        ],
        "title": "RegimeProfileOut",
        "type": "object"
      },
      "ProfileProposalIn": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "additionalProperties": true,
            "description": "Profile data; must match the regime's JSON Schema.",
            "title": "Data",
            "type": "object"
          },
          "valid_from": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Start a new version on this day; omit to change the version valid today.",
            "title": "Valid From"
          }
        },
        "required": [
          "data"
        ],
        "title": "ProfileProposalIn",
        "type": "object"
      },
      "ProductGroupFilters": {
        "properties": {
          "cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Opaque cursor from `next_cursor` of the previous page.",
            "title": "Cursor"
          },
          "limit": {
            "default": 50,
            "description": "Items per page (1-200).",
            "maximum": 200,
            "minimum": 1,
            "title": "Limit",
            "type": "integer"
          },
          "q": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Search in name, code and member SKUs.",
            "title": "Q"
          },
          "archived": {
            "default": "hide",
            "description": "As for products.",
            "enum": [
              "hide",
              "only",
              "all"
            ],
            "title": "Archived",
            "type": "string"
          }
        },
        "title": "ProductGroupFilters",
        "type": "object"
      },
      "ProductGroupOut": {
        "description": "Products that share packaging (e.g. the variants of one Shopify product).",
        "properties": {
          "id": {
            "examples": [
              "0199f5a2-7c1e-7b4a-9d0e-3f6c2a1b8e44"
            ],
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "name": {
            "examples": [
              "Green tea"
            ],
            "title": "Name",
            "type": "string"
          },
          "code": {
            "description": "Unique per account: a Shopify product gid or a SKU stem.",
            "examples": [
              "TEA"
            ],
            "title": "Code",
            "type": "string"
          },
          "source": {
            "enum": [
              "manual",
              "csv",
              "odoo",
              "shopify",
              "picqer",
              "supplier_spec",
              "photo",
              "api",
              "ai"
            ],
            "title": "Source",
            "type": "string"
          },
          "source_ref": {
            "default": "",
            "title": "Source Ref",
            "type": "string"
          },
          "member_count": {
            "description": "Products in the group.",
            "title": "Member Count",
            "type": "integer"
          },
          "packaging_count": {
            "description": "Packaging lines of the group (all versions).",
            "title": "Packaging Count",
            "type": "integer"
          },
          "archived_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Archived At"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "code",
          "source",
          "member_count",
          "packaging_count",
          "created_at",
          "updated_at"
        ],
        "title": "ProductGroupOut",
        "type": "object"
      },
      "ProductGroupPage": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/ProductGroupOut"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Pass as `cursor` to get the next page; null on the last page.",
            "examples": [
              "WyIwMTk5ZjVhMi03YzFlLTdiNGEtOWQwZS0zZjZjMmExYjhlNDQiXQ"
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "ProductGroupPage",
        "type": "object"
      },
      "GroupMemberOut": {
        "properties": {
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "sku": {
            "title": "Sku",
            "type": "string"
          },
          "title": {
            "title": "Title",
            "type": "string"
          },
          "own_layers": {
            "description": "Layers on which the member has its own lines today (it does not inherit those).",
            "items": {
              "type": "string"
            },
            "title": "Own Layers",
            "type": "array"
          }
        },
        "required": [
          "id",
          "sku",
          "title",
          "own_layers"
        ],
        "title": "GroupMemberOut",
        "type": "object"
      },
      "GroupPackagingOut": {
        "properties": {
          "on": {
            "description": "The day the totals are for.",
            "format": "date",
            "title": "On",
            "type": "string"
          },
          "layers": {
            "items": {
              "$ref": "#/components/schemas/PackagingLayerOut"
            },
            "title": "Layers",
            "type": "array"
          },
          "totals_by_material": {
            "items": {
              "$ref": "#/components/schemas/MaterialMassOut"
            },
            "title": "Totals By Material",
            "type": "array"
          },
          "total_mass_mg": {
            "title": "Total Mass Mg",
            "type": "integer"
          }
        },
        "required": [
          "on",
          "layers",
          "totals_by_material",
          "total_mass_mg"
        ],
        "title": "GroupPackagingOut",
        "type": "object"
      },
      "ProductGroupDetailOut": {
        "properties": {
          "id": {
            "examples": [
              "0199f5a2-7c1e-7b4a-9d0e-3f6c2a1b8e44"
            ],
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "name": {
            "examples": [
              "Green tea"
            ],
            "title": "Name",
            "type": "string"
          },
          "code": {
            "description": "Unique per account: a Shopify product gid or a SKU stem.",
            "examples": [
              "TEA"
            ],
            "title": "Code",
            "type": "string"
          },
          "source": {
            "enum": [
              "manual",
              "csv",
              "odoo",
              "shopify",
              "picqer",
              "supplier_spec",
              "photo",
              "api",
              "ai"
            ],
            "title": "Source",
            "type": "string"
          },
          "source_ref": {
            "default": "",
            "title": "Source Ref",
            "type": "string"
          },
          "member_count": {
            "description": "Products in the group.",
            "title": "Member Count",
            "type": "integer"
          },
          "packaging_count": {
            "description": "Packaging lines of the group (all versions).",
            "title": "Packaging Count",
            "type": "integer"
          },
          "archived_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Archived At"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          },
          "members": {
            "items": {
              "$ref": "#/components/schemas/GroupMemberOut"
            },
            "title": "Members",
            "type": "array"
          },
          "packaging": {
            "$ref": "#/components/schemas/GroupPackagingOut",
            "description": "The group's own lines: every member's default."
          }
        },
        "required": [
          "id",
          "name",
          "code",
          "source",
          "member_count",
          "packaging_count",
          "created_at",
          "updated_at",
          "members",
          "packaging"
        ],
        "title": "ProductGroupDetailOut",
        "type": "object"
      },
      "PackagingItemPage": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/PackagingItemOut"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Pass as `cursor` to get the next page; null on the last page.",
            "examples": [
              "WyIwMTk5ZjVhMi03YzFlLTdiNGEtOWQwZS0zZjZjMmExYjhlNDQiXQ"
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "PackagingItemPage",
        "type": "object"
      },
      "ReferenceList": {
        "properties": {
          "pack_version": {
            "description": "Knowledge pack version these codes come from.",
            "examples": [
              "2026.10.1"
            ],
            "title": "Pack Version",
            "type": "string"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/ReferenceOut"
            },
            "title": "Items",
            "type": "array"
          }
        },
        "required": [
          "pack_version",
          "items"
        ],
        "title": "ReferenceList",
        "type": "object"
      },
      "ReferenceOut": {
        "properties": {
          "code": {
            "examples": [
              "paper"
            ],
            "title": "Code",
            "type": "string"
          },
          "name": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "Name per language (nl, en).",
            "examples": [
              {
                "en": "Paper",
                "nl": "Papier"
              }
            ],
            "title": "Name",
            "type": "object"
          },
          "verified": {
            "description": "False until checked against the cited sources.",
            "title": "Verified",
            "type": "boolean"
          },
          "sources": {
            "default": [],
            "description": "URLs of the sources the fact comes from.",
            "items": {
              "type": "string"
            },
            "title": "Sources",
            "type": "array"
          },
          "parent": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Parent material code (materials only).",
            "title": "Parent"
          },
          "scheme_categories": {
            "additionalProperties": {
              "type": "string"
            },
            "default": {},
            "description": "Scheme code -> that scheme's category.",
            "title": "Scheme Categories",
            "type": "object"
          }
        },
        "required": [
          "code",
          "name",
          "verified"
        ],
        "title": "ReferenceOut",
        "type": "object"
      },
      "SalesPushOut": {
        "properties": {
          "created": {
            "description": "New lines.",
            "title": "Created",
            "type": "integer"
          },
          "updated": {
            "description": "Lines whose values changed.",
            "title": "Updated",
            "type": "integer"
          },
          "unchanged": {
            "description": "Lines sent before with the same values.",
            "title": "Unchanged",
            "type": "integer"
          },
          "held": {
            "description": "external_ids not stored because a closed or filed period covers them (reopen it first).",
            "items": {
              "type": "string"
            },
            "title": "Held",
            "type": "array"
          },
          "unknown_skus": {
            "description": "SKUs without a product (stored; map or create the product).",
            "items": {
              "type": "string"
            },
            "title": "Unknown Skus",
            "type": "array"
          }
        },
        "required": [
          "created",
          "updated",
          "unchanged",
          "held",
          "unknown_skus"
        ],
        "title": "SalesPushOut",
        "type": "object"
      },
      "SalesLineIn": {
        "additionalProperties": false,
        "description": "One sales (or return) line. No personal data: no names, addresses or e-mails.",
        "properties": {
          "external_id": {
            "description": "Your unique id for this line; sending it again updates the line.",
            "examples": [
              "order-1001-line-1"
            ],
            "maxLength": 200,
            "minLength": 1,
            "title": "External Id",
            "type": "string"
          },
          "sku": {
            "description": "Your SKU; matched to a product.",
            "examples": [
              "TEA-001"
            ],
            "maxLength": 200,
            "minLength": 1,
            "title": "Sku",
            "type": "string"
          },
          "sold_on": {
            "description": "Sale (or return) date.",
            "examples": [
              "2026-10-01"
            ],
            "format": "date",
            "title": "Sold On",
            "type": "string"
          },
          "quantity": {
            "description": "Units (positive; use kind=return for returns).",
            "examples": [
              2
            ],
            "maximum": 10000000,
            "minimum": 1,
            "title": "Quantity",
            "type": "integer"
          },
          "kind": {
            "default": "sale",
            "enum": [
              "sale",
              "return"
            ],
            "title": "Kind",
            "type": "string"
          },
          "ship_from_country": {
            "description": "ISO 3166-1 alpha-2.",
            "examples": [
              "NL"
            ],
            "maxLength": 2,
            "minLength": 2,
            "title": "Ship From Country",
            "type": "string"
          },
          "ship_to_country": {
            "description": "ISO 3166-1 alpha-2.",
            "examples": [
              "BE"
            ],
            "maxLength": 2,
            "minLength": 2,
            "title": "Ship To Country",
            "type": "string"
          },
          "legal_entity_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Selling company; default: the account's default.",
            "title": "Legal Entity Id"
          },
          "channel": {
            "default": "other",
            "enum": [
              "webshop",
              "bol",
              "amazon",
              "odoo",
              "other"
            ],
            "title": "Channel",
            "type": "string"
          },
          "marketplace": {
            "anyOf": [
              {
                "maxLength": 32,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Marketplace code, e.g. amazon.de.",
            "title": "Marketplace"
          },
          "buyer_type": {
            "default": "unknown",
            "enum": [
              "consumer",
              "business_end_user",
              "reseller",
              "unknown"
            ],
            "title": "Buyer Type",
            "type": "string"
          },
          "fulfilment": {
            "default": "own",
            "enum": [
              "own",
              "fba",
              "lvb",
              "3pl"
            ],
            "title": "Fulfilment",
            "type": "string"
          },
          "net_amount_cents": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "description": "Net line amount in cents (optional).",
            "title": "Net Amount Cents"
          },
          "currency": {
            "default": "EUR",
            "maxLength": 3,
            "minLength": 3,
            "title": "Currency",
            "type": "string"
          }
        },
        "required": [
          "external_id",
          "sku",
          "sold_on",
          "quantity",
          "ship_from_country",
          "ship_to_country"
        ],
        "title": "SalesLineIn",
        "type": "object"
      },
      "SalesPushIn": {
        "additionalProperties": false,
        "examples": [
          {
            "lines": [
              {
                "channel": "webshop",
                "external_id": "order-1001-line-1",
                "quantity": 2,
                "ship_from_country": "NL",
                "ship_to_country": "BE",
                "sku": "TEA-001",
                "sold_on": "2026-10-01"
              }
            ]
          }
        ],
        "properties": {
          "lines": {
            "description": "Up to 1000 lines per call.",
            "items": {
              "$ref": "#/components/schemas/SalesLineIn"
            },
            "maxItems": 1000,
            "minItems": 1,
            "title": "Lines",
            "type": "array"
          }
        },
        "required": [
          "lines"
        ],
        "title": "SalesPushIn",
        "type": "object"
      },
      "SalesFilters": {
        "properties": {
          "cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Opaque cursor from `next_cursor` of the previous page.",
            "title": "Cursor"
          },
          "limit": {
            "default": 50,
            "description": "Items per page (1-200).",
            "maximum": 200,
            "minimum": 1,
            "title": "Limit",
            "type": "integer"
          },
          "sold_from": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "First day (inclusive).",
            "title": "Sold From"
          },
          "sold_to": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Last day (inclusive).",
            "title": "Sold To"
          },
          "sku": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sku"
          },
          "legal_entity_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Legal Entity Id"
          },
          "source": {
            "default": "all",
            "description": "api = only lines pushed through this API.",
            "enum": [
              "api",
              "all"
            ],
            "title": "Source",
            "type": "string"
          }
        },
        "title": "SalesFilters",
        "type": "object"
      },
      "SalesLineOut": {
        "properties": {
          "id": {
            "examples": [
              "0199f5a2-7c1e-7b4a-9d0e-3f6c2a1b8e44"
            ],
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "external_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Your id (lines pushed through the API).",
            "title": "External Id"
          },
          "source": {
            "description": "Where the line came from: api, csv, odoo, shopify, picqer.",
            "title": "Source",
            "type": "string"
          },
          "sku": {
            "title": "Sku",
            "type": "string"
          },
          "product_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Matched product; null = unknown SKU.",
            "title": "Product Id"
          },
          "legal_entity_id": {
            "format": "uuid",
            "title": "Legal Entity Id",
            "type": "string"
          },
          "sold_on": {
            "format": "date",
            "title": "Sold On",
            "type": "string"
          },
          "kind": {
            "enum": [
              "sale",
              "return"
            ],
            "title": "Kind",
            "type": "string"
          },
          "quantity": {
            "title": "Quantity",
            "type": "integer"
          },
          "ship_from_country": {
            "title": "Ship From Country",
            "type": "string"
          },
          "ship_to_country": {
            "title": "Ship To Country",
            "type": "string"
          },
          "channel": {
            "title": "Channel",
            "type": "string"
          },
          "marketplace": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Marketplace"
          },
          "buyer_type": {
            "title": "Buyer Type",
            "type": "string"
          },
          "fulfilment": {
            "title": "Fulfilment",
            "type": "string"
          }
        },
        "required": [
          "id",
          "source",
          "sku",
          "legal_entity_id",
          "sold_on",
          "kind",
          "quantity",
          "ship_from_country",
          "ship_to_country",
          "channel",
          "buyer_type",
          "fulfilment"
        ],
        "title": "SalesLineOut",
        "type": "object"
      },
      "SalesPage": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/SalesLineOut"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Pass as `cursor` to get the next page; null on the last page.",
            "examples": [
              "WyIwMTk5ZjVhMi03YzFlLTdiNGEtOWQwZS0zZjZjMmExYjhlNDQiXQ"
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "SalesPage",
        "type": "object"
      },
      "ObligationFilters": {
        "properties": {
          "cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Opaque cursor from `next_cursor` of the previous page.",
            "title": "Cursor"
          },
          "limit": {
            "default": 50,
            "description": "Items per page (1-200).",
            "maximum": 200,
            "minimum": 1,
            "title": "Limit",
            "type": "integer"
          },
          "legal_entity_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Legal Entity Id"
          },
          "jurisdiction": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "examples": [
              "NL"
            ],
            "title": "Jurisdiction"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          }
        },
        "title": "ObligationFilters",
        "type": "object"
      },
      "ObligationOut": {
        "properties": {
          "id": {
            "examples": [
              "0199f5a2-7c1e-7b4a-9d0e-3f6c2a1b8e44"
            ],
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "legal_entity_id": {
            "format": "uuid",
            "title": "Legal Entity Id",
            "type": "string"
          },
          "jurisdiction": {
            "examples": [
              "NL"
            ],
            "title": "Jurisdiction",
            "type": "string"
          },
          "regime": {
            "examples": [
              "epr.packaging"
            ],
            "title": "Regime",
            "type": "string"
          },
          "scope": {
            "title": "Scope",
            "type": "string"
          },
          "status": {
            "description": "Shown status (see years for every derived year).",
            "examples": [
              "needed"
            ],
            "title": "Status",
            "type": "string"
          },
          "status_source": {
            "description": "rule = derived; user = overridden by a person.",
            "title": "Status Source",
            "type": "string"
          },
          "status_reason": {
            "title": "Status Reason",
            "type": "string"
          },
          "status_year": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status Year"
          },
          "since": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Since"
          },
          "pack_version": {
            "title": "Pack Version",
            "type": "string"
          },
          "years": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/ObligationYearOut"
            },
            "title": "Years",
            "type": "array"
          }
        },
        "required": [
          "id",
          "legal_entity_id",
          "jurisdiction",
          "regime",
          "scope",
          "status",
          "status_source",
          "status_reason",
          "pack_version"
        ],
        "title": "ObligationOut",
        "type": "object"
      },
      "ObligationPage": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/ObligationOut"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Pass as `cursor` to get the next page; null on the last page.",
            "examples": [
              "WyIwMTk5ZjVhMi03YzFlLTdiNGEtOWQwZS0zZjZjMmExYjhlNDQiXQ"
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "ObligationPage",
        "type": "object"
      },
      "ObligationYearOut": {
        "properties": {
          "year": {
            "title": "Year",
            "type": "integer"
          },
          "status": {
            "description": "needed, not_needed, unknown, ... for that year.",
            "title": "Status",
            "type": "string"
          },
          "reason_code": {
            "description": "Stable code of the rule outcome.",
            "title": "Reason Code",
            "type": "string"
          },
          "reason_params": {
            "additionalProperties": true,
            "default": {},
            "title": "Reason Params",
            "type": "object"
          },
          "status_reason": {
            "description": "The reason in English.",
            "title": "Status Reason",
            "type": "string"
          },
          "rule_key": {
            "description": "Knowledge-pack rule the status rests on.",
            "title": "Rule Key",
            "type": "string"
          },
          "verified": {
            "description": "The rule and its figures are verified against sources.",
            "title": "Verified",
            "type": "boolean"
          }
        },
        "required": [
          "year",
          "status",
          "reason_code",
          "status_reason",
          "rule_key",
          "verified"
        ],
        "title": "ObligationYearOut",
        "type": "object"
      },
      "PeriodFilters": {
        "properties": {
          "cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Opaque cursor from `next_cursor` of the previous page.",
            "title": "Cursor"
          },
          "limit": {
            "default": 50,
            "description": "Items per page (1-200).",
            "maximum": 200,
            "minimum": 1,
            "title": "Limit",
            "type": "integer"
          },
          "legal_entity_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Legal Entity Id"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          }
        },
        "title": "PeriodFilters",
        "type": "object"
      },
      "PeriodOut": {
        "properties": {
          "id": {
            "examples": [
              "0199f5a2-7c1e-7b4a-9d0e-3f6c2a1b8e44"
            ],
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "legal_entity_id": {
            "format": "uuid",
            "title": "Legal Entity Id",
            "type": "string"
          },
          "jurisdiction": {
            "examples": [
              "NL"
            ],
            "title": "Jurisdiction",
            "type": "string"
          },
          "scheme": {
            "examples": [
              "verpact"
            ],
            "title": "Scheme",
            "type": "string"
          },
          "report_type": {
            "examples": [
              "declaration"
            ],
            "title": "Report Type",
            "type": "string"
          },
          "cadence": {
            "examples": [
              "yearly"
            ],
            "title": "Cadence",
            "type": "string"
          },
          "starts_on": {
            "format": "date",
            "title": "Starts On",
            "type": "string"
          },
          "ends_on": {
            "format": "date",
            "title": "Ends On",
            "type": "string"
          },
          "status": {
            "description": "open, review, closed, filed or reopened.",
            "title": "Status",
            "type": "string"
          },
          "closed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Closed At"
          }
        },
        "required": [
          "id",
          "legal_entity_id",
          "jurisdiction",
          "scheme",
          "report_type",
          "cadence",
          "starts_on",
          "ends_on",
          "status"
        ],
        "title": "PeriodOut",
        "type": "object"
      },
      "PeriodPage": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/PeriodOut"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Pass as `cursor` to get the next page; null on the last page.",
            "examples": [
              "WyIwMTk5ZjVhMi03YzFlLTdiNGEtOWQwZS0zZjZjMmExYjhlNDQiXQ"
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "PeriodPage",
        "type": "object"
      },
      "PeriodTotalsOut": {
        "properties": {
          "period": {
            "$ref": "#/components/schemas/PeriodOut"
          },
          "built_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "When the ledger was last built; null = never.",
            "title": "Built At"
          },
          "stale": {
            "description": "Facts or packaging changed since the last build.",
            "title": "Stale",
            "type": "boolean"
          },
          "blockers": {
            "description": "Why the period could not be closed right now (codes).",
            "items": {
              "type": "string"
            },
            "title": "Blockers",
            "type": "array"
          },
          "unknown_skus": {
            "title": "Unknown Skus",
            "type": "integer"
          },
          "unconfirmed_products": {
            "title": "Unconfirmed Products",
            "type": "integer"
          },
          "totals": {
            "items": {
              "$ref": "#/components/schemas/TotalOut"
            },
            "title": "Totals",
            "type": "array"
          },
          "declared": {
            "description": "What a pack made from this build would declare (scheme lines).",
            "title": "Declared"
          }
        },
        "required": [
          "period",
          "stale",
          "blockers",
          "unknown_skus",
          "unconfirmed_products",
          "totals"
        ],
        "title": "PeriodTotalsOut",
        "type": "object"
      },
      "TotalOut": {
        "properties": {
          "kind": {
            "description": "product, packaging, parcel_packaging or adjustment.",
            "title": "Kind",
            "type": "string"
          },
          "material": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Material"
          },
          "household": {
            "title": "Household",
            "type": "boolean"
          },
          "obligated_party": {
            "title": "Obligated Party",
            "type": "string"
          },
          "exclusion": {
            "title": "Exclusion",
            "type": "string"
          },
          "fact_kind": {
            "title": "Fact Kind",
            "type": "string"
          },
          "quantity": {
            "title": "Quantity",
            "type": "integer"
          },
          "mass_mg": {
            "title": "Mass Mg",
            "type": "integer"
          },
          "size_class": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Size Class"
          },
          "parcels": {
            "default": 0,
            "title": "Parcels",
            "type": "integer"
          }
        },
        "required": [
          "kind",
          "household",
          "obligated_party",
          "exclusion",
          "fact_kind",
          "quantity",
          "mass_mg"
        ],
        "title": "TotalOut",
        "type": "object"
      },
      "ExplainEntryOut": {
        "properties": {
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "kind": {
            "enum": [
              "product",
              "packaging",
              "parcel_packaging",
              "adjustment"
            ],
            "title": "Kind",
            "type": "string"
          },
          "fact_kind": {
            "enum": [
              "sale",
              "return"
            ],
            "title": "Fact Kind",
            "type": "string"
          },
          "product_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Product Id"
          },
          "sku": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Sku"
          },
          "packaging_item_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Packaging Item Id"
          },
          "packaging_item_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Packaging Item Name"
          },
          "material": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Material"
          },
          "household": {
            "title": "Household",
            "type": "boolean"
          },
          "in_parcel": {
            "title": "In Parcel",
            "type": "boolean"
          },
          "channel": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Channel"
          },
          "obligated_party": {
            "title": "Obligated Party",
            "type": "string"
          },
          "exclusion": {
            "title": "Exclusion",
            "type": "string"
          },
          "size_class": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Size Class"
          },
          "quantity": {
            "title": "Quantity",
            "type": "integer"
          },
          "mass_mg": {
            "title": "Mass Mg",
            "type": "integer"
          },
          "parcels": {
            "title": "Parcels",
            "type": "integer"
          },
          "packaging_line_ids": {
            "default": [],
            "description": "Packaging lines that fed this entry.",
            "items": {
              "format": "uuid",
              "type": "string"
            },
            "title": "Packaging Line Ids",
            "type": "array"
          },
          "sales": {
            "default": [],
            "description": "Sales facts per month that fed this entry.",
            "items": {
              "$ref": "#/components/schemas/ExplainSalesOut"
            },
            "title": "Sales",
            "type": "array"
          },
          "parcel_facts": {
            "default": [],
            "description": "Parcel facts per month (parcel entries).",
            "items": {
              "$ref": "#/components/schemas/ExplainParcelsOut"
            },
            "title": "Parcel Facts",
            "type": "array"
          }
        },
        "required": [
          "id",
          "kind",
          "fact_kind",
          "household",
          "in_parcel",
          "obligated_party",
          "exclusion",
          "quantity",
          "mass_mg",
          "parcels"
        ],
        "title": "ExplainEntryOut",
        "type": "object"
      },
      "ExplainLineOut": {
        "properties": {
          "key": {
            "description": "The pack line key, e.g. `paper.household`.",
            "examples": [
              "paper.household"
            ],
            "title": "Key",
            "type": "string"
          },
          "label": {
            "description": "The line's label as the scheme calculator names it.",
            "title": "Label",
            "type": "string"
          },
          "value": {
            "description": "The line's value as a decimal string.",
            "examples": [
              "27.580"
            ],
            "title": "Value",
            "type": "string"
          },
          "unit": {
            "enum": [
              "kg",
              "units",
              "parcels"
            ],
            "title": "Unit",
            "type": "string"
          },
          "returns_netting": {
            "description": "Returns are netted in this scheme (negative entries).",
            "title": "Returns Netting",
            "type": "boolean"
          }
        },
        "required": [
          "key",
          "label",
          "value",
          "unit",
          "returns_netting"
        ],
        "title": "ExplainLineOut",
        "type": "object"
      },
      "ExplainPackagingLineOut": {
        "properties": {
          "line_id": {
            "description": "The packaging line that was used (as it was at the ledger build).",
            "format": "uuid",
            "title": "Line Id",
            "type": "string"
          },
          "layer": {
            "default": "",
            "description": "sales, grouped or transport.",
            "title": "Layer",
            "type": "string"
          },
          "quantity": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Parts per sales unit at the build.",
            "title": "Quantity"
          },
          "valid_from": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "First day of the line version used (inclusive).",
            "title": "Valid From"
          },
          "valid_to": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "End of the line version used (exclusive).",
            "title": "Valid To"
          },
          "inherited": {
            "description": "The line is the product group's (the product had no own line).",
            "title": "Inherited",
            "type": "boolean"
          },
          "group_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The group the line was inherited from.",
            "title": "Group Id"
          },
          "group_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group Name"
          },
          "exists": {
            "description": "The line still exists (false: deleted after the build).",
            "title": "Exists",
            "type": "boolean"
          },
          "item_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Item Id"
          },
          "item_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Item Name"
          },
          "state": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "proposed or confirmed (now).",
            "title": "State"
          },
          "source": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Where the line came from (manual, csv, shopify, api, ...).",
            "title": "Source"
          },
          "source_ref": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Which record of that source.",
            "title": "Source Ref"
          },
          "evidence_count": {
            "default": 0,
            "description": "Evidence files on the line and on its packaging item.",
            "title": "Evidence Count",
            "type": "integer"
          }
        },
        "required": [
          "line_id",
          "inherited",
          "exists"
        ],
        "title": "ExplainPackagingLineOut",
        "type": "object"
      },
      "ExplainParcelsOut": {
        "properties": {
          "month": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "YYYY-MM.",
            "title": "Month"
          },
          "facts": {
            "description": "Parcel facts (monthly counts) behind it.",
            "title": "Facts",
            "type": "integer"
          },
          "parcels": {
            "title": "Parcels",
            "type": "integer"
          },
          "parcel_profile_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parcel Profile Id"
          },
          "parcel_profile_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parcel Profile Name"
          }
        },
        "required": [
          "facts",
          "parcels"
        ],
        "title": "ExplainParcelsOut",
        "type": "object"
      },
      "ExplainProductOut": {
        "properties": {
          "product_id": {
            "format": "uuid",
            "title": "Product Id",
            "type": "string"
          },
          "sku": {
            "title": "Sku",
            "type": "string"
          },
          "title": {
            "title": "Title",
            "type": "string"
          },
          "group_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group Id"
          },
          "group_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Group Name"
          },
          "entries": {
            "description": "Ledger entries of this product in the line.",
            "title": "Entries",
            "type": "integer"
          },
          "mass_mg": {
            "description": "This product's share of the line, milligrams.",
            "title": "Mass Mg",
            "type": "integer"
          },
          "packaging_lines": {
            "items": {
              "$ref": "#/components/schemas/ExplainPackagingLineOut"
            },
            "title": "Packaging Lines",
            "type": "array"
          },
          "sales": {
            "description": "Sales behind this product's share, per month/channel.",
            "items": {
              "$ref": "#/components/schemas/ExplainSalesOut"
            },
            "title": "Sales",
            "type": "array"
          }
        },
        "required": [
          "product_id",
          "sku",
          "title",
          "entries",
          "mass_mg",
          "packaging_lines",
          "sales"
        ],
        "title": "ExplainProductOut",
        "type": "object"
      },
      "ExplainSalesOut": {
        "properties": {
          "month": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "YYYY-MM.",
            "examples": [
              "2026-03"
            ],
            "title": "Month"
          },
          "channel": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Channel"
          },
          "fact_kind": {
            "enum": [
              "sale",
              "return"
            ],
            "title": "Fact Kind",
            "type": "string"
          },
          "facts": {
            "description": "Sales lines (facts) behind it.",
            "title": "Facts",
            "type": "integer"
          },
          "units": {
            "description": "Sales units behind it.",
            "title": "Units",
            "type": "integer"
          }
        },
        "required": [
          "fact_kind",
          "facts",
          "units"
        ],
        "title": "ExplainSalesOut",
        "type": "object"
      },
      "ExplainTotalOut": {
        "properties": {
          "period_id": {
            "format": "uuid",
            "title": "Period Id",
            "type": "string"
          },
          "period_status": {
            "enum": [
              "open",
              "review",
              "closed",
              "filed",
              "reopened"
            ],
            "title": "Period Status",
            "type": "string"
          },
          "line": {
            "$ref": "#/components/schemas/ExplainLineOut"
          },
          "entry_match": {
            "description": "How entries were matched to the line: indexes (by the calculator) or material.",
            "title": "Entry Match",
            "type": "string"
          },
          "traced": {
            "description": "Lineage was recorded at the build (false: built before; rebuild the period).",
            "title": "Traced",
            "type": "boolean"
          },
          "entries": {
            "items": {
              "$ref": "#/components/schemas/ExplainEntryOut"
            },
            "title": "Entries",
            "type": "array"
          },
          "products": {
            "description": "Products behind the line, largest share first.",
            "items": {
              "$ref": "#/components/schemas/ExplainProductOut"
            },
            "title": "Products",
            "type": "array"
          },
          "parcels": {
            "default": [],
            "description": "Parcel facts behind parcel packaging entries.",
            "items": {
              "$ref": "#/components/schemas/ExplainParcelsOut"
            },
            "title": "Parcels",
            "type": "array"
          }
        },
        "required": [
          "period_id",
          "period_status",
          "line",
          "entry_match",
          "traced",
          "entries",
          "products"
        ],
        "title": "ExplainTotalOut",
        "type": "object"
      },
      "PackFilters": {
        "properties": {
          "cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Opaque cursor from `next_cursor` of the previous page.",
            "title": "Cursor"
          },
          "limit": {
            "default": 50,
            "description": "Items per page (1-200).",
            "maximum": 200,
            "minimum": 1,
            "title": "Limit",
            "type": "integer"
          },
          "period_id": {
            "anyOf": [
              {
                "format": "uuid",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Period Id"
          },
          "status": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Status"
          }
        },
        "title": "PackFilters",
        "type": "object"
      },
      "PackOut": {
        "properties": {
          "id": {
            "examples": [
              "0199f5a2-7c1e-7b4a-9d0e-3f6c2a1b8e44"
            ],
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "period_id": {
            "format": "uuid",
            "title": "Period Id",
            "type": "string"
          },
          "scheme": {
            "title": "Scheme",
            "type": "string"
          },
          "report_type": {
            "title": "Report Type",
            "type": "string"
          },
          "kind": {
            "description": "original or amendment.",
            "title": "Kind",
            "type": "string"
          },
          "status": {
            "description": "draft, ready, approved or filed.",
            "title": "Status",
            "type": "string"
          },
          "format": {
            "title": "Format",
            "type": "string"
          },
          "has_file": {
            "title": "Has File",
            "type": "boolean"
          },
          "approved_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Approved At"
          },
          "filed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Filed At"
          },
          "filing_ref": {
            "default": "",
            "title": "Filing Ref",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          }
        },
        "required": [
          "id",
          "period_id",
          "scheme",
          "report_type",
          "kind",
          "status",
          "format",
          "has_file",
          "created_at"
        ],
        "title": "PackOut",
        "type": "object"
      },
      "PackPage": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/PackOut"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Pass as `cursor` to get the next page; null on the last page.",
            "examples": [
              "WyIwMTk5ZjVhMi03YzFlLTdiNGEtOWQwZS0zZjZjMmExYjhlNDQiXQ"
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items"
        ],
        "title": "PackPage",
        "type": "object"
      },
      "PackDetailOut": {
        "properties": {
          "id": {
            "examples": [
              "0199f5a2-7c1e-7b4a-9d0e-3f6c2a1b8e44"
            ],
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "period_id": {
            "format": "uuid",
            "title": "Period Id",
            "type": "string"
          },
          "scheme": {
            "title": "Scheme",
            "type": "string"
          },
          "report_type": {
            "title": "Report Type",
            "type": "string"
          },
          "kind": {
            "description": "original or amendment.",
            "title": "Kind",
            "type": "string"
          },
          "status": {
            "description": "draft, ready, approved or filed.",
            "title": "Status",
            "type": "string"
          },
          "format": {
            "title": "Format",
            "type": "string"
          },
          "has_file": {
            "title": "Has File",
            "type": "boolean"
          },
          "approved_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Approved At"
          },
          "filed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Filed At"
          },
          "filing_ref": {
            "default": "",
            "title": "Filing Ref",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "lines": {
            "default": [],
            "items": {
              "$ref": "#/components/schemas/PackLineOut"
            },
            "title": "Lines",
            "type": "array"
          }
        },
        "required": [
          "id",
          "period_id",
          "scheme",
          "report_type",
          "kind",
          "status",
          "format",
          "has_file",
          "created_at"
        ],
        "title": "PackDetailOut",
        "type": "object"
      },
      "PackLineOut": {
        "properties": {
          "line_no": {
            "title": "Line No",
            "type": "integer"
          },
          "key": {
            "examples": [
              "paper.household"
            ],
            "title": "Key",
            "type": "string"
          },
          "label": {
            "title": "Label",
            "type": "string"
          },
          "value": {
            "description": "kg with three decimals; counts as whole numbers.",
            "title": "Value",
            "type": "string"
          },
          "unit": {
            "enum": [
              "kg",
              "units",
              "parcels"
            ],
            "title": "Unit",
            "type": "string"
          }
        },
        "required": [
          "line_no",
          "key",
          "label",
          "value",
          "unit"
        ],
        "title": "PackLineOut",
        "type": "object"
      },
      "DownloadOut": {
        "properties": {
          "url": {
            "description": "Short-lived signed URL; GET it without the Authorization header.",
            "title": "Url",
            "type": "string"
          },
          "filename": {
            "title": "Filename",
            "type": "string"
          },
          "expires_in": {
            "description": "Seconds until the URL stops working.",
            "title": "Expires In",
            "type": "integer"
          }
        },
        "required": [
          "url",
          "filename",
          "expires_in"
        ],
        "title": "DownloadOut",
        "type": "object"
      },
      "PartnerWhoAmIOut": {
        "description": "GET /partner: the partner of this key and the key itself.",
        "properties": {
          "id": {
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "kind": {
            "enum": [
              "accountant",
              "integrator",
              "provider"
            ],
            "title": "Kind",
            "type": "string"
          },
          "status": {
            "enum": [
              "pending",
              "active",
              "suspended"
            ],
            "title": "Status",
            "type": "string"
          },
          "country": {
            "title": "Country",
            "type": "string"
          },
          "token_name": {
            "title": "Token Name",
            "type": "string"
          },
          "token_prefix": {
            "title": "Token Prefix",
            "type": "string"
          },
          "scopes": {
            "description": "Partner scopes in force now (data scopes apply per client)",
            "items": {
              "type": "string"
            },
            "title": "Scopes",
            "type": "array"
          },
          "key_scopes": {
            "description": "All scopes of the key",
            "items": {
              "type": "string"
            },
            "title": "Key Scopes",
            "type": "array"
          }
        },
        "required": [
          "id",
          "name",
          "kind",
          "status",
          "country",
          "token_name",
          "token_prefix",
          "scopes",
          "key_scopes"
        ],
        "title": "PartnerWhoAmIOut",
        "type": "object"
      },
      "ClientCompanyOut": {
        "properties": {
          "name": {
            "title": "Name",
            "type": "string"
          },
          "country": {
            "title": "Country",
            "type": "string"
          }
        },
        "required": [
          "name",
          "country"
        ],
        "title": "ClientCompanyOut",
        "type": "object"
      },
      "ClientCursorPage": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/ClientOut"
            },
            "title": "Items",
            "type": "array"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Next Cursor"
          }
        },
        "required": [
          "items",
          "next_cursor"
        ],
        "title": "ClientCursorPage",
        "type": "object"
      },
      "ClientOut": {
        "properties": {
          "id": {
            "description": "The client's account id (send it as EuroPlaybook-Account)",
            "format": "uuid",
            "title": "Id",
            "type": "string"
          },
          "account_id": {
            "format": "uuid",
            "title": "Account Id",
            "type": "string"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "status": {
            "description": "invited = the owner has not accepted yet; active = joined",
            "enum": [
              "invited",
              "active"
            ],
            "title": "Status",
            "type": "string"
          },
          "owner_email": {
            "title": "Owner Email",
            "type": "string"
          },
          "owner_joined": {
            "title": "Owner Joined",
            "type": "boolean"
          },
          "accepted_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Accepted At"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "company": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ClientCompanyOut"
              },
              {
                "type": "null"
              }
            ]
          },
          "owner_invite": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/OwnerInviteOut"
              },
              {
                "type": "null"
              }
            ],
            "description": "The open owner invite, while not accepted"
          },
          "last_activity_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Last Activity At"
          }
        },
        "required": [
          "id",
          "account_id",
          "name",
          "status",
          "owner_email",
          "owner_joined",
          "accepted_at",
          "created_at"
        ],
        "title": "ClientOut",
        "type": "object"
      },
      "OwnerInviteOut": {
        "properties": {
          "email": {
            "title": "Email",
            "type": "string"
          },
          "sent_at": {
            "format": "date-time",
            "title": "Sent At",
            "type": "string"
          },
          "expires_at": {
            "format": "date-time",
            "title": "Expires At",
            "type": "string"
          },
          "expired": {
            "title": "Expired",
            "type": "boolean"
          }
        },
        "required": [
          "email",
          "sent_at",
          "expires_at",
          "expired"
        ],
        "title": "OwnerInviteOut",
        "type": "object"
      },
      "AddressIn": {
        "description": "Business address of a legal entity (never a consumer address).",
        "properties": {
          "line1": {
            "default": "",
            "title": "Line1",
            "type": "string"
          },
          "line2": {
            "default": "",
            "title": "Line2",
            "type": "string"
          },
          "postal_code": {
            "default": "",
            "title": "Postal Code",
            "type": "string"
          },
          "city": {
            "default": "",
            "title": "City",
            "type": "string"
          },
          "country": {
            "default": "",
            "title": "Country",
            "type": "string"
          }
        },
        "title": "AddressIn",
        "type": "object"
      },
      "ClientIn": {
        "properties": {
          "company": {
            "$ref": "#/components/schemas/LegalEntityIn",
            "description": "The client's first company (legal entity)"
          },
          "owner_email": {
            "description": "The brand owner: gets an invite to accept the account",
            "maxLength": 254,
            "title": "Owner Email",
            "type": "string"
          },
          "language": {
            "anyOf": [
              {
                "enum": [
                  "nl",
                  "en"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Language of the invite mail",
            "title": "Language"
          },
          "account_name": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Default: the company name",
            "title": "Account Name"
          }
        },
        "required": [
          "company",
          "owner_email"
        ],
        "title": "ClientIn",
        "type": "object"
      },
      "LegalEntityIn": {
        "properties": {
          "name": {
            "maxLength": 200,
            "minLength": 1,
            "title": "Name",
            "type": "string"
          },
          "legal_form": {
            "default": "",
            "maxLength": 50,
            "title": "Legal Form",
            "type": "string"
          },
          "country": {
            "title": "Country",
            "type": "string"
          },
          "registry_type": {
            "default": "other",
            "enum": [
              "kvk",
              "kbo",
              "hrb",
              "siren",
              "companies_house",
              "other"
            ],
            "title": "Registry Type",
            "type": "string"
          },
          "registry_id": {
            "default": "",
            "maxLength": 50,
            "title": "Registry Id",
            "type": "string"
          },
          "vat_number": {
            "default": "",
            "maxLength": 20,
            "title": "Vat Number",
            "type": "string"
          },
          "address": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AddressIn"
              },
              {
                "type": "null"
              }
            ]
          },
          "is_default": {
            "default": false,
            "title": "Is Default",
            "type": "boolean"
          }
        },
        "required": [
          "name",
          "country"
        ],
        "title": "LegalEntityIn",
        "type": "object"
      }
    },
    "securitySchemes": {
      "BearerTokenAuth": {
        "type": "http",
        "bearerFormat": "ep_<prefix>_<secret>",
        "scheme": "bearer"
      }
    }
  },
  "servers": [
    {
      "url": "https://api.europlaybook.com/v1",
      "description": "Production"
    }
  ]
}
