Editar producto
const url = 'https://api.posdata.so/public/v1/products/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0';const options = { method: 'PATCH', headers: {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}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url https://api.posdata.so/public/v1/products/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --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 }'Cambia nombre, precios, categoría, SKU, clase fiscal o estado. El cambio viaja a las cajas SIN stock, unidad ni tipo: cada caja conserva los suyos, así que nunca toca el inventario. Requiere que todas las cajas del negocio tengan la versión de Posdata que lo soporta; si alguna no la tiene responde 409 DEVICES_OUTDATED con la lista y no modifica nada. 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 ruta
Sección titulada «Parámetros de ruta»Cuerpo de la peticiónobligatorio
Sección titulada «Cuerpo de la peticiónobligatorio»El stock no se edita aquí: usa POST /inventory/movements. La unidad, la venta por peso y el tipo de producto tampoco (cambian el significado del stock existente).
object
Si cambias base_price sin enviar final_price, final_price toma el mismo valor.
Precio al que vende la caja.
Respuestas
Sección titulada «Respuestas»Actualizado
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" }}No existe en esta cuenta (NOT_FOUND).
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" }}