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. |
JSON Schema
{
"$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.
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.