curl --request POST \
--url https://api.cubbo.com/v1/products \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"store_id": 1234,
"name": "Widget Pro Black",
"description": "<p>A professional-grade widget.</p>",
"skus": [
"SKU-RED-M"
],
"upc": "7501234567890",
"price": 99.99,
"weight": 500,
"weight_unit": "g",
"length": 10,
"width": 8,
"height": 5,
"dimension_unit": "cm",
"is_fragile": false,
"has_expiration": true,
"freshness": 180,
"tax_code": "3401.11.90",
"origin": "NATIONAL"
}
'{
"id": 12345,
"name": "Widget Pro Black",
"billing_name": null,
"description": "<p>A professional-grade widget.</p>",
"has_imei": false,
"is_fragile": false,
"is_kit": false,
"bar_code": "7501234567890",
"is_dropshipping": false,
"has_expiration": true,
"freshness": 180,
"is_scannable": true,
"price": "99.99",
"weight": 0.5,
"product_codes": [
{
"id": 9001,
"sku": "SKU-RED-M"
}
]
}Inventory
Create a product
Creates a product in a store, with its SKUs, barcode (UPC/EAN), logistics data (weight and
dimensions) and fiscal data. Send a single product (skus + upc) or a product with
variants (has_variants: true + variants[]), which creates one product per variant.
- Barcode and SKU rules. Both the barcode (
upc) and every SKU must be unique within the store, and a barcode may not reuse a value already registered as a SKU of another product (or the other way round). The request is rejected with 422 when any of them is already taken. SKUs are trimmed of surrounding whitespace. - Weight.
weightis stored in kilograms. Sendweight_unit: "g"(or"gr") to send grams; the value is converted to kg and the stored unit becomeskg. Any other unit is stored as sent, without conversion. - Dimensions.
length,widthandheightmust be between 0.01 and 999999.99;dimension_unitdefaults tocm. - Dropshipping.
is_dropshipping: truemarks a product that Cubbo does not stock. It cannot be combined withhas_variants. - Non-scannable (marketing) products.
is_scannable: falserequires aproduct_imageand cannot be combined withhas_variants. - Expiration. When
has_expirationis true you must also sendfreshness(minimum shelf-life in days required at receiving), or the product fails validation. - Kits (bundles). This endpoint does not create kits: the created product always has
is_kit: false. Kits are configured from the Cubbo app; their components are returned byGET /inventoryaskit_childs. - Fiscal data (Brazil).
tax_codeis the product’s NCM code (Brazilian fiscal classification) or the id of an NCM configuration already registered in the store; an NCM that is not configured for the store is rejected.origin,extipiandfci_keyfeed the NF-e (Brazilian electronic invoice). - Variants. Each variant becomes an independent product named
"<name> <variant name>", with its ownskusandbar_code. The response is then an array of products in the full product format instead of a single product. - Concurrency. Two simultaneous requests for the same SKUs in the same store are de-duplicated: the second receives
202 Acceptedwhile the first is still processing. - Integration accounts. For API users linked to certain marketplace integrations the endpoint behaves as an upsert by barcode: an existing barcode gets the new SKU added (or its name and weight updated when the SKU already exists),
has_expirationis forced to true with a defaultfreshnessof 180 days,master_box_quantityregisters the units per master box for the SKU, and a SKU that already belongs to another product can be migrated to the new product whenmigrate_skuis true or the store has automatic SKU migration enabled. Variants are not supported for these accounts, andweight_unitis required.
POST
/
products
curl --request POST \
--url https://api.cubbo.com/v1/products \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"store_id": 1234,
"name": "Widget Pro Black",
"description": "<p>A professional-grade widget.</p>",
"skus": [
"SKU-RED-M"
],
"upc": "7501234567890",
"price": 99.99,
"weight": 500,
"weight_unit": "g",
"length": 10,
"width": 8,
"height": 5,
"dimension_unit": "cm",
"is_fragile": false,
"has_expiration": true,
"freshness": 180,
"tax_code": "3401.11.90",
"origin": "NATIONAL"
}
'{
"id": 12345,
"name": "Widget Pro Black",
"billing_name": null,
"description": "<p>A professional-grade widget.</p>",
"has_imei": false,
"is_fragile": false,
"is_kit": false,
"bar_code": "7501234567890",
"is_dropshipping": false,
"has_expiration": true,
"freshness": 180,
"is_scannable": true,
"price": "99.99",
"weight": 0.5,
"product_codes": [
{
"id": 9001,
"sku": "SKU-RED-M"
}
]
}Authorizations
Body
application/json
Body of POST /products. skus and upc are required for a single product; variants is required when has_variants is true.
Brazil only. Fiscal origin of the goods for the NF-e.
Available options:
NATIONAL, FOREIGN_IMPORTED, FOREIGN_ACQUIRED_INTERNALLY, NATIONAL_40_70_IMPORTED, NATIONAL_MANUFACTURED, NATIONAL_0_40_IMPORTED, FOREIGN_DIRECT_IMPORT, FOREIGN_ACQUIRED_INTERNALLY_WITHOUT_NATIONAL_SIMILAR, NATIONAL_70_IMPORTED Example:
"NATIONAL"
Response
Product created. A single product returns one object; a has_variants request returns an array with one full product per variant.
- object
- object[]
The product returned by POST /products for a single (non-variant) request.