Byrd · Schema

Product

CompanyE-CommerceFulfillmentLogistics3PLShippingWarehousingOrder ManagementInventoryReturnsSupply Chain

Properties

Name Type Description
id string ID of the product (UUID).
createdAt string When the record was created (ISO 8601).
updatedAt string When the record was last changed (ISO 8601).
active booleannull Whether the product can be shipped. Defaults to `true`.
barcode stringnull Value of the primary barcode printed on the product, at most 48 characters; mirrors the primary entry of `barcodes`. `null` when the product has no barcode.
barcodeType stringnull Symbology of `barcode`; required when `barcode` is set. - `ean_13`: EAN-13 - `code_128`: Code 128 - `gs1_128`: GS1-128 - `qr_code`: QR code
barcodes arraynull All barcodes printed on the product, at most one of them primary. When you send both `barcode` and `barcodes`, `barcode` must match the primary entry.
customsTariffNumber stringnull Harmonised System (HS) tariff code of the product: 6, 8 or 10 digits. Required for shipments leaving the EU or the UK.
customsValue objectnull Value declared to customs for the product when the shipment item has no price, for example for a free gift; `null` for none. Not the purchase price.
description stringnull Free-text description of the product.
ean stringnull European Article Number (EAN) of the product, passed on as its GTIN in customs data.
isbn stringnull International Standard Book Number (ISBN) of the product, passed on as its GTIN in customs data when it has no EAN or UPC.
lotsEnabled boolean Whether lots (batches) of the product are tracked when it is inbounded and shipped. Bundles cannot be lot tracked. Defaults to `false`.
packagingUnitEnabled boolean Whether the product also comes in packaging units holding several units, which the warehouse can pick as a whole. Defaults to `false`.
serialNumberEnabled boolean Whether serial numbers of the product are recorded when it is shipped. Defaults to `false`.
serialNumberRegex stringnull Regular expression the serial numbers recorded when shipping the product must match; `null` for no check.
inventorySerialNumberEnabled boolean Whether serial numbers are also tracked in inventory, from inbounding onwards. Requires `serialNumberEnabled`. Defaults to `false`.
name string Name of the product; at least one character.
originCountryCode stringnull Country the product was made in (ISO 3166-1 alpha-2); `UK` is stored as `GB`. Required for shipments leaving the EU or the UK.
organic booleannull Whether the product is organic and needs special storage and shipping conditions. Bundles cannot be organic. Defaults to `false`.
grs booleannull Whether the product complies with the Global Recycled Standard (GRS) and needs specific storage conditions. Defaults to `false`.
fragile booleannull Whether the product is fragile and needs special packaging. For a bundle it is derived from the ingredients and cannot be set. Defaults to `false`.
productID stringnull Deprecated. ID of the article in your shop system; required when `shopID` is set.
productType stringnull Type of the product. Defaults to `product`; `bundle`, `supplementary` and `packaging_material` cannot be changed afterwards. - `product`: a regular physical product - `bundle`: a group of other produc
purchasePrice objectnull Purchase price of one unit, used to insure shipments. Use the purchase price, not the retail price; bundles cannot have one.
purchasePriceEvidenceURL stringnull HTTPS link to a document proving the purchase price, such as an invoice.
reorderPoint integernull Available stock level at or below which the product is reported as low on stock, for example in the daily notification email if you enabled it. Defaults to `0`.
retailPrice numbernull Retail price of one unit, for your reference; at least 0.
sku stringnull Your stock keeping unit (SKU) for the product, unique among your products. It must match the SKU your sales channel sends on order lines.
upc stringnull Universal Product Code (UPC) of the product, passed on as its GTIN in customs data when it has no EAN.
variantID stringnull Deprecated. ID of the article variant in your shop system.
deleted boolean Whether the product was deleted.
deletedDate string When the product was deleted (ISO 8601); `null` if it was not.
physicalStock integer Units of the product in byrd warehouses, including reserved and unavailable units.
reservedStock integer Units reserved for shipments released to a warehouse and not picked yet.
availableStock integer Units available for new shipments: physical stock minus reserved and unavailable stock, never below 0. For a bundle, the number of complete bundles its ingredients allow.
unavailableStock integer Units that cannot be shipped: damaged, in a deactivated storage, or in a lot that is deactivated, expired or outside its shipping window.
stocksByWarehouse object Stock levels per warehouse, keyed by warehouse ID, each with `available`, `physical`, `reserved` and `unavailable` units. Only warehouses holding or reserving the product are listed.
unreleasedReservations integer Units needed by your shipments that are not released to a warehouse yet; not included in `reservedStock`.
bundleIngredients arraynull Products a bundle is made of and how many units of each, as `ingredientID` and `quantity`; only for `productType` `bundle`. Replaces the current ingredients. Write-only: read them with the bundle endp
user object Deprecated: use `userID`. Object with the `id` of the owner.
userID stringnull ID of the byrd user who owns the product (UUID). Products you create are always yours.
shop objectnull Deprecated: use `shopID`. Object with the `id` of the shop.
shopID stringnull ID of the shop the product is linked to (UUID); `null` when it is not linked to a shop.
storages array Storages holding the product in byrd warehouses. Only included when requested with `include_storages=true`.
lots array Lots (batches) of the product. Only included when listing products with `include_lots=true`.
packagingUnits array Packaging unit of the product: a pack of several units with its own barcode. At most one; its barcode is required when you create the product and must differ from the product barcodes.
dangerousGoods arraynull Dangerous goods the product contains, one entry per UN number. Bundles cannot have any: add them to the ingredients instead.
dangerousGoodsMSDSURL stringnull HTTPS link to the material safety data sheet (MSDS) of the dangerous goods in the product.
isDangerousGoods boolean Whether the product contains dangerous goods; for a bundle, whether any of its ingredients does.
bsku stringnull Unique SKU byrd generates for the product, unrelated to your `sku`.
skipBarcodePick boolean Whether the warehouse may skip scanning the product barcode when picking and packing. Set by byrd.
dimensions objectnull Size and weight of one unit of the product. The weight is needed for shipments leaving the EU or the UK; a `prepacked_product` needs all dimensions and a `sizeGroup`.
changeRequests arraynull Changes the warehouse asks you to make to the product settings, one per `info`; `null` when there are none. Answer them by sending this list back with a `status` of `accepted` or `declined`.
dimensionsPhotoURLs arraynull Links to the photos the warehouse took when it measured the product; `null` when there are none.
View JSON Schema on GitHub

