Crear producto
const url = 'https://api.posdata.so/public/v1/products';const options = { method: 'POST', headers: { 'Idempotency-Key': 'example', Authorization: 'Bearer <token>', 'Content-Type': 'application/json' }, body: '{"name":"example","description":"example","description_short":"example","sku":"example","category_id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","base_price":1,"final_price":1,"percent_discount":1,"tax_class":"standard","active":true,"sellable":true,"base_unit":"und","sold_by_weight":false,"initial_stock":1,"warehouse_id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.posdata.so/public/v1/products \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --header 'Idempotency-Key: example' \ --data '{ "name": "example", "description": "example", "description_short": "example", "sku": "example", "category_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "base_price": 1, "final_price": 1, "percent_discount": 1, "tax_class": "standard", "active": true, "sellable": true, "base_unit": "und", "sold_by_weight": false, "initial_stock": 1, "warehouse_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" }'Crea un producto sin variantes. Con initial_stock registra además un movimiento de entrada en la bodega indicada. El cambio llega a las cajas del negocio por su sincronización normal (en segundos si están en línea; si están sin conexión, al reconectarse).
Permiso requerido: products:write.
Autorización
Sección titulada «Autorización»Parámetros
Sección titulada «Parámetros»Parámetros de cabecera
Sección titulada «Parámetros de cabecera»Obligatorio en todo POST. Un valor único por operación (p. ej. un UUID); reutilízalo solo para reintentar la MISMA operación. Válido 24 h.
Cuerpo de la peticiónobligatorio
Sección titulada «Cuerpo de la peticiónobligatorio»object
Precio base en pesos.
Precio al que vende la caja. Si no se envía, es igual a base_price.
Clase fiscal del ítem. standard hereda del perfil fiscal del negocio.
false = insumo que no se vende solo.
Requiere base_unit g, kg o lb.
Crea además un movimiento de entrada con este stock.
Bodega del stock inicial. Por defecto, la bodega predeterminada.
Respuestas
Sección titulada «Respuestas»Creado
Producto del catálogo. Precios en pesos enteros, digitados como los digita el negocio: con impuestos incluidos cuando su perfil fiscal dice pricesIncludeTax (lo normal), antes de impuestos si no.
object
composite = se arma desde una receta y no descuenta su propio stock.
false = insumo que no se vende por sí solo.
Clase fiscal del ítem. standard hereda del perfil fiscal del negocio.
Precio de lista, antes del descuento propio del producto.
Precio al que el POS vende. Si el producto no tiene descuento es igual a base_price.
Descuento del producto sobre base_price, en porcentaje (0-100, puede tener decimales).
Unidad base (und, g, kg, lb, oz, ml, l, doc). Stock y costo se expresan en ella.
Se vende por peso: la cantidad de la línea es un peso en base_unit.
Costo promedio ponderado por unidad base (informativo).
Variantes vigentes (no eliminadas).
Variante de un producto. Precios en pesos enteros, digitados como los digita el negocio: con impuestos incluidos cuando su perfil fiscal dice pricesIncludeTax (lo normal), antes de impuestos si no.
object
Nombre de la variante (“Talla M / Rojo”).
Precio de lista, antes del descuento propio del producto.
Precio al que el POS vende esta variante. Si es 0 en la variante, el POS usa el del producto.
Descuento del producto sobre base_price, en porcentaje (0-100, puede tener decimales).
Ejemplo
{ "object": "product", "kind": "simple", "tax_class": "standard", "variants": [ { "object": "product_variant" } ]}Petición inválida (VALIDATION_ERROR, INVALID_JSON, INVALID_CURSOR).
object
object
Explicación en español, con el siguiente paso.
Campo que causó el error, si aplica.
Ejemplo
{ "error": { "code": "UNAUTHENTICATED" }}Sin API key válida (UNAUTHENTICATED, INVALID_API_KEY, API_KEY_REVOKED, API_KEY_EXPIRED, API_KEY_WRONG_ENVIRONMENT, ACCOUNT_INACTIVE).
object
object
Explicación en español, con el siguiente paso.
Campo que causó el error, si aplica.
Ejemplo
{ "error": { "code": "UNAUTHENTICATED" }}Sin permiso (PLAN_REQUIRED, INSUFFICIENT_SCOPE, BROWSER_REQUESTS_NOT_ALLOWED).
object
object
Explicación en español, con el siguiente paso.
Campo que causó el error, si aplica.
Ejemplo
{ "error": { "code": "UNAUTHENTICATED" }}Conflicto (CONFLICT, SKU_ALREADY_EXISTS, IDEMPOTENCY_IN_PROGRESS, NO_WAREHOUSE, DEVICES_OUTDATED).
object
object
Explicación en español, con el siguiente paso.
Campo que causó el error, si aplica.
Ejemplo
{ "error": { "code": "UNAUTHENTICATED" }}Regla de negocio o idempotencia (IDEMPOTENCY_KEY_REUSED, VARIANT_STOCK_UNSUPPORTED, COMPOSITE_STOCK_UNSUPPORTED).
object
object
Explicación en español, con el siguiente paso.
Campo que causó el error, si aplica.
Ejemplo
{ "error": { "code": "UNAUTHENTICATED" }}Límite de peticiones (RATE_LIMITED). Respeta Retry-After.
object
object
Explicación en español, con el siguiente paso.
Campo que causó el error, si aplica.
Ejemplo
{ "error": { "code": "UNAUTHENTICATED" }}Error interno (INTERNAL_ERROR). Reintenta y comparte el request_id si persiste.
object
object
Explicación en español, con el siguiente paso.
Campo que causó el error, si aplica.
Ejemplo
{ "error": { "code": "UNAUTHENTICATED" }}