Products

Create a product variant

Create a variant under a product with its own SKU, barcode, optional price override and stock settings.

post/companies/{company}/products/{product}/variants

Request

  • Base URL: https://api.factuarea.com/v1
  • URL: https://api.factuarea.com/v1/companies/{company}/products/{product}/variants
  • Auth: one of:
    • HTTP bearer
    • API key in header X-API-Key

Path parameters

companystring uuid required

Public identifier (UUID v7) of the company. Get it from GET /v1/me (data.scope[].id).

productstring uuid required

Public identifier (UUID v7) of the product.

Headers

Idempotency-Keystring
Example:01928f10-7c0e-7c4a-9b7d-2f8a6e3c1d4b

Client-generated opaque key (up to 255 characters; UUID v7 recommended) that makes retries safe: the first response is cached and replayed for repeats without re-executing the mutation. Reusing a key with a different body returns 422 idempotency_key_reused; the values of secret fields (password, secret…) count as part of the body, so retrying with a corrected secret under the same key is a different request, never the replay of the earlier answer. See the Idempotency guide.

Factuarea-Versionstring date
Example:2026-06-01

Pin the API version (YYYY-MM-DD, Stripe-style date versioning) for this request; omit to use the key's pinned version, or the latest if none. Unsupported version → 400 unsupported_api_version; malformed → 400 parameter_invalid_format. The effective version is echoed in the Factuarea-Version response header. See the Versioning guide.

Request body

namestring required
skustring nullable
barcodestring nullable
base_price_overridenumber nullable

Own price of the variant PER BASE UNIT; null keeps the price of the product.

unit_cost_overridenumber nullable

Own cost of the variant PER BASE UNIT.

price_overridenumber nullable

Published alias of base_price_override.

cost_overridenumber nullable

Published alias of unit_cost_override.

manage_stockboolean required
stocknumber required
low_stock_thresholdnumber nullable
specificationsobject nullable
activeboolean
gross_weight_kgnumber nullable

Own gross transport weight of the variant, in kilograms PER BASE UNIT: up to four decimal places, greater than zero. It overrides the product weight for this variant. Omit it to keep the current value; send null to clear it and inherit the product weight again. Rejected with 422 gross_weight_not_allowed for services and mass base units (KGM, GRM).

Response

Example response

{
  "data": {
    "id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8b22",
    "object": "product_variant",
    "product_id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a09",
    "name": "Superior",
    "sku": "VINO-RIOJA-SUP",
    "barcode": "8437012345685",
    "base_price_override": "3.90",
    "unit_cost_override": "2.40",
    "gross_weight_kg": "0.9500",
    "manage_stock": true,
    "stock": "25.0000",
    "low_stock_threshold": "5.0000",
    "specifications": {
      "crianza": "12 meses en barrica"
    },
    "active": true
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.