JSON Schema

byrd-product-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/byrd/main/json-schema/byrd-product-schema.json",
  "title": "Product",
  "x-generated": "2026-10-14",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/byrd-apis-openapi.yml#/components/schemas/Product",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "readOnly": true,
      "description": "ID of the product (UUID)."
    },
    "createdAt": {
      "type": "string",
      "format": "date-time",
      "readOnly": true,
      "description": "When the record was created (ISO 8601)."
    },
    "updatedAt": {
      "type": "string",
      "format": "date-time",
      "readOnly": true,
      "description": "When the record was last changed (ISO 8601)."
    },
    "active": {
      "type": [
        "boolean",
        "null"
      ],
      "description": "Whether the product can be shipped. Defaults to `true`."
    },
    "barcode": {
      "type": [
        "string",
        "null"
      ],
      "maxLength": 48,
      "description": "Value of the primary barcode printed on the product, at most 48 characters; mirrors the primary entry of `barcodes`. `null` when the product has no barcode."
    },
    "barcodeType": {
      "description": "Symbology of `barcode`; required when `barcode` is set.\n\n- `ean_13`: EAN-13\n- `code_128`: Code 128\n- `gs1_128`: GS1-128\n- `qr_code`: QR code",
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "ean_13",
        "code_128",
        "gs1_128",
        "qr_code",
        null
      ]
    },
    "barcodes": {
      "description": "All barcodes printed on the product, at most one of them primary. When you send both `barcode` and `barcodes`, `barcode` must match the primary entry.",
      "type": [
        "array",
        "null"
      ],
      "items": {
        "$ref": "#/$defs/Barcode"
      }
    },
    "customsTariffNumber": {
      "type": [
        "string",
        "null"
      ],
      "pattern": "^([0-9]{6}|[0-9]{8}|[0-9]{10})$",
      "description": "Harmonised System (HS) tariff code of the product: 6, 8 or 10 digits. Required for shipments leaving the EU or the UK."
    },
    "customsValue": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "value": {
          "type": "number",
          "description": "Amount, as a string with two decimals separated by a dot."
        },
        "currency": {
          "type": "string",
          "pattern": "^[A-Z]{3}$",
          "description": "Currency (ISO 4217 code, e.g. `EUR`)."
        },
        "taxFactor": {
          "type": [
            "number",
            "null"
          ],
          "description": "Tax factor of the price, for example `1.19` for 19% VAT; `null` when not set."
        }
      },
      "required": [
        "currency",
        "value"
      ],
      "description": "Value declared to customs for the product when the shipment item has no price, for example for a free gift; `null` for none. Not the purchase price."
    },
    "description": {
      "type": [
        "string",
        "null"
      ],
      "description": "Free-text description of the product."
    },
    "ean": {
      "type": [
        "string",
        "null"
      ],
      "description": "European Article Number (EAN) of the product, passed on as its GTIN in customs data."
    },
    "isbn": {
      "type": [
        "string",
        "null"
      ],
      "description": "International Standard Book Number (ISBN) of the product, passed on as its GTIN in customs data when it has no EAN or UPC."
    },
    "lotsEnabled": {
      "type": "boolean",
      "description": "Whether lots (batches) of the product are tracked when it is inbounded and shipped. Bundles cannot be lot tracked. Defaults to `false`."
    },
    "packagingUnitEnabled": {
      "type": "boolean",
      "description": "Whether the product also comes in packaging units holding several units, which the warehouse can pick as a whole. Defaults to `false`."
    },
    "serialNumberEnabled": {
      "type": "boolean",
      "description": "Whether serial numbers of the product are recorded when it is shipped. Defaults to `false`."
    },
    "serialNumberRegex": {
      "type": [
        "string",
        "null"
      ],
      "description": "Regular expression the serial numbers recorded when shipping the product must match; `null` for no check."
    },
    "inventorySerialNumberEnabled": {
      "type": "boolean",
      "description": "Whether serial numbers are also tracked in inventory, from inbounding onwards. Requires `serialNumberEnabled`. Defaults to `false`."
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "description": "Name of the product; at least one character."
    },
    "originCountryCode": {
      "type": [
        "string",
        "null"
      ],
      "pattern": "^[A-Z]{2}$",
      "description": "Country the product was made in (ISO 3166-1 alpha-2); `UK` is stored as `GB`. Required for shipments leaving the EU or the UK."
    },
    "organic": {
      "type": [
        "boolean",
        "null"
      ],
      "description": "Whether the product is organic and needs special storage and shipping conditions. Bundles cannot be organic. Defaults to `false`."
    },
    "grs": {
      "type": [
        "boolean",
        "null"
      ],
      "description": "Whether the product complies with the Global Recycled Standard (GRS) and needs specific storage conditions. Defaults to `false`."
    },
    "fragile": {
      "type": [
        "boolean",
        "null"
      ],
      "description": "Whether the product is fragile and needs special packaging. For a bundle it is derived from the ingredients and cannot be set. Defaults to `false`."
    },
    "productID": {
      "type": [
        "string",
        "null"
      ],
      "description": "Deprecated. ID of the article in your shop system; required when `shopID` is set."
    },
    "productType": {
      "type": [
        "string",
        "null"
      ],
      "description": "Type of the product. Defaults to `product`; `bundle`, `supplementary` and `packaging_material` cannot be changed afterwards.\n\n- `product`: a regular physical product\n- `bundle`: a group of other products sold under one SKU, see `bundleIngredients`\n- `prepacked_product`: a product shipped in its own packaging\n- `packaging_material`: packaging material, such as boxes or fillers\n- `branding`: branded material packed into shipments, not counted as a product item\n- `supplementary`: a product only shipped together with another product\n- `alias`: another SKU for an existing product, sharing its stock\n- `marketing`: marketing material"
    },
    "purchasePrice": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "value": {
          "type": "number",
          "description": "Amount, as a string with two decimals separated by a dot."
        },
        "currency": {
          "type": "string",
          "pattern": "^[A-Z]{3}$",
          "description": "Currency (ISO 4217 code, e.g. `EUR`)."
        },
        "taxFactor": {
          "type": [
            "number",
            "null"
          ],
          "description": "Tax factor of the price, for example `1.19` for 19% VAT; `null` when not set."
        }
      },
      "required": [
        "currency",
        "value"
      ],
      "description": "Purchase price of one unit, used to insure shipments. Use the purchase price, not the retail price; bundles cannot have one."
    },
    "purchasePriceEvidenceURL": {
      "type": [
        "string",
        "null"
      ],
      "description": "HTTPS link to a document proving the purchase price, such as an invoice."
    },
    "reorderPoint": {
      "type": [
        "integer",
        "null"
      ],
      "minimum": 0,
      "description": "Available stock level at or below which the product is reported as low on stock, for example in the daily notification email if you enabled it. Defaults to `0`."
    },
    "retailPrice": {
      "type": [
        "number",
        "null"
      ],
      "minimum": 0,
      "description": "Retail price of one unit, for your reference; at least 0."
    },
    "sku": {
      "type": [
        "string",
        "null"
      ],
      "minLength": 1,
      "description": "Your stock keeping unit (SKU) for the product, unique among your products. It must match the SKU your sales channel sends on order lines."
    },
    "upc": {
      "type": [
        "string",
        "null"
      ],
      "description": "Universal Product Code (UPC) of the product, passed on as its GTIN in customs data when it has no EAN."
    },
    "variantID": {
      "type": [
        "string",
        "null"
      ],
      "description": "Deprecated. ID of the article variant in your shop system."
    },
    "deleted": {
      "type": "boolean",
      "readOnly": true,
      "description": "Whether the product was deleted."
    },
    "deletedDate": {
      "type": "string",
      "format": "date-time",
      "readOnly": true,
      "description": "When the product was deleted (ISO 8601); `null` if it was not."
    },
    "physicalStock": {
      "type": "integer",
      "readOnly": true,
      "description": "Units of the product in byrd warehouses, including reserved and unavailable units."
    },
    "reservedStock": {
      "type": "integer",
      "readOnly": true,
      "description": "Units reserved for shipments released to a warehouse and not picked yet."
    },
    "availableStock": {
      "type": "integer",
      "readOnly": true,
      "description": "Units available for new shipments: physical stock minus reserved and unavailable stock, never below 0. For a bundle, the number of complete bundles its ingredients allow."
    },
    "unavailableStock": {
      "type": "integer",
      "readOnly": true,
      "description": "Units that cannot be shipped: damaged, in a deactivated storage, or in a lot that is deactivated, expired or outside its shipping window."
    },
    "stocksByWarehouse": {
      "type": "object",
      "readOnly": true,
      "additionalProperties": {
        "type": "object",
        "properties": {
          "available": {
            "type": "integer",
            "description": "Units in this warehouse that can be ordered."
          },
          "physical": {
            "type": "integer",
            "description": "Units of the product in this warehouse, including reserved and unavailable units."
          },
          "reserved": {
            "type": "integer",
            "description": "Units in this warehouse reserved for released shipments and not picked yet."
          },
          "unavailable": {
            "type": "integer",
            "description": "Units in this warehouse that cannot be shipped, for example because they are damaged or in a deactivated storage or lot."
          }
        }
      },
      "description": "Stock levels per warehouse, keyed by warehouse ID, each with `available`, `physical`, `reserved` and `unavailable` units. Only warehouses holding or reserving the product are listed."
    },
    "unreleasedReservations": {
      "type": "integer",
      "readOnly": true,
      "description": "Units needed by your shipments that are not released to a warehouse yet; not included in `reservedStock`."
    },
    "bundleIngredients": {
      "writeOnly": true,
      "description": "Products a bundle is made of and how many units of each, as `ingredientID` and `quantity`; only for `productType` `bundle`. Replaces the current ingredients. Write-only: read them with the bundle endpoints.",
      "type": [
        "array",
        "null"
      ],
      "items": {
        "$ref": "#/$defs/Bundle"
      }
    },
    "user": {
      "type": "object",
      "readOnly": true,
      "description": "Deprecated: use `userID`. Object with the `id` of the owner.",
      "additionalProperties": {}
    },
    "userID": {
      "type": [
        "string",
        "null"
      ],
      "format": "uuid",
      "description": "ID of the byrd user who owns the product (UUID). Products you create are always yours."
    },
    "shop": {
      "type": [
        "object",
        "null"
      ],
      "readOnly": true,
      "description": "Deprecated: use `shopID`. Object with the `id` of the shop.",
      "additionalProperties": {}
    },
    "shopID": {
      "type": [
        "string",
        "null"
      ],
      "format": "uuid",
      "description": "ID of the shop the product is linked to (UUID); `null` when it is not linked to a shop."
    },
    "storages": {
      "readOnly": true,
      "description": "Storages holding the product in byrd warehouses. Only included when requested with `include_storages=true`.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/ProductStorage"
      }
    },
    "lots": {
      "readOnly": true,
      "description": "Lots (batches) of the product. Only included when listing products with `include_lots=true`.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/LotIncludedInProduct"
      }
    },
    "packagingUnits": {
      "maxItems": 1,
      "description": "Packaging unit of the product: a pack of several units with its own barcode. At most one; its barcode is required when you create the product and must differ from the product barcodes.",
      "type": "array",
      "items": {
        "$ref": "#/$defs/ProductPackagingUnit"
      }
    },
    "dangerousGoods": {
      "description": "Dangerous goods the product contains, one entry per UN number. Bundles cannot have any: add them to the ingredients instead.",
      "type": [
        "array",
        "null"
      ],
      "items": {
        "$ref": "#/$defs/ProductDangerousGoods"
      }
    },
    "dangerousGoodsMSDSURL": {
      "type": [
        "string",
        "null"
      ],
      "description": "HTTPS link to the material safety data sheet (MSDS) of the dangerous goods in the product."
    },
    "isDangerousGoods": {
      "type": "boolean",
      "readOnly": true,
      "description": "Whether the product contains dangerous goods; for a bundle, whether any of its ingredients does."
    },
    "bsku": {
      "type": [
        "string",
        "null"
      ],
      "default": null,
      "readOnly": true,
      "pattern": "^BSKU-([A-Z0-9]){10}$",
      "description": "Unique SKU byrd generates for the product, unrelated to your `sku`."
    },
    "skipBarcodePick": {
      "type": "boolean",
      "readOnly": true,
      "description": "Whether the warehouse may skip scanning the product barcode when picking and packing. Set by byrd."
    },
    "dimensions": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "readOnly": true,
          "description": "ID of the dimensions record (UUID)."
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "readOnly": true,
          "description": "When the record was created (ISO 8601)."
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "readOnly": true,
          "description": "When the record was last changed (ISO 8601)."
        },
        "length": {
          "type": [
            "number",
            "null"
          ],
          "minimum": 0.01,
          "description": "Length in cm; at least 0.01."
        },
        "width": {
          "type": [
            "number",
            "null"
          ],
          "minimum": 0.01,
          "description": "Width in cm; at least 0.01."
        },
        "height": {
          "type": [
            "number",
            "null"
          ],
          "minimum": 0.01,
          "description": "Height in cm; at least 0.01."
        },
        "weight": {
          "type": [
            "number",
            "null"
          ],
          "minimum": 0.001,
          "description": "Weight in kg; at least 0.001."
        },
        "sizeGroup": {
          "type": [
            "string",
            "null"
          ],
          "enum": [
            "S",
            "XS",
            "M",
            "L",
            "XL",
            "XXL",
            "CUSTOM",
            "PAL",
            null
          ],
          "description": "Size group used for charging, based on the sum of the shortest and the longest side.\n\n- `XS`: flat items such as envelopes and polybags\n- `S`: up to 35 cm\n- `M`: 35 cm or more\n- `L`: 65 cm or more\n- `XL`: 95 cm or more\n- `XXL`: 115 cm or more\n- `CUSTOM`: custom size, mostly for items with a variable height\n- `PAL`: pallets"
        },
        "isHeightVariable": {
          "type": "boolean",
          "description": "Whether the height can vary, for example for soft or compressible items. Defaults to `false`."
        },
        "createdBy": {
          "readOnly": true,
          "description": "Who provided the dimensions.\n\n- `CUSTOMER`: you\n- `PARTNER`: the warehouse, which measured the product",
          "type": "string",
          "enum": [
            "CUSTOMER",
            "PARTNER"
          ]
        },
        "scannerIdentifier": {
          "type": [
            "string",
            "null"
          ],
          "readOnly": true,
          "description": "Identifier of the scanner the warehouse measured the dimensions with; `null` when they were not scanned."
        }
      },
      "description": "Size and weight of one unit of the product. The weight is needed for shipments leaving the EU or the UK; a `prepacked_product` needs all dimensions and a `sizeGroup`."
    },
    "changeRequests": {
      "description": "Changes the warehouse asks you to make to the product settings, one per `info`; `null` when there are none. Answer them by sending this list back with a `status` of `accepted` or `declined`.",
      "type": [
        "array",
        "null"
      ],
      "items": {
        "$ref": "#/$defs/ProductChangeRequest"
      }
    },
    "dimensionsPhotoURLs": {
      "type": [
        "array",
        "null"
      ],
      "readOnly": true,
      "description": "Links to the photos the warehouse took when it measured the product; `null` when there are none.",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "name"
  ],
  "$defs": {
    "Barcode": {
      "type": "object",
      "properties": {
        "value": {
          "type": "string",
          "minLength": 1,
          "maxLength": 48,
          "description": "Value encoded in the barcode, 1 to 48 characters; which characters are allowed depends on `barcodeType`."
        },
        "barcodeType": {
          "description": "Symbology of the barcode; required when `value` is set.\n\n- `ean_13`: EAN-13\n- `code_128`: Code 128\n- `gs1_128`: GS1-128\n- `qr_code`: QR code",
          "type": "string",
          "enum": [
            "ean_13",
            "code_128",
            "gs1_128",
            "qr_code"
          ]
        },
        "isPrimary": {
          "type": "boolean",
          "description": "Whether this is the primary barcode of the product, mirrored in its `barcode` and `barcodeType` fields. At most one barcode can be primary. Defaults to `false`."
        }
      },
      "required": [
        "value"
      ],
      "title": "Barcode"
    },
    "Bundle": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "readOnly": true,
          "description": "ID of the link between the bundle and this ingredient (UUID)."
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "readOnly": true,
          "description": "When the record was created (ISO 8601)."
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "readOnly": true,
          "description": "When the record was last changed (ISO 8601)."
        },
        "ingredient": {
          "readOnly": true,
          "description": "Details of the ingredient product.",
          "allOf": [
            {
              "$ref": "#/$defs/Product"
            }
          ]
        },
        "ingredientID": {
          "type": "string",
          "format": "uuid",
          "writeOnly": true,
          "description": "ID of the product to include in the bundle (UUID). It must be a regular product, a prepacked product, a packaging material or a branding item, and cannot be changed afterwards."
        },
        "quantity": {
          "type": "integer",
          "description": "Number of units of the ingredient in one bundle."
        }
      },
      "required": [
        "ingredientID",
        "quantity"
      ],
      "title": "Bundle"
    },
    "LotIncludedInProduct": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "readOnly": true,
          "description": "ID of the lot (UUID)."
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "readOnly": true,
          "description": "When the record was created (ISO 8601)."
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "readOnly": true,
          "description": "When the record was last changed (ISO 8601)."
        },
        "productID": {
          "type": "string",
          "format": "uuid",
          "description": "ID of the product the lot belongs to (UUID); a physical product, not a bundle. It cannot be changed after the lot is created."
        },
        "lotNumber": {
          "type": "string",
          "description": "Lot (batch) number, 1 to 64 characters; unique per product."
        },
        "expiryDate": {
          "type": [
            "string",
            "null"
          ],
          "format": "date",
          "description": "Date the lot expires (ISO 8601 date); cannot be in the past. `null` when the lot does not expire."
        },
        "notBefore": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time",
          "description": "First moment units of the lot may be shipped (ISO 8601, UTC); must be before `notAfter`. `null` for no limit."
        },
        "notAfter": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time",
          "description": "Last moment units of the lot may be shipped (ISO 8601, UTC); cannot be in the past. When you do not set it, it is derived from `expiryDate` if byrd has a minimum remaining shelf life configured for your products. `null` for no limit."
        },
        "activated": {
          "type": "boolean",
          "description": "Whether units of the lot can be picked for shipments; stock of a deactivated lot is unavailable. Defaults to `true`."
        }
      },
      "required": [
        "lotNumber",
        "productID"
      ],
      "title": "Lot included in product"
    },
    "Product": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "format": "uuid",
          "readOnly": true,
          "description": "ID of the product (UUID)."
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "readOnly": true,
          "description": "When the record was created (ISO 8601)."
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "readOnly": true,
          "description": "When the record was last changed (ISO 8601)."
        },
        "active": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "Whether the product can be shipped. Defaults to `true`."
        },
        "barcode": {
          "type": [
            "string",
            "null"
          ],
          "maxLength": 48,
          "description": "Value of the primary barcode printed on the product, at most 48 characters; mirrors the primary entry of `barcodes`. `null` when the product has no barcode."
        },
        "barcodeType": {
          "description": "Symbology of `barcode`; required when `barcode` is set.\n\n- `ean_13`: EAN-13\n- `code_128`: Code 128\n- `gs1_128`: GS1-128\n- `qr_code`: QR code",
          "type": [
            "string",
            "null"
          ],
          "enum": [
            "ean_13",
            "code_128",
            "gs1_128",
            "qr_code",
            null
          ]
        },
        "barcodes": {
          "description": "All barcodes printed on the product, at most one of them primary. When you send both `barcode` and `barcodes`, `barcode` must match the primary entry.",
          "type": [
            "array",
            "null"
          ],
          "items": {
            "$ref": "#/$defs/Barcode"
          }
        },
        "customsTariffNumber": {
          "type": [
            "string",
            "null"
          ],
          "pattern": "^([0-9]{6}|[0-9]{8}|[0-9]{10})$",
          "description": "Harmonised System (HS) tariff code of the product: 6, 8 or 10 digits. Required for shipments leaving the EU or the UK."
        },
        "customsValue": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "value": {
              "type": "number",
              "description": "Amount, as a string with two decimals separated by a dot."
            },
            "currency": {
              "type": "string",
              "pattern": "^[A-Z]{3}$",
              "description": "Currency (ISO 4217 code, e.g. `EUR`)."
            },
            "taxFactor": {
              "type": [
                "number",
                "null"
              ],
              "description": "Tax factor of the price, for example `1.19` for 19% VAT; `null` when not set."
            }
          },
          "required": [
            "currency",
            "value"
          ],
          "description": "Value declared to customs for the product when the shipment item has no price, for example for a free gift; `null` for none. Not the purchase price."
        },
        "description": {
          "type": [
            "string",
            "null"
          ],
          "description": "Free-text description of the product."
        },
        "ean": {
          "type": [
            "string",
            "null"
          ],
          "description": "European Article Number (EAN) of the product, passed on as its GTIN in customs data."
        },
        "isbn": {
          "type": [
            "string",
            "null"
          ],
          "description": "International Standard Book Number (ISBN) of the product, passed on as its GTIN in customs data when it has no EAN or UPC."
        },
        "lotsEnabled": {
          "type": "boolean",
          "description": "Whether lots (batches) of the product are tracked when it is inbounded and shipped. Bundles cannot be lot tracked. Defaults to `false`."
        },
        "packagingUnitEnabled": {
          "type": "boolean",
          "description": "Whether the product also comes in packaging units holding several units, which the warehouse can pick as a whole. Defaults to `false`."
        },
        "serialNumberEnabled": {
          "type": "boolean",
          "description": "Whether serial numbers of the product are recorded when it is shipped. Defaults to `false`."
        },
        "serialNumberRegex": {
          "type": [
            "string",
            "null"
          ],
          "description": "Regular expression the serial numbers recorded when shipping the product must match; `null` for no check."
        },
        "inventorySerialNumberEnabled": {
          "type": "boolean",
          "description": "Whether serial numbers are also tracked in inventory, from inbounding onwards. Requires `serialNumberEnabled`. Defaults to `false`."
        },
        "name": {
          "type": "string",
          "minLength": 1,
          "description": "Name of the product; at least one character."
        },
        "originCountryCode": {
          "type": [
            "string",
            "null"
          ],
          "pattern": "^[A-Z]{2}$",
          "description": "Country the product was made in (ISO 3166-1 alpha-2); `UK` is stored as `GB`. Required for shipments leaving the EU or the UK."
        },
        "organic": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "Whether the product is organic and needs special storage and shipping conditions. Bundles cannot be organic. Defaults to `false`."
        },
        "grs": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "Whether the product complies with the Global Recycled Standard (GRS) and needs specific storage conditions. Defaults to `false`."
        },
        "fragile": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "Whether the product is fragile and needs special packaging. For a bundle it is derived from the ingredients and cannot be set. Defaults to `false`."
        },
        "productID": {
          "type": [
            "string",
            "null"
          ],
          "description": "Deprecated. ID of the article in your shop system; required when `shopID` is set."
        },
        "productType": {
          "type": [
            "string",
            "null"
          ],
          "description": "Type of the product. Defaults to `product`; `bundle`, `supplementary` and `packaging_material` cannot be changed afterwards.\n\n- `product`: a regular physical product\n- `bundle`: a group of other products sold under one SKU, see `bundleIngredients`\n- `prepacked_product`: a product shipped in its own packaging\n- `packaging_material`: packaging material, such as boxes or fillers\n- `branding`: branded material packed into shipments, not counted as a product item\n- `supplementary`: a product only shipped together with another product\n- `alias`: another SKU for an existing product, sharing its stock\n- `marketing`: marketing material"
        },
        "purchasePrice": {
          "type": [
            "object",
            "null"
          ],
          "properties": {
            "value": {
              "type": "number",
              "description": "Amount, as a string with two decimals separated by a dot."
            },
            "currency": {
              "type": "string",
              "pattern": "^[A-Z]{3}$",
              "description": "Currency (ISO 4217 code, e.g. `EUR`)."
            },
            "taxFactor": {
              "type": [
                "number",
                "null"
              ],
              "description": "Tax factor of the price, for example `1.19` for 19% VAT; `null` when not set."
            }
          },
          "required": [
            "currency",
            "value"
          ],
          "description": "Purchase price of one unit, used to insure shipments. Use the purchase price, not the retail price; bundles cannot have one."
        },
        "purchasePriceEvidenceURL": {
          "type": [
            "string",
            "null"
          ],
          "description": "HTTPS link to a document proving the purchase price, such as an invoice."
        },
        "reorderPoint": {
          "type": [
            "integer",
            "null"
          ],
          "minimum": 0,
          "description": "Available stock level at or below which the product is reported as low on stock, for example in the daily notification email if you enabled it. Defaults to `0`."
        },
        "retailPrice": {
          "type": [
            "number",
            "null"
          ],
          "minimum": 0,
          "description": "Retail price of one unit, for your reference; at least 0."
        },
        "sku": {
          "type": [
            "string",
            "null"
          ],
          "minLength": 1,
          "description": "Your stock keeping unit (SKU) for the product, unique among your products. It must match the SKU your sales channel sends on order lines."
        },
        "upc": {
          "type": [
            "string",
            "null"
          ],
          "description": "Universal Product Code (UPC) of th

# --- truncated at 32 KB (61 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/byrd/refs/heads/main/json-schema/byrd-product-schema.json

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/byrd-product"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.