{
  "components": {
    "schemas": {
      "Body_partner_mint_batch_v1_partner_mint_batch_post": {
        "properties": {
          "file": {
            "anyOf": [
              {
                "contentMediaType": "application/octet-stream",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "File"
          }
        },
        "title": "Body_partner_mint_batch_v1_partner_mint_batch_post",
        "type": "object"
      },
      "BrandOfferSet": {
        "additionalProperties": false,
        "properties": {
          "confirm_pieces_kept": {
            "default": false,
            "description": "Required when a brand that has pieces moves to 'compliance': every piece is kept with its identity (claim, transfer, NFC reading, repair request), and only new pieces, NFC encoding orders and new purchase codes stop.",
            "title": "Confirm Pieces Kept",
            "type": "boolean"
          },
          "offer": {
            "description": "'compliance' or 'compliance_identity'.",
            "maxLength": 32,
            "title": "Offer",
            "type": "string"
          }
        },
        "required": [
          "offer"
        ],
        "title": "BrandOfferSet",
        "type": "object"
      },
      "CatalogBatchUpsert": {
        "additionalProperties": false,
        "properties": {
          "batch_code": {
            "maxLength": 100,
            "minLength": 1,
            "title": "Batch Code",
            "type": "string"
          },
          "country_of_origin": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Country Of Origin"
          },
          "manufacturing_site": {
            "anyOf": [
              {
                "maxLength": 255,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Manufacturing Site"
          },
          "model_sku": {
            "maxLength": 100,
            "minLength": 1,
            "title": "Model Sku",
            "type": "string"
          },
          "notes": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Notes"
          },
          "production_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Production Date"
          },
          "quantity_planned": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Quantity Planned"
          }
        },
        "required": [
          "batch_code",
          "model_sku"
        ],
        "title": "CatalogBatchUpsert",
        "type": "object"
      },
      "CatalogModelUpsert": {
        "additionalProperties": false,
        "properties": {
          "category_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Category Id"
          },
          "commodity_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Commodity Code"
          },
          "customs_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Customs Description"
          },
          "default_warranty_months": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Warranty Months"
          },
          "default_warranty_terms": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Warranty Terms"
          },
          "default_warranty_transferable": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Warranty Transferable"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description"
          },
          "dimensions_json": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Dimensions Json"
          },
          "disassembly_instructions_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Disassembly Instructions Url"
          },
          "gtin": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Gtin"
          },
          "identity_level": {
            "anyOf": [
              {
                "const": "unit",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Identity Level"
          },
          "maintenance_instructions_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Maintenance Instructions Url"
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Name"
          },
          "playbook_key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Playbook Key"
          },
          "primary_image_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Primary Image Url"
          },
          "repair_instructions_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Repair Instructions Url"
          },
          "safety_instructions_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Safety Instructions Url"
          },
          "sku": {
            "maxLength": 100,
            "minLength": 1,
            "title": "Sku",
            "type": "string"
          },
          "spare_parts_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Spare Parts Url"
          },
          "specifications": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Specifications"
          },
          "user_manual_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User Manual Url"
          },
          "volume_cm3": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Volume Cm3"
          },
          "weight_grams": {
            "anyOf": [
              {
                "minimum": 0.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Weight Grams"
          },
          "weight_unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Weight Unit"
          }
        },
        "required": [
          "sku"
        ],
        "title": "CatalogModelUpsert",
        "type": "object"
      },
      "CatalogPassportPreview": {
        "additionalProperties": false,
        "properties": {
          "data": {
            "additionalProperties": true,
            "title": "Data",
            "type": "object"
          }
        },
        "title": "CatalogPassportPreview",
        "type": "object"
      },
      "CatalogPassportUpsert": {
        "additionalProperties": false,
        "properties": {
          "batch_code": {
            "anyOf": [
              {
                "maxLength": 100,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Batch Code"
          },
          "data": {
            "additionalProperties": true,
            "title": "Data",
            "type": "object"
          },
          "notes": {
            "anyOf": [
              {
                "maxLength": 2000,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Notes"
          },
          "only_if_draft": {
            "default": false,
            "title": "Only If Draft",
            "type": "boolean"
          },
          "sku": {
            "maxLength": 100,
            "minLength": 1,
            "title": "Sku",
            "type": "string"
          }
        },
        "required": [
          "sku"
        ],
        "title": "CatalogPassportUpsert",
        "type": "object"
      },
      "ClaimCodeIssueRequest": {
        "additionalProperties": false,
        "properties": {
          "pieces": {
            "description": "The pieces, 500 at most per call.",
            "items": {
              "$ref": "#/components/schemas/PieceRef"
            },
            "maxItems": 500,
            "minItems": 1,
            "title": "Pieces",
            "type": "array"
          },
          "replace_used": {
            "default": false,
            "description": "A piece whose code was already used to claim it is refused (409 PURCHASE_CODE_ALREADY_USED) unless this is true.",
            "title": "Replace Used",
            "type": "boolean"
          }
        },
        "required": [
          "pieces"
        ],
        "title": "ClaimCodeIssueRequest",
        "type": "object"
      },
      "ClaimCodeIssueResponse": {
        "properties": {
          "brand_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Brand Code"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/IssuedCode"
            },
            "title": "Items",
            "type": "array"
          },
          "shown_once": {
            "default": true,
            "description": "Always true: the codes cannot be read back",
            "title": "Shown Once",
            "type": "boolean"
          }
        },
        "required": [
          "brand_code",
          "items"
        ],
        "title": "ClaimCodeIssueResponse",
        "type": "object"
      },
      "ClaimCodeStatusRequest": {
        "additionalProperties": false,
        "properties": {
          "pieces": {
            "description": "The pieces, 500 at most per call.",
            "items": {
              "$ref": "#/components/schemas/PieceRef"
            },
            "maxItems": 500,
            "minItems": 1,
            "title": "Pieces",
            "type": "array"
          }
        },
        "required": [
          "pieces"
        ],
        "title": "ClaimCodeStatusRequest",
        "type": "object"
      },
      "ClaimCodeStatusResponse": {
        "properties": {
          "brand_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Brand Code"
          },
          "items": {
            "items": {
              "$ref": "#/components/schemas/CodeStatus"
            },
            "title": "Items",
            "type": "array"
          }
        },
        "required": [
          "brand_code",
          "items"
        ],
        "title": "ClaimCodeStatusResponse",
        "type": "object"
      },
      "CodeStatus": {
        "properties": {
          "issued_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Issued At"
          },
          "serial": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Serial"
          },
          "status": {
            "description": "none, live or used",
            "title": "Status",
            "type": "string"
          },
          "token_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Token Id"
          },
          "used_at": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Used At"
          }
        },
        "required": [
          "status"
        ],
        "title": "CodeStatus",
        "type": "object"
      },
      "CodedRefusal": {
        "additionalProperties": true,
        "properties": {
          "code": {
            "description": "The machine code of the refusal",
            "title": "Code",
            "type": "string"
          },
          "message": {
            "description": "What to change, in English",
            "title": "Message",
            "type": "string"
          }
        },
        "required": [
          "code",
          "message"
        ],
        "title": "CodedRefusal",
        "type": "object"
      },
      "DistributorOut": {
        "properties": {
          "code": {
            "title": "Code",
            "type": "string"
          },
          "country": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Country"
          },
          "id": {
            "title": "Id",
            "type": "integer"
          },
          "name": {
            "title": "Name",
            "type": "string"
          },
          "territory_countries": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Territory Countries"
          }
        },
        "required": [
          "id",
          "code",
          "name"
        ],
        "title": "DistributorOut",
        "type": "object"
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "title": "Detail",
            "type": "array"
          }
        },
        "title": "HTTPValidationError",
        "type": "object"
      },
      "IssuedCode": {
        "properties": {
          "code": {
            "description": "The purchase code. Shown ONCE: store or print it now.",
            "title": "Code",
            "type": "string"
          },
          "previous_status": {
            "description": "What the piece had before: none, live (now void) or used",
            "title": "Previous Status",
            "type": "string"
          },
          "serial": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The piece's serial",
            "title": "Serial"
          },
          "token_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The piece's on-chain token id",
            "title": "Token Id"
          }
        },
        "required": [
          "code",
          "previous_status"
        ],
        "title": "IssuedCode",
        "type": "object"
      },
      "PartnerNfcRequest": {
        "additionalProperties": false,
        "properties": {
          "c": {
            "description": "CMAC",
            "maxLength": 16,
            "minLength": 16,
            "title": "C",
            "type": "string"
          },
          "e": {
            "description": "Encrypted PICC data",
            "maxLength": 32,
            "minLength": 32,
            "title": "E",
            "type": "string"
          },
          "lang": {
            "anyOf": [
              {
                "pattern": "^(fr|en)$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lang"
          },
          "latitude": {
            "anyOf": [
              {
                "maximum": 90.0,
                "minimum": -90.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Latitude"
          },
          "longitude": {
            "anyOf": [
              {
                "maximum": 180.0,
                "minimum": -180.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Longitude"
          },
          "t": {
            "anyOf": [
              {
                "maxLength": 2,
                "minLength": 2,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Tag Tamper seal, sealed tags only",
            "title": "T"
          }
        },
        "required": [
          "e",
          "c"
        ],
        "title": "PartnerNfcRequest",
        "type": "object"
      },
      "PartnerScanRequest": {
        "additionalProperties": false,
        "properties": {
          "latitude": {
            "anyOf": [
              {
                "maximum": 90.0,
                "minimum": -90.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Latitude"
          },
          "longitude": {
            "anyOf": [
              {
                "maximum": 180.0,
                "minimum": -180.0,
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Longitude"
          },
          "serial": {
            "anyOf": [
              {
                "maxLength": 32,
                "minLength": 1,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Serial"
          },
          "uid_hash": {
            "anyOf": [
              {
                "maxLength": 66,
                "minLength": 64,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Uid Hash"
          }
        },
        "title": "PartnerScanRequest",
        "type": "object"
      },
      "PartnerSelloutRequest": {
        "additionalProperties": false,
        "properties": {
          "brand_code": {
            "anyOf": [
              {
                "pattern": "^[0123456789ABCDEFGHJKMNPQRSTVWXYZ0123456789abcdefghjkmnpqrstvwxyz]{10}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The brand the sale belongs to. Omit it for the key's own brand; a reseller key may name one of its client brands. The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "title": "Brand Code"
          },
          "brand_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "deprecated": true,
            "description": "Deprecated: the internal brand number, kept during the transition. Use `brand_code`.",
            "title": "Brand Id"
          },
          "city": {
            "anyOf": [
              {
                "maxLength": 100,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "City"
          },
          "country": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Country"
          },
          "identifier": {
            "description": "uid_hash | token_id | certificate number",
            "maxLength": 200,
            "minLength": 1,
            "title": "Identifier",
            "type": "string"
          },
          "retailer_code": {
            "maxLength": 64,
            "minLength": 1,
            "title": "Retailer Code",
            "type": "string"
          }
        },
        "required": [
          "identifier",
          "retailer_code"
        ],
        "title": "PartnerSelloutRequest",
        "type": "object"
      },
      "PartnerWebhookSubscriptionItem": {
        "properties": {
          "brand_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "title": "Brand Code"
          },
          "brand_id": {
            "deprecated": true,
            "description": "Deprecated: the internal brand number, kept during the transition. Use `brand_code`.",
            "title": "Brand Id",
            "type": "integer"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "event_types": {
            "items": {
              "type": "string"
            },
            "title": "Event Types",
            "type": "array"
          },
          "health": {
            "title": "Health",
            "type": "string"
          },
          "id": {
            "title": "Id",
            "type": "integer"
          },
          "is_active": {
            "title": "Is Active",
            "type": "boolean"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          },
          "url": {
            "title": "Url",
            "type": "string"
          }
        },
        "required": [
          "id",
          "url",
          "event_types",
          "brand_id",
          "is_active",
          "health",
          "created_at",
          "updated_at"
        ],
        "title": "PartnerWebhookSubscriptionItem",
        "type": "object"
      },
      "PieceRef": {
        "additionalProperties": false,
        "properties": {
          "serial": {
            "anyOf": [
              {
                "pattern": "^[0-9A-Za-z]{12}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The piece's 12-character serial, as printed under its QR code.",
            "examples": [
              "Y5T2VGGF2NP9"
            ],
            "title": "Serial"
          },
          "token_id": {
            "anyOf": [
              {
                "pattern": "^[0-9]{1,78}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The piece's on-chain token id, in decimal digits, as a string.",
            "title": "Token Id"
          }
        },
        "title": "PieceRef",
        "type": "object"
      },
      "ReleaseRequest": {
        "additionalProperties": false,
        "properties": {
          "reason": {
            "maxLength": 200,
            "minLength": 1,
            "title": "Reason",
            "type": "string"
          },
          "units": {
            "description": "1 to 1000 units, each as read by the scanner: the 12-character serial printed on the label, the unit's link (https://sealtrust.io/p/{serial}), its GS1 Digital Link (.../01/{gtin}/21/{serial}) or its signed QR link.",
            "items": {
              "type": "string"
            },
            "maxItems": 1000,
            "minItems": 1,
            "title": "Units",
            "type": "array"
          }
        },
        "required": [
          "units",
          "reason"
        ],
        "title": "ReleaseRequest",
        "type": "object"
      },
      "RowIn": {
        "additionalProperties": false,
        "properties": {
          "batch_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Batch Code"
          },
          "brand_code": {
            "anyOf": [
              {
                "pattern": "^[0123456789ABCDEFGHJKMNPQRSTVWXYZ0123456789abcdefghjkmnpqrstvwxyz]{10}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "title": "Brand Code"
          },
          "brand_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "deprecated": true,
            "description": "Deprecated: the internal brand number, kept during the transition. Use `brand_code`.",
            "title": "Brand Id"
          },
          "category_id": {
            "title": "Category Id",
            "type": "integer"
          },
          "external_ref": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "External Ref"
          },
          "metadata_uri": {
            "title": "Metadata Uri",
            "type": "string"
          },
          "model_sku": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Model Sku"
          },
          "product_name": {
            "title": "Product Name",
            "type": "string"
          }
        },
        "required": [
          "product_name",
          "category_id",
          "metadata_uri"
        ],
        "title": "RowIn",
        "type": "object"
      },
      "SelloutResponse": {
        "properties": {
          "activated_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Activated At"
          },
          "activation_id": {
            "title": "Activation Id",
            "type": "integer"
          },
          "product_id": {
            "title": "Product Id",
            "type": "integer"
          },
          "product_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Product Name"
          },
          "retailer_code": {
            "title": "Retailer Code",
            "type": "string"
          },
          "source": {
            "title": "Source",
            "type": "string"
          },
          "status": {
            "description": "activated | already_activated",
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "status",
          "activation_id",
          "product_id",
          "retailer_code",
          "source"
        ],
        "title": "SelloutResponse",
        "type": "object"
      },
      "ShipmentCreateRequest": {
        "additionalProperties": false,
        "properties": {
          "brand_code": {
            "anyOf": [
              {
                "pattern": "^[0123456789ABCDEFGHJKMNPQRSTVWXYZ0123456789abcdefghjkmnpqrstvwxyz]{10}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The brand the shipment belongs to. Omit it for the key's own brand; a reseller key may name one of its client brands. The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "title": "Brand Code"
          },
          "brand_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "deprecated": true,
            "description": "Deprecated: the internal brand number, kept during the transition. Use `brand_code`.",
            "title": "Brand Id"
          },
          "distributor_code": {
            "description": "The code of the distributor (a retailer of type distributor).",
            "maxLength": 64,
            "minLength": 1,
            "title": "Distributor Code",
            "type": "string"
          },
          "order_ref": {
            "description": "Your order number, from your ERP or your logistics provider. Unique per brand: sending the same order again returns the same shipment.",
            "maxLength": 100,
            "minLength": 1,
            "title": "Order Ref",
            "type": "string"
          },
          "ship_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Date the order leaves the warehouse",
            "title": "Ship Date"
          },
          "ship_to_country": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "ISO2 destination. Defaults to the distributor's country.",
            "title": "Ship To Country"
          }
        },
        "required": [
          "order_ref",
          "distributor_code"
        ],
        "title": "ShipmentCreateRequest",
        "type": "object"
      },
      "ShipmentCreated": {
        "properties": {
          "brand_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The brand's public code",
            "title": "Brand Code"
          },
          "brand_id": {
            "deprecated": true,
            "description": "Deprecated: the internal brand number, kept during the transition. Use `brand_code`.",
            "title": "Brand Id",
            "type": "integer"
          },
          "closed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Closed At"
          },
          "created": {
            "description": "False when this order already existed (idempotent)",
            "title": "Created",
            "type": "boolean"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "created_by": {
            "title": "Created By",
            "type": "string"
          },
          "distributor": {
            "$ref": "#/components/schemas/DistributorOut"
          },
          "id": {
            "title": "Id",
            "type": "integer"
          },
          "order_ref": {
            "title": "Order Ref",
            "type": "string"
          },
          "ship_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ship Date"
          },
          "ship_to_country": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ship To Country"
          },
          "status": {
            "description": "open | closed | cancelled",
            "title": "Status",
            "type": "string"
          },
          "units_allocated": {
            "title": "Units Allocated",
            "type": "integer"
          }
        },
        "required": [
          "id",
          "brand_id",
          "order_ref",
          "status",
          "distributor",
          "units_allocated",
          "created_by",
          "created_at",
          "created"
        ],
        "title": "ShipmentCreated",
        "type": "object"
      },
      "ShipmentOut": {
        "properties": {
          "brand_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The brand's public code",
            "title": "Brand Code"
          },
          "brand_id": {
            "deprecated": true,
            "description": "Deprecated: the internal brand number, kept during the transition. Use `brand_code`.",
            "title": "Brand Id",
            "type": "integer"
          },
          "closed_at": {
            "anyOf": [
              {
                "format": "date-time",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Closed At"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "created_by": {
            "title": "Created By",
            "type": "string"
          },
          "distributor": {
            "$ref": "#/components/schemas/DistributorOut"
          },
          "id": {
            "title": "Id",
            "type": "integer"
          },
          "order_ref": {
            "title": "Order Ref",
            "type": "string"
          },
          "ship_date": {
            "anyOf": [
              {
                "format": "date",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ship Date"
          },
          "ship_to_country": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Ship To Country"
          },
          "status": {
            "description": "open | closed | cancelled",
            "title": "Status",
            "type": "string"
          },
          "units_allocated": {
            "title": "Units Allocated",
            "type": "integer"
          }
        },
        "required": [
          "id",
          "brand_id",
          "order_ref",
          "status",
          "distributor",
          "units_allocated",
          "created_by",
          "created_at"
        ],
        "title": "ShipmentOut",
        "type": "object"
      },
      "UnitResultOut": {
        "properties": {
          "input": {
            "title": "Input",
            "type": "string"
          },
          "ok": {
            "title": "Ok",
            "type": "boolean"
          },
          "other_order_ref": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "already_allocated, reallocated: the other order of the brand",
            "title": "Other Order Ref"
          },
          "product_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Product Id"
          },
          "serial": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Serial"
          },
          "status": {
            "description": "allocated | already_in_shipment | reallocated | released, or an error: unreadable | unknown_unit | not_minted | already_allocated | not_in_shipment",
            "title": "Status",
            "type": "string"
          }
        },
        "required": [
          "input",
          "status",
          "ok"
        ],
        "title": "UnitResultOut",
        "type": "object"
      },
      "UnitsRequest": {
        "additionalProperties": false,
        "properties": {
          "reallocate": {
            "default": false,
            "description": "Move units that are in ANOTHER open or closed shipment of the brand into this one. Without it such a unit is refused with already_allocated. Requires a reason, kept on the released allocation.",
            "title": "Reallocate",
            "type": "boolean"
          },
          "reason": {
            "anyOf": [
              {
                "maxLength": 200,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Reason"
          },
          "units": {
            "description": "1 to 1000 units, each as read by the scanner: the 12-character serial printed on the label, the unit's link (https://sealtrust.io/p/{serial}), its GS1 Digital Link (.../01/{gtin}/21/{serial}) or its signed QR link.",
            "items": {
              "type": "string"
            },
            "maxItems": 1000,
            "minItems": 1,
            "title": "Units",
            "type": "array"
          }
        },
        "required": [
          "units"
        ],
        "title": "UnitsRequest",
        "type": "object"
      },
      "UnitsResponse": {
        "properties": {
          "accepted": {
            "title": "Accepted",
            "type": "integer"
          },
          "order_ref": {
            "title": "Order Ref",
            "type": "string"
          },
          "rejected": {
            "title": "Rejected",
            "type": "integer"
          },
          "results": {
            "items": {
              "$ref": "#/components/schemas/UnitResultOut"
            },
            "title": "Results",
            "type": "array"
          },
          "shipment_id": {
            "title": "Shipment Id",
            "type": "integer"
          },
          "units_allocated": {
            "description": "Units in the shipment after this call",
            "title": "Units Allocated",
            "type": "integer"
          }
        },
        "required": [
          "shipment_id",
          "order_ref",
          "accepted",
          "rejected",
          "units_allocated",
          "results"
        ],
        "title": "UnitsResponse",
        "type": "object"
      },
      "UnprocessableBody": {
        "properties": {
          "detail": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/ValidationIssue"
                },
                "type": "array"
              },
              {
                "$ref": "#/components/schemas/CodedRefusal"
              },
              {
                "type": "string"
              }
            ],
            "title": "Detail"
          }
        },
        "required": [
          "detail"
        ],
        "title": "UnprocessableBody",
        "type": "object"
      },
      "ValidationError": {
        "properties": {
          "ctx": {
            "title": "Context",
            "type": "object"
          },
          "input": {
            "title": "Input"
          },
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "title": "Location",
            "type": "array"
          },
          "msg": {
            "title": "Message",
            "type": "string"
          },
          "type": {
            "title": "Error Type",
            "type": "string"
          }
        },
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError",
        "type": "object"
      },
      "ValidationIssue": {
        "additionalProperties": true,
        "properties": {
          "loc": {
            "description": "Where the issue is, e.g. body, file",
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "title": "Loc",
            "type": "array"
          },
          "msg": {
            "description": "What is wrong, in English",
            "title": "Msg",
            "type": "string"
          },
          "type": {
            "description": "The kind of issue, e.g. missing, value_error",
            "title": "Type",
            "type": "string"
          }
        },
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationIssue",
        "type": "object"
      },
      "WebhookSubscriptionCreate": {
        "additionalProperties": false,
        "properties": {
          "brand_code": {
            "anyOf": [
              {
                "pattern": "^[0123456789ABCDEFGHJKMNPQRSTVWXYZ0123456789abcdefghjkmnpqrstvwxyz]{10}$",
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The brand whose events this endpoint receives. Omit it for the key's own brand; a reseller key may name one of its client brands. The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "title": "Brand Code"
          },
          "brand_id": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "deprecated": true,
            "description": "Deprecated: the internal brand number, kept during the transition. Use `brand_code`.",
            "title": "Brand Id"
          },
          "events": {
            "description": "Event types to subscribe to",
            "items": {
              "type": "string"
            },
            "title": "Events",
            "type": "array"
          },
          "secret": {
            "anyOf": [
              {
                "maxLength": 128,
                "minLength": 32,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "Shared secret for the HMAC-SHA256 signature of every delivery, 32 to 128 characters. Omit it and the server generates one, returned once in the create response, never again.",
            "title": "Secret"
          },
          "url": {
            "description": "HTTPS URL to receive webhook POST callbacks",
            "maxLength": 2048,
            "minLength": 10,
            "title": "Url",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "title": "WebhookSubscriptionCreate",
        "type": "object"
      },
      "WebhookSubscriptionCreated": {
        "properties": {
          "brand_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "title": "Brand Code"
          },
          "brand_id": {
            "deprecated": true,
            "description": "Deprecated: the internal brand number, kept during the transition. Use `brand_code`.",
            "title": "Brand Id",
            "type": "integer"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "events": {
            "items": {
              "type": "string"
            },
            "title": "Events",
            "type": "array"
          },
          "health": {
            "default": "unknown",
            "title": "Health",
            "type": "string"
          },
          "id": {
            "title": "Id",
            "type": "integer"
          },
          "is_active": {
            "default": true,
            "title": "Is Active",
            "type": "boolean"
          },
          "secret": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The signing secret the server generated because the request carried none. Present only in the create response, and only then: store it now, it is never returned again. Absent when the request supplied its own secret.",
            "title": "Secret"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          },
          "url": {
            "title": "Url",
            "type": "string"
          }
        },
        "required": [
          "id",
          "brand_id",
          "url",
          "created_at",
          "updated_at"
        ],
        "title": "WebhookSubscriptionCreated",
        "type": "object"
      },
      "WebhookSubscriptionRead": {
        "properties": {
          "brand_code": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "title": "Brand Code"
          },
          "brand_id": {
            "deprecated": true,
            "description": "Deprecated: the internal brand number, kept during the transition. Use `brand_code`.",
            "title": "Brand Id",
            "type": "integer"
          },
          "created_at": {
            "format": "date-time",
            "title": "Created At",
            "type": "string"
          },
          "events": {
            "items": {
              "type": "string"
            },
            "title": "Events",
            "type": "array"
          },
          "health": {
            "default": "unknown",
            "title": "Health",
            "type": "string"
          },
          "id": {
            "title": "Id",
            "type": "integer"
          },
          "is_active": {
            "default": true,
            "title": "Is Active",
            "type": "boolean"
          },
          "updated_at": {
            "format": "date-time",
            "title": "Updated At",
            "type": "string"
          },
          "url": {
            "title": "Url",
            "type": "string"
          }
        },
        "required": [
          "id",
          "brand_id",
          "url",
          "created_at",
          "updated_at"
        ],
        "title": "WebhookSubscriptionRead",
        "type": "object"
      },
      "WebhookSubscriptionUpdate": {
        "additionalProperties": false,
        "properties": {
          "events": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Events"
          },
          "is_active": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Is Active"
          },
          "secret": {
            "description": "New shared secret for the HMAC-SHA256 signature, 32 to 128 characters. It cannot be erased: every delivery is signed.",
            "maxLength": 128,
            "minLength": 32,
            "title": "Secret",
            "type": "string"
          },
          "url": {
            "anyOf": [
              {
                "maxLength": 2048,
                "minLength": 10,
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Url"
          }
        },
        "title": "WebhookSubscriptionUpdate",
        "type": "object"
      },
      "WebhookSubscriptionsPage": {
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/PartnerWebhookSubscriptionItem"
            },
            "title": "Items",
            "type": "array"
          },
          "total": {
            "title": "Total",
            "type": "integer"
          }
        },
        "required": [
          "items",
          "total"
        ],
        "title": "WebhookSubscriptionsPage",
        "type": "object"
      }
    },
    "securitySchemes": {
      "PartnerApiKey": {
        "description": "Authorization: Bearer <your API key>. Keys are created in the console and start with st_live_.",
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "description": "The routes a partner calls with an API key (st_live_...). Guides: https://docs.sealtrust.io/api-vue-ensemble/",
    "title": "SealTrust partner API",
    "version": "1"
  },
  "openapi": "3.1.0",
  "paths": {
    "/v1/partner/catalog/brands": {
      "get": {
        "operationId": "list_catalog_brands_v1_partner_catalog_brands_get",
        "parameters": [
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "description": "Missing scope, or this key cannot act for this brand"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "The brands this API key may act for",
        "tags": [
          "Partner API - Catalog"
        ]
      }
    },
    "/v1/partner/catalog/brands/{brand_code}/batches": {
      "get": {
        "operationId": "read_catalog_batches_v1_partner_catalog_brands__brand_code__batches_get",
        "parameters": [
          {
            "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "in": "path",
            "name": "brand_code",
            "required": true,
            "schema": {
              "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
              "maxLength": 32,
              "minLength": 1,
              "title": "Brand Code",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "batch_code",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 100,
                  "minLength": 1,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Batch Code"
            }
          },
          {
            "in": "query",
            "name": "model_sku",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 100,
                  "minLength": 1,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Model Sku"
            }
          },
          {
            "in": "query",
            "name": "skip",
            "required": false,
            "schema": {
              "default": 0,
              "minimum": 0,
              "title": "Skip",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "description": "Missing scope, or this key cannot act for this brand"
          },
          "404": {
            "description": "No batch with this code in this brand"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "One production batch by code, or the brand's batches",
        "tags": [
          "Partner API - Catalog"
        ]
      },
      "put": {
        "operationId": "upsert_catalog_batch_v1_partner_catalog_brands__brand_code__batches_put",
        "parameters": [
          {
            "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "in": "path",
            "name": "brand_code",
            "required": true,
            "schema": {
              "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
              "maxLength": 32,
              "minLength": 1,
              "title": "Brand Code",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CatalogBatchUpsert"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "The batch existed; `changed` says whether this call changed it"
          },
          "201": {
            "description": "The batch was created"
          },
          "403": {
            "description": "Missing scope, or this key cannot act for this brand"
          },
          "404": {
            "description": "No model with `model_sku` in this brand"
          },
          "409": {
            "description": "The batch belongs to another model, or is anchored on chain"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Create or complete a production batch, by batch code",
        "tags": [
          "Partner API - Catalog"
        ]
      }
    },
    "/v1/partner/catalog/brands/{brand_code}/codes": {
      "get": {
        "operationId": "read_catalog_codes_v1_partner_catalog_brands__brand_code__codes_get",
        "parameters": [
          {
            "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "in": "path",
            "name": "brand_code",
            "required": true,
            "schema": {
              "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
              "maxLength": 32,
              "minLength": 1,
              "title": "Brand Code",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "sku",
            "required": true,
            "schema": {
              "maxLength": 100,
              "minLength": 1,
              "title": "Sku",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "batch_code",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 100,
                  "minLength": 1,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Batch Code"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "description": "Missing scope, or this key cannot act for this brand"
          },
          "404": {
            "description": "No such model or lot"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "The link and the QR code a Compliance brand prints, for a model or a lot",
        "tags": [
          "Partner API - Catalog"
        ]
      }
    },
    "/v1/partner/catalog/brands/{brand_code}/models": {
      "get": {
        "operationId": "read_catalog_models_v1_partner_catalog_brands__brand_code__models_get",
        "parameters": [
          {
            "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "in": "path",
            "name": "brand_code",
            "required": true,
            "schema": {
              "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
              "maxLength": 32,
              "minLength": 1,
              "title": "Brand Code",
              "type": "string"
            }
          },
          {
            "description": "Return this model only",
            "in": "query",
            "name": "sku",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 100,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Return this model only",
              "title": "Sku"
            }
          },
          {
            "in": "query",
            "name": "skip",
            "required": false,
            "schema": {
              "default": 0,
              "minimum": 0,
              "title": "Skip",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "description": "Missing scope, or this key cannot act for this brand"
          },
          "404": {
            "description": "No model with this SKU in this brand"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "One product model by SKU, or the brand's models",
        "tags": [
          "Partner API - Catalog"
        ]
      },
      "put": {
        "operationId": "upsert_catalog_model_v1_partner_catalog_brands__brand_code__models_put",
        "parameters": [
          {
            "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "in": "path",
            "name": "brand_code",
            "required": true,
            "schema": {
              "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
              "maxLength": 32,
              "minLength": 1,
              "title": "Brand Code",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CatalogModelUpsert"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "The model existed; `changed` says whether this call changed it"
          },
          "201": {
            "description": "The model was created"
          },
          "403": {
            "description": "Missing scope, or this key cannot act for this brand"
          },
          "404": {
            "description": "Unknown category_id"
          },
          "409": {
            "description": "The new GTIN is already published by another brand"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnprocessableBody"
                }
              }
            },
            "description": "Invalid body (a list of issues), `name` missing on creation, or a `primary_image_url` storage key that is not this brand's"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Create or complete a product model, by SKU",
        "tags": [
          "Partner API - Catalog"
        ]
      }
    },
    "/v1/partner/catalog/brands/{brand_code}/offer": {
      "get": {
        "operationId": "read_catalog_brand_offer_v1_partner_catalog_brands__brand_code__offer_get",
        "parameters": [
          {
            "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "in": "path",
            "name": "brand_code",
            "required": true,
            "schema": {
              "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
              "maxLength": 32,
              "minLength": 1,
              "title": "Brand Code",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "description": "Missing scope, or this key cannot act for this brand"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "The brand's offer: compliance, or compliance and identity",
        "tags": [
          "Partner API - Catalog"
        ]
      },
      "put": {
        "operationId": "set_catalog_brand_offer_v1_partner_catalog_brands__brand_code__offer_put",
        "parameters": [
          {
            "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "in": "path",
            "name": "brand_code",
            "required": true,
            "schema": {
              "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
              "maxLength": 32,
              "minLength": 1,
              "title": "Brand Code",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BrandOfferSet"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "description": "Missing scope, or this key cannot act for this brand"
          },
          "409": {
            "description": "OFFER_CHANGE_NEEDS_CONFIRMATION: pieces exist, or mint batches are not finished"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnprocessableBody"
                }
              }
            },
            "description": "Invalid body (a list of issues), or UNKNOWN_OFFER"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Set the offer of one of the reseller's client brands",
        "tags": [
          "Partner API - Catalog"
        ]
      }
    },
    "/v1/partner/catalog/brands/{brand_code}/passports": {
      "get": {
        "operationId": "read_catalog_passport_v1_partner_catalog_brands__brand_code__passports_get",
        "parameters": [
          {
            "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "in": "path",
            "name": "brand_code",
            "required": true,
            "schema": {
              "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
              "maxLength": 32,
              "minLength": 1,
              "title": "Brand Code",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "sku",
            "required": true,
            "schema": {
              "maxLength": 100,
              "minLength": 1,
              "title": "Sku",
              "type": "string"
            }
          },
          {
            "description": "Read the passport of this lot of the model.",
            "in": "query",
            "name": "batch_code",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 100,
                  "minLength": 1,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Read the passport of this lot of the model.",
              "title": "Batch Code"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "description": "Missing scope, or this key cannot act for this brand"
          },
          "404": {
            "description": "No such model, or no passport yet"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Latest version of a model's reference passport",
        "tags": [
          "Partner API - Catalog"
        ]
      },
      "put": {
        "operationId": "upsert_catalog_passport_v1_partner_catalog_brands__brand_code__passports_put",
        "parameters": [
          {
            "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "in": "path",
            "name": "brand_code",
            "required": true,
            "schema": {
              "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
              "maxLength": 32,
              "minLength": 1,
              "title": "Brand Code",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CatalogPassportUpsert"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "A draft existed and was completed, or nothing changed"
          },
          "201": {
            "description": "A new draft version was opened"
          },
          "403": {
            "description": "Missing scope, or this key cannot act for this brand"
          },
          "404": {
            "description": "No model with this SKU in this brand, or, with `only_if_draft`, no version yet"
          },
          "409": {
            "description": "With `only_if_draft`, the latest version is sealed or published; otherwise two writes raced twice in a row (send the request again)"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnprocessableBody"
                }
              }
            },
            "description": "Invalid body (a list of issues), or a GTIN with a wrong check digit"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Create or complete the draft reference passport of a model",
        "tags": [
          "Partner API - Catalog"
        ]
      }
    },
    "/v1/partner/catalog/brands/{brand_code}/passports/list": {
      "get": {
        "operationId": "list_catalog_passports_v1_partner_catalog_brands__brand_code__passports_list_get",
        "parameters": [
          {
            "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "in": "path",
            "name": "brand_code",
            "required": true,
            "schema": {
              "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
              "maxLength": 32,
              "minLength": 1,
              "title": "Brand Code",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "sku",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 100,
                  "minLength": 1,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Sku"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "pattern": "^(draft|sealed|published)$",
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Status"
            }
          },
          {
            "in": "query",
            "name": "skip",
            "required": false,
            "schema": {
              "default": 0,
              "minimum": 0,
              "title": "Skip",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 200,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "description": "Missing scope, or this key cannot act for this brand"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "The latest version of each reference and lot passport of the brand",
        "tags": [
          "Partner API - Catalog"
        ]
      }
    },
    "/v1/partner/catalog/brands/{brand_code}/passports/preview": {
      "post": {
        "operationId": "preview_catalog_passport_v1_partner_catalog_brands__brand_code__passports_preview_post",
        "parameters": [
          {
            "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "in": "path",
            "name": "brand_code",
            "required": true,
            "schema": {
              "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
              "maxLength": 32,
              "minLength": 1,
              "title": "Brand Code",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CatalogPassportPreview"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "description": "Missing scope, or this key cannot act for this brand"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnprocessableBody"
                }
              }
            },
            "description": "Invalid body (a list of issues)"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "What each access tier will see of draft passport data",
        "tags": [
          "Partner API - Catalog"
        ]
      }
    },
    "/v1/partner/catalog/brands/{brand_code}/readiness": {
      "get": {
        "operationId": "read_catalog_readiness_v1_partner_catalog_brands__brand_code__readiness_get",
        "parameters": [
          {
            "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "in": "path",
            "name": "brand_code",
            "required": true,
            "schema": {
              "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
              "maxLength": 32,
              "minLength": 1,
              "title": "Brand Code",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "sku",
            "required": true,
            "schema": {
              "maxLength": 100,
              "minLength": 1,
              "title": "Sku",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "description": "Missing scope, or this key cannot act for this brand"
          },
          "404": {
            "description": "No model with this SKU in this brand"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Completeness score of one product model",
        "tags": [
          "Partner API - Catalog"
        ]
      }
    },
    "/v1/partner/catalog/brands/{brand_code}/templates": {
      "get": {
        "operationId": "list_catalog_templates_v1_partner_catalog_brands__brand_code__templates_get",
        "parameters": [
          {
            "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "in": "path",
            "name": "brand_code",
            "required": true,
            "schema": {
              "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
              "maxLength": 32,
              "minLength": 1,
              "title": "Brand Code",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "description": "Missing scope, or this key cannot act for this brand"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "The DPP templates this brand can start a passport from",
        "tags": [
          "Partner API - Catalog"
        ]
      }
    },
    "/v1/partner/catalog/brands/{brand_code}/templates/{template_key}": {
      "get": {
        "operationId": "read_catalog_template_v1_partner_catalog_brands__brand_code__templates__template_key__get",
        "parameters": [
          {
            "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "in": "path",
            "name": "brand_code",
            "required": true,
            "schema": {
              "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
              "maxLength": 32,
              "minLength": 1,
              "title": "Brand Code",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "template_key",
            "required": true,
            "schema": {
              "maxLength": 64,
              "minLength": 1,
              "title": "Template Key",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "description": "Missing scope, or this key cannot act for this brand"
          },
          "404": {
            "description": "No such template for this brand"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "One DPP template, with its empty fields and its examples beside it",
        "tags": [
          "Partner API - Catalog"
        ]
      }
    },
    "/v1/partner/claim-codes/brands/{brand_code}/issue": {
      "post": {
        "operationId": "issue_claim_codes_v1_partner_claim_codes_brands__brand_code__issue_post",
        "parameters": [
          {
            "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "in": "path",
            "name": "brand_code",
            "required": true,
            "schema": {
              "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
              "maxLength": 32,
              "minLength": 1,
              "title": "Brand Code",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClaimCodeIssueRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClaimCodeIssueResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "description": "Missing claim_codes:issue scope, this key cannot act for this brand, or OFFER_EXCLUDES_IDENTITY: the brand is on the Compliance offer"
          },
          "404": {
            "description": "PIECE_NOT_FOUND: a piece is unknown or of another brand (same answer)"
          },
          "409": {
            "description": "PURCHASE_CODE_ALREADY_USED: a piece's code was used; nothing issued"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnprocessableBody"
                }
              }
            },
            "description": "Invalid body: a malformed reference, a piece named twice, too many"
          },
          "429": {
            "description": "Rate limit, or PURCHASE_CODE_BUDGET_EXCEEDED for the brand"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Issue the purchase codes of existing pieces (each shown once)",
        "tags": [
          "Partner API - Claim codes"
        ]
      }
    },
    "/v1/partner/claim-codes/brands/{brand_code}/status": {
      "post": {
        "operationId": "claim_code_status_v1_partner_claim_codes_brands__brand_code__status_post",
        "parameters": [
          {
            "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "in": "path",
            "name": "brand_code",
            "required": true,
            "schema": {
              "description": "The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
              "maxLength": 32,
              "minLength": 1,
              "title": "Brand Code",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ClaimCodeStatusRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClaimCodeStatusResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "description": "Missing claim_codes:issue scope, this key cannot act for this brand, or OFFER_EXCLUDES_IDENTITY: the brand is on the Compliance offer"
          },
          "404": {
            "description": "PIECE_NOT_FOUND: a piece is unknown or of another brand (same answer)"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnprocessableBody"
                }
              }
            },
            "description": "Invalid body: a malformed reference, a piece named twice, too many"
          },
          "429": {
            "description": "Rate limit, or PURCHASE_CODE_BUDGET_EXCEEDED for the brand"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Whether pieces have a live, used or no purchase code (never the code)",
        "tags": [
          "Partner API - Claim codes"
        ]
      }
    },
    "/v1/partner/dispatch/shipments": {
      "get": {
        "operationId": "get_shipment_by_ref_v1_partner_dispatch_shipments_get",
        "parameters": [
          {
            "in": "query",
            "name": "order_ref",
            "required": true,
            "schema": {
              "maxLength": 100,
              "minLength": 1,
              "title": "Order Ref",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "brand_code",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 64,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Brand Code"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "403": {
            "description": "Missing dispatch:write scope, this key cannot act for this brand, or OFFER_EXCLUDES_IDENTITY: the brand is on the compliance offer"
          },
          "404": {
            "description": "Shipment or distributor not found for this brand"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "description": "Rate limit or daily quota exceeded"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Read a shipment by its order reference",
        "tags": [
          "Partner API - Dispatch"
        ]
      },
      "post": {
        "operationId": "create_shipment_v1_partner_dispatch_shipments_post",
        "parameters": [
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShipmentCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentCreated"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "403": {
            "description": "Missing dispatch:write scope, this key cannot act for this brand, or OFFER_EXCLUDES_IDENTITY: the brand is on the compliance offer"
          },
          "404": {
            "description": "Shipment or distributor not found for this brand"
          },
          "409": {
            "description": "This order exists for another distributor"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "description": "Rate limit or daily quota exceeded"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Create a B2B shipment (idempotent on the order reference)",
        "tags": [
          "Partner API - Dispatch"
        ]
      }
    },
    "/v1/partner/dispatch/shipments/{shipment_id}": {
      "get": {
        "operationId": "get_shipment_v1_partner_dispatch_shipments__shipment_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "shipment_id",
            "required": true,
            "schema": {
              "title": "Shipment Id",
              "type": "integer"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "403": {
            "description": "Missing dispatch:write scope, this key cannot act for this brand, or OFFER_EXCLUDES_IDENTITY: the brand is on the compliance offer"
          },
          "404": {
            "description": "Shipment or distributor not found for this brand"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "description": "Rate limit or daily quota exceeded"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Read a shipment",
        "tags": [
          "Partner API - Dispatch"
        ]
      }
    },
    "/v1/partner/dispatch/shipments/{shipment_id}/close": {
      "post": {
        "operationId": "close_shipment_v1_partner_dispatch_shipments__shipment_id__close_post",
        "parameters": [
          {
            "in": "path",
            "name": "shipment_id",
            "required": true,
            "schema": {
              "title": "Shipment Id",
              "type": "integer"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShipmentOut"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "403": {
            "description": "Missing dispatch:write scope, this key cannot act for this brand, or OFFER_EXCLUDES_IDENTITY: the brand is on the compliance offer"
          },
          "404": {
            "description": "Shipment or distributor not found for this brand"
          },
          "409": {
            "description": "The shipment is already closed or cancelled"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "description": "Rate limit or daily quota exceeded"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Close a shipment: the order left the warehouse, its units stay allocated",
        "tags": [
          "Partner API - Dispatch"
        ]
      }
    },
    "/v1/partner/dispatch/shipments/{shipment_id}/units": {
      "post": {
        "operationId": "add_units_v1_partner_dispatch_shipments__shipment_id__units_post",
        "parameters": [
          {
            "in": "path",
            "name": "shipment_id",
            "required": true,
            "schema": {
              "title": "Shipment Id",
              "type": "integer"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnitsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnitsResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "403": {
            "description": "Missing dispatch:write scope, this key cannot act for this brand, or OFFER_EXCLUDES_IDENTITY: the brand is on the compliance offer"
          },
          "404": {
            "description": "Shipment or distributor not found for this brand"
          },
          "409": {
            "description": "The shipment is closed or cancelled"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "description": "Rate limit or daily quota exceeded"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Allocate up to 1000 scanned units to a shipment, one result per unit",
        "tags": [
          "Partner API - Dispatch"
        ]
      }
    },
    "/v1/partner/dispatch/shipments/{shipment_id}/units/release": {
      "post": {
        "operationId": "release_units_v1_partner_dispatch_shipments__shipment_id__units_release_post",
        "parameters": [
          {
            "in": "path",
            "name": "shipment_id",
            "required": true,
            "schema": {
              "title": "Shipment Id",
              "type": "integer"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReleaseRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnitsResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "401": {
            "description": "Missing or invalid API key"
          },
          "403": {
            "description": "Missing dispatch:write scope, this key cannot act for this brand, or OFFER_EXCLUDES_IDENTITY: the brand is on the compliance offer"
          },
          "404": {
            "description": "Shipment or distributor not found for this brand"
          },
          "409": {
            "description": "The shipment is closed or cancelled"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "description": "Rate limit or daily quota exceeded"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Take units back out of an open shipment",
        "tags": [
          "Partner API - Dispatch"
        ]
      }
    },
    "/v1/partner/mint/batch": {
      "post": {
        "operationId": "partner_mint_batch_v1_partner_mint_batch_post",
        "parameters": [
          {
            "description": "Issue a purchase code for each piece (the claim rule 'purchase code required'). Needs the claim_codes:issue scope as well. The codes are shown ONCE, with GET /partner/mint/batch/{job_id}/items.",
            "in": "query",
            "name": "issue_purchase_codes",
            "required": false,
            "schema": {
              "default": false,
              "description": "Issue a purchase code for each piece (the claim rule 'purchase code required'). Needs the claim_codes:issue scope as well. The codes are shown ONCE, with GET /partner/mint/batch/{job_id}/items.",
              "title": "Issue Purchase Codes",
              "type": "boolean"
            }
          },
          {
            "in": "header",
            "name": "Idempotency-Key",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Idempotency-Key"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "items": {
                  "$ref": "#/components/schemas/RowIn"
                },
                "maxItems": 500,
                "minItems": 1,
                "type": "array"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/Body_partner_mint_batch_v1_partner_mint_batch_post"
              }
            }
          }
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "example": {
                  "brand_code": "7K3QXW9M2A",
                  "items_count": 100,
                  "job_id": "abc123...",
                  "status": "queued"
                },
                "schema": {}
              }
            },
            "description": "Batch queued"
          },
          "400": {
            "description": "Invalid format (CSV/JSON)"
          },
          "403": {
            "description": "Missing scope, or a row names a brand this key cannot act for (same answer for a brand that does not exist)"
          },
          "409": {
            "description": "Idempotency-Key already being processed, or already used with a DIFFERENT request body"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnprocessableBody"
                }
              }
            },
            "description": "Validation error (a list of issues), or ONE_BRAND_PER_BATCH: the rows name more than one brand"
          },
          "429": {
            "description": "Rate limit or quota exceeded"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Batch mint products (CSV or JSON)",
        "tags": [
          "Partner API - Mint"
        ]
      }
    },
    "/v1/partner/mint/batch/status/{job_id}": {
      "get": {
        "operationId": "partner_batch_status_v1_partner_mint_batch_status__job_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "job_id",
            "required": true,
            "schema": {
              "title": "Job Id",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "description": "Missing mint:batch scope"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Status of a batch mint job",
        "tags": [
          "Partner API - Mint"
        ]
      }
    },
    "/v1/partner/mint/batch/{job_id}/items": {
      "get": {
        "operationId": "partner_batch_items_v1_partner_mint_batch__job_id__items_get",
        "parameters": [
          {
            "in": "path",
            "name": "job_id",
            "required": true,
            "schema": {
              "title": "Job Id",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 100,
              "maximum": 500,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "default": 0,
              "minimum": 0,
              "title": "Offset",
              "type": "integer"
            }
          },
          {
            "description": "Retype your verified domain (your own, or your reseller's shared one) to get print links on it. Doing so freezes that domain for good, exactly like the console's QR archive: a printed label cannot be corrected. Without it, links carry our domain until the domain is frozen. Ignored once it is frozen, and when the links carry our domain anyway.",
            "in": "query",
            "name": "confirm_domain",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 255,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "Retype your verified domain (your own, or your reseller's shared one) to get print links on it. Doing so freezes that domain for good, exactly like the console's QR archive: a printed label cannot be corrected. Without it, links carry our domain until the domain is frozen. Ignored once it is frozen, and when the links carry our domain anyway.",
              "title": "Confirm Domain"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "description": "Missing mint:batch scope, or OFFER_EXCLUDES_IDENTITY: the batch's brand is on the Compliance offer, which hands out no per-piece link"
          },
          "404": {
            "description": "Unknown batch, or a batch of another brand (same answer)"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "The pieces a batch created, row by row",
        "tags": [
          "Partner API - Mint"
        ]
      }
    },
    "/v1/partner/nfc/receipts/{receipt}": {
      "get": {
        "operationId": "read_nfc_receipt_v1_partner_nfc_receipts__receipt__get",
        "parameters": [
          {
            "in": "path",
            "name": "receipt",
            "required": true,
            "schema": {
              "pattern": "^[A-Za-z0-9_-]{32}$",
              "title": "Receipt",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "description": "Unknown or expired receipt, or not a brand of this key"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Read the verdict of a chip read our hosted page verified",
        "tags": [
          "Partner API - Passport display"
        ]
      }
    },
    "/v1/partner/nfc/verify": {
      "post": {
        "operationId": "verify_partner_nfc_read_v1_partner_nfc_verify_post",
        "parameters": [
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerNfcRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "description": "The signed visitor headers are missing"
          },
          "401": {
            "description": "The visitor signature or its timestamp does not hold"
          },
          "403": {
            "description": "The chip's signature does not verify (SDM_MAC_MISMATCH)"
          },
          "404": {
            "description": "The chip belongs to a brand this key cannot act for"
          },
          "409": {
            "description": "Replay: this read was already verified elsewhere"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "503": {
            "description": "NFC_READ_IN_PROGRESS: an earlier call of this key is still verifying the same read; retry after Retry-After seconds"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Verify a chip read for a visitor of the partner's page",
        "tags": [
          "Partner API - Passport display"
        ]
      }
    },
    "/v1/partner/passports/01/{gtin}": {
      "get": {
        "operationId": "read_model_passport_bundle_v1_partner_passports_01__gtin__get",
        "parameters": [
          {
            "in": "path",
            "name": "gtin",
            "required": true,
            "schema": {
              "maxLength": 14,
              "minLength": 8,
              "title": "Gtin",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "description": "Unknown, unpublished, or not a brand of this key"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "A model's reference passport and its proof, in one call",
        "tags": [
          "Partner API - Passport display"
        ]
      }
    },
    "/v1/partner/passports/01/{gtin}/10/{lot}": {
      "get": {
        "operationId": "read_lot_passport_bundle_v1_partner_passports_01__gtin__10__lot__get",
        "parameters": [
          {
            "in": "path",
            "name": "gtin",
            "required": true,
            "schema": {
              "maxLength": 14,
              "minLength": 8,
              "title": "Gtin",
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "lot",
            "required": true,
            "schema": {
              "maxLength": 20,
              "minLength": 1,
              "title": "Lot",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "description": "Unknown, unpublished, or not a brand of this key"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "A lot's passport and its proof, in one call",
        "tags": [
          "Partner API - Passport display"
        ]
      }
    },
    "/v1/partner/passports/{identifier}": {
      "get": {
        "operationId": "read_unit_passport_bundle_v1_partner_passports__identifier__get",
        "parameters": [
          {
            "in": "path",
            "name": "identifier",
            "required": true,
            "schema": {
              "maxLength": 80,
              "minLength": 1,
              "title": "Identifier",
              "type": "string"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "404": {
            "description": "Unknown, unpublished, or not a brand of this key"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "A unit's passport, its proof and its signature, in one call",
        "tags": [
          "Partner API - Passport display"
        ]
      }
    },
    "/v1/partner/scans": {
      "post": {
        "operationId": "record_partner_scan_v1_partner_scans_post",
        "parameters": [
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerScanRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {}
              }
            },
            "description": "Successful Response"
          },
          "400": {
            "description": "The signed visitor headers are missing"
          },
          "401": {
            "description": "The visitor signature or its timestamp does not hold"
          },
          "404": {
            "description": "Unknown product, or not a brand of this key"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Record a scan made by a visitor of the partner's page",
        "tags": [
          "Partner API - Passport display"
        ]
      }
    },
    "/v1/partner/sellout": {
      "post": {
        "operationId": "partner_sellout_v1_partner_sellout_post",
        "parameters": [
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PartnerSelloutRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SelloutResponse"
                }
              }
            },
            "description": "Successful Response"
          },
          "403": {
            "description": "Missing sellout:write scope, this key cannot act for this brand, or OFFER_EXCLUDES_IDENTITY: the brand is on the compliance offer"
          },
          "404": {
            "description": "Retailer or product not found for this brand"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          },
          "429": {
            "description": "Rate limit exceeded"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Declare a sell-out (product handed to the final customer)",
        "tags": [
          "Partner API - Sellout"
        ]
      }
    },
    "/v1/partner/webhooks": {
      "get": {
        "operationId": "list_webhooks_v1_partner_webhooks_get",
        "parameters": [
          {
            "in": "query",
            "name": "skip",
            "required": false,
            "schema": {
              "default": 0,
              "minimum": 0,
              "title": "Skip",
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 20,
              "maximum": 100,
              "minimum": 1,
              "title": "Limit",
              "type": "integer"
            }
          },
          {
            "description": "The brand whose subscriptions to list. Omit it for the key's own brand; a reseller key may name one of its client brands. The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
            "in": "query",
            "name": "brand_code",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "maxLength": 32,
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The brand whose subscriptions to list. Omit it for the key's own brand; a reseller key may name one of its client brands. The brand's public code: 10 characters of Crockford base32 (digits and letters without I, L, O and U), for example `7K3QXW9M2A`. `GET /partner/catalog/brands` lists the codes this key may act for.",
              "title": "Brand Code"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSubscriptionsPage"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "List Webhooks",
        "tags": [
          "Partner - Webhooks"
        ]
      },
      "post": {
        "operationId": "create_webhook_v1_partner_webhooks_post",
        "parameters": [
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookSubscriptionCreate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSubscriptionCreated"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Create Webhook",
        "tags": [
          "Partner - Webhooks"
        ]
      }
    },
    "/v1/partner/webhooks/{webhook_id}": {
      "delete": {
        "operationId": "delete_webhook_v1_partner_webhooks__webhook_id__delete",
        "parameters": [
          {
            "in": "path",
            "name": "webhook_id",
            "required": true,
            "schema": {
              "title": "Webhook Id",
              "type": "integer"
            }
          },
          {
            "description": "The subscription's own url, exactly as GET /partner/webhooks/{id} returns it. Required.",
            "in": "query",
            "name": "confirm",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "description": "The subscription's own url, exactly as GET /partner/webhooks/{id} returns it. Required.",
              "title": "Confirm"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Delete Webhook",
        "tags": [
          "Partner - Webhooks"
        ]
      },
      "get": {
        "operationId": "get_webhook_v1_partner_webhooks__webhook_id__get",
        "parameters": [
          {
            "in": "path",
            "name": "webhook_id",
            "required": true,
            "schema": {
              "title": "Webhook Id",
              "type": "integer"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSubscriptionRead"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Get Webhook",
        "tags": [
          "Partner - Webhooks"
        ]
      },
      "put": {
        "operationId": "update_webhook_v1_partner_webhooks__webhook_id__put",
        "parameters": [
          {
            "in": "path",
            "name": "webhook_id",
            "required": true,
            "schema": {
              "title": "Webhook Id",
              "type": "integer"
            }
          },
          {
            "in": "header",
            "name": "Authorization",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Authorization"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WebhookSubscriptionUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookSubscriptionRead"
                }
              }
            },
            "description": "Successful Response"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            },
            "description": "Validation Error"
          }
        },
        "security": [
          {
            "PartnerApiKey": []
          }
        ],
        "summary": "Update Webhook",
        "tags": [
          "Partner - Webhooks"
        ]
      }
    }
  },
  "servers": [
    {
      "url": "https://api.sealtrust.io"
    }
  ]
}
