Saltar al contenido principal
Historial de versionesCambiado
Una restauración deja fuera un slug ocupado y conserva las variantes cuando no queda ninguna de la versión

Restaurar una versión

Restaurar una versión · POST /api/v1/orgs/{orgId}/core/history/{versionId}/restore
  • Un slug que ahora tiene otro producto ya no rechaza la restauración con 409: el producto conserva su propio slug, se restaura el resto, y notRestored lo responde como catalog.slug_taken con su slug.
  • Una versión de la que el producto ya no tiene ninguna variante ya no rechaza la restauración con 422: el producto conserva sus opciones y sus variantes, se restaura el resto, y notRestored responde cada variante de la versión como catalog.variant_deleted con su variantId.
ProductosCambiado
Un costo por encima del MAP o del MSRP se avisa una vez

Crear un producto

Crear un producto · POST /api/v1/orgs/{orgId}/catalog/products
  • Sus warnings ya no incluyen catalog.map_below_cost ni catalog.msrp_below_cost: un costo por encima del MAP o del MSRP se avisa una vez, como catalog.cost_above_map o catalog.cost_above_msrp.

Actualizar un producto

Actualizar un producto · PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}
  • Sus warnings ya no incluyen catalog.map_below_cost ni catalog.msrp_below_cost: un costo por encima del MAP o del MSRP se avisa una vez, como catalog.cost_above_map o catalog.cost_above_msrp.

Actualizar los precios de un producto

Actualizar los precios de un producto · PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}/prices
  • Sus warnings ya no incluyen catalog.map_below_cost ni catalog.msrp_below_cost: un costo por encima del MAP o del MSRP se avisa una vez, como catalog.cost_above_map o catalog.cost_above_msrp.

Poner el estado de un producto

Poner el estado de un producto · PUT /api/v1/orgs/{orgId}/catalog/products/{productId}/status
  • Sus warnings ya no incluyen catalog.map_below_cost ni catalog.msrp_below_cost: un costo por encima del MAP o del MSRP se avisa una vez, como catalog.cost_above_map o catalog.cost_above_msrp.
ProductosNuevo
Duplica un producto

Duplicar un producto

Duplicar un producto · POST /api/v1/orgs/{orgId}/catalog/products/{productId}/duplicate
  • Copia un producto como un nuevo borrador con su título seguido de (Copy), luego (Copy 2) y así sucesivamente, con su descripción, sus opciones y sus variantes con sus precios, costos, medidas y ajustes de inventario, y responde 201 con la copia.
  • Las variantes de la copia no tienen identificadores: ni SKU, GTIN, ISBN, número de parte ni código propio.
  • Necesita el permiso de duplicar productos, y respeta un Idempotency-Key.
Historial de versionesCambiado
Restaura un producto a una versión anterior

Listar las versiones de un registro

Listar las versiones de un registro · GET /api/v1/orgs/{orgId}/core/history
  • Lista las versiones de un producto con type=catalog.product y el id del producto: una cuando se crea, y una por cada guardado de su contenido, sus precios o su estado que cambia algo, guardadas 30 días y hasta 200.

Restaurar una versión

Restaurar una versión · POST /api/v1/orgs/{orgId}/core/history/{versionId}/restore
  • Restaura un producto a una de sus versiones, con el expectedVersion en que se leyó, como un solo guardado de su contenido, sus precios, su estado, sus códigos, sus medidas, sus datos de aduana y su seguimiento de stock; su stock disponible y el de su proveedor se quedan como están.
  • Restaurar otros precios necesita también el permiso de editar precios, otro estado el de poner el estado de un producto, y quitar una variante añadida desde entonces el de eliminar variantes.
  • Responde en notRestored lo que deja fuera: una variante eliminada desde entonces, como catalog.variant_deleted con su variantId, y un SKU, GTIN o ISBN que ahora tiene otro producto, como catalog.identifier_taken con su type y su value.
ProductosNuevo
Elimina un producto

Eliminar un producto

Eliminar un producto · DELETE /api/v1/orgs/{orgId}/catalog/products/{productId}
  • Elimina un producto para siempre con todas sus variantes y responde 204; sus publicaciones en cada tienda se liberan, y no se puede deshacer.
  • Necesita el permiso de eliminar productos.
ProductosNuevo
Pon el estado de un producto

Poner el estado de un producto

Poner el estado de un producto · PUT /api/v1/orgs/{orgId}/catalog/products/{productId}/status
  • Pone un producto en draft, active, unlisted o archived, desde cualquier otro, con el expectedVersion en que se leyó; un producto guardado desde entonces responde core.version_conflict, y el estado que ya tiene no cambia nada.
  • Necesita el permiso de poner el estado de un producto, aparte del de editar productos.
ProductosCambiado
Pon la descripción de un producto en HTML

Crear un producto

Crear un producto · POST /api/v1/orgs/{orgId}/catalog/products
  • Recibe el descriptionHtml del producto, su descripción en HTML. Conserva párrafos, encabezados, listas y listas de tareas, citas, bloques de código, imágenes, tablas, líneas horizontales, saltos de línea, enlaces, estilos de texto, color, resaltado, alineación y videos de YouTube, Vimeo o directos; todo lo demás, como un script, un atributo de evento o el marco de otro sitio, se quita y se conserva su texto, y una descripción que queda vacía se guarda como ninguna.

Actualizar un producto

Actualizar un producto · PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}
  • Recibe el mismo descriptionHtml, que se conserva si no se envía y se borra con null.

Obtener un producto

Obtener un producto · GET /api/v1/orgs/{orgId}/catalog/products/{productId}
  • Trae el descriptionHtml del producto tal como se guardó, null si no tiene.

Actualizar los precios de un producto

Actualizar los precios de un producto · PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}/prices
  • La respuesta trae el descriptionHtml del producto, como lo lee obtener un producto.
ProductosCambiado
Pon los pesos, las medidas, los datos de aduana y el control de stock de una variante

Crear un producto

Crear un producto · POST /api/v1/orgs/{orgId}/catalog/products
  • Cada variante recibe su productWeight, productLength, productWidth, productHeight, shippingWeight, shippingLength, shippingWidth y shippingHeight, cada uno un value con su unit (g, kg, oz, lb o ct para un peso, mm, cm, in o yd para una medida); un value de 0 se guarda como ninguno, y uno demasiado pequeño o demasiado grande para guardarse responde 422 catalog.measure_out_of_range.
  • Cada variante recibe su countryOfOrigin, un código de dos letras en mayúsculas o minúsculas como mx, guardado como MX (422 catalog.country_invalid si no), y su hsCode, que se guarda solo con sus dígitos, como HS 8544.49.30-80 guardado como 8544493080, y debe tener de 6 a 13 dígitos del 0 al 9 (422 catalog.hs_code_invalid si no).
  • Cada variante recibe trackInventory y, cuando se controla su stock, su fallbackStock, 0 si no se envía; un fallbackStock para una variante sin control de stock responde 422 catalog.stock_untracked.

Actualizar un producto

Actualizar un producto · PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}
  • Cada variante recibe los mismos campos, cada uno conservado si no se envía y quitado con null, salvo trackInventory, con los mismos cuatro códigos nuevos; una variante que deja de controlar su stock no tiene ninguno de sus tres stocks.

Obtener un producto

Obtener un producto · GET /api/v1/orgs/{orgId}/catalog/products/{productId}
  • Cada variante trae sus ocho medidas en la unidad en que se dio cada una, null donde no tiene, su countryOfOrigin, su hsCode, su trackInventory y su onHandStock, supplierStock y fallbackStock.

Actualizar los precios de un producto

Actualizar los precios de un producto · PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}/prices
  • Cada variante de la respuesta trae sus ocho medidas, su countryOfOrigin, su hsCode, su trackInventory y sus tres stocks, como los lee obtener un producto.
ProductosNuevo
Pon los precios y costos de una variante, revisados por las reglas de precios

Actualizar los precios de un producto

Actualizar los precios de un producto · PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}/prices
  • Cambia price, compareAt, map, msrp, onHandCost, supplierCost y fallbackCost de las variantes que nombra por su id, cada uno un texto decimal en la moneda de la variante como "19.99", null para quitarlo; una variante que no se nombra conserva su dinero. Necesita el permiso de editar precios, aparte del de cambiar el contenido de un producto, y la expectedVersion en que se leyó el producto.
  • Rechaza un precio de comparación por debajo del precio (422 catalog.compare_below_price), un precio por debajo del costo, el costo en existencia o si no el del proveedor (422 catalog.price_below_cost), y un MAP por encima del MSRP (422 catalog.map_above_msrp), cada uno solo cuando la actualización cambia uno de sus precios. Responde 422 catalog.price_invalid por un monto que no es un número o tiene más decimales que su moneda, y 422 catalog.price_out_of_range por uno por debajo de 0 o demasiado grande.
  • Responde ProductSaved, cuyos warnings nombran cada otra regla de precios que la actualización deja rota, como catalog.price_below_map, y un precio por debajo de un costo que la actualización subió (catalog.price_below_cost).

Crear un producto

Crear un producto · POST /api/v1/orgs/{orgId}/catalog/products
  • Cada variante recibe los mismos siete montos, que necesitan el permiso de editar precios (403 core.forbidden sin él), y se revisan todas las reglas de precios: cinco códigos nuevos, y los avisos de precios.

Actualizar un producto

Actualizar un producto · PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}
  • Cada variante de la respuesta trae su currency y sus siete montos como textos decimales en ella, null donde no tiene.

Obtener un producto

Obtener un producto · GET /api/v1/orgs/{orgId}/catalog/products/{productId}
  • Cada variante trae su currency y sus siete montos como textos decimales en ella, null donde no tiene.
ProductosNuevo
Obtén un SKU que ninguna variante de tu organización tiene

Obtener un SKU libre

Obtener un SKU libre · GET /api/v1/orgs/{orgId}/catalog/products/free-sku
  • Responde { sku }, un SKU que ninguna variante de la organización tiene, tres letras, tres dígitos y tres letras como KMT-472-BXR, sin las letras I, L y O ni los dígitos 0 y 1. No queda reservado: dáselo a una variante al crear o actualizar un producto, que responde 409 catalog.identifier_taken si otra variante lo tomó antes.
ProductosCambiado
Dale a cada variante su SKU, GTIN, ISBN, número de pieza y códigos propios

Crear un producto

Crear un producto · POST /api/v1/orgs/{orgId}/catalog/products
  • Cada variante recibe identifiers, una lista en orden de { type, value }, con type uno de sku, gtin, isbn, mpn (el número de pieza) o custom, y una label solo para un código propio. Los espacios se recortan y se juntan; un GTIN o un ISBN se guarda sin espacios ni guiones, con su dígito de control verificado.
  • Responde ProductSaved: el producto y warnings, una lista de { code, params }. catalog.part_number_similar avisa cuando otro producto tiene un número de pieza que se distingue solo en la puntuación, como guiones o espacios, y nunca detiene el guardado.
  • Responde 422 catalog.identifier_invalid con la variante, el lugar del código, su tipo y la razón; 422 catalog.identifier_repeated por un segundo SKU de una variante, un código repetido o una etiqueta propia repetida; y 409 catalog.identifier_taken cuando otra variante de la organización tiene el SKU, el GTIN o el ISBN: tres códigos nuevos.

Actualizar un producto

Actualizar un producto · PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}
  • Cada variante de variants recibe identifiers, que reemplazan todos sus códigos ([] los elimina todos); la variante que no los envía conserva los suyos. Un código que pasa de una variante a otra en la misma actualización se acepta.
  • Responde ProductSaved, con los mismos warnings, y los mismos tres códigos nuevos que al crear un producto.

Obtener un producto

Obtener un producto · GET /api/v1/orgs/{orgId}/catalog/products/{productId}
  • Cada variante tiene identifiers, cada uno con su type, su value guardado y su label (null salvo en un código propio), en su orden.
ProductosCambiado
Agrega, renombra y elimina las opciones y las variantes de un producto al actualizarlo

Actualizar un producto

Actualizar un producto · PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}
  • Recibe options y variants, cada una la lista completa: envía las que conservas con su id, las nuevas sin él, y deja fuera las que quieras eliminar. Si envías options y no variants, la variante que tenga un valor que eliminaste se va con él.
  • Eliminar una variante también necesita el permiso de borrar variantes, catalog.product.delete_variant: sin él la actualización responde 403 core.forbidden.
  • Responde 422 catalog.option_unknown y 422 catalog.variant_unknown, dos códigos nuevos, cuando un id no es del producto, los mismos códigos 422 que al crear un producto cuando las opciones y las variantes no cumplen sus reglas, y 403 core.usage_limit_reached cuando las variantes nuevas pasan el límite de tu plan.
ProductosNuevo
Cambia los datos de un producto, rechazado si alguien lo guardó desde que lo leíste

Actualizar un producto

Actualizar un producto · PATCH /api/v1/orgs/{orgId}/catalog/products/{productId}
  • Cambia el título, el slug, la condición, el tipo de producto, el meta título o la meta descripción de un producto: un campo que no se envía queda como está, y null borra el tipo de producto, el meta título o la meta descripción.
  • Recibe el expectedVersion en que se leyó el producto, y responde el producto con su nueva version.
  • Responde 409 core.version_conflict, un código nuevo, cuando el producto se guardó después de que lo leíste, y 409 catalog.slug_taken cuando otro producto ya usa el slug.
ProductosNuevo
Lista los productos, buscados por título y filtrados por estado

Listar productos

Listar productos · GET /api/v1/orgs/{orgId}/catalog/products
  • Lista los productos de la organización página por página, del cambiado más recientemente al más antiguo o por título, con el título, el slug, el estado y el número de variantes de cada uno.
  • Busca en el título y filtra por estado.
ProductosNuevo
Crea un producto con sus variantes y léelo de vuelta

Obtener un producto

Obtener un producto · GET /api/v1/orgs/{orgId}/catalog/products/{productId}
  • Lee un producto con sus opciones, sus valores y sus variantes.

Crear un producto

Crear un producto · POST /api/v1/orgs/{orgId}/catalog/products
  • Crea un producto con sus opciones y sus variantes, cada variante una combinación de los valores de las opciones.
  • Rechaza un producto sin variantes, con una opción, un valor o una combinación repetidos, o con más de 10 opciones, 250 valores en una opción o 2000 variantes, cada caso con su propio código 422.
  • Responde 409 catalog.slug_taken cuando otro producto ya usa el slug, y 403 core.usage_limit_reached cuando las variantes pasarían la cuota gratuita de la organización.
Cambiado
Dos códigos 403 más en los errores de cada operación
La respuesta de error de cada operación ahora también lista 403 core.module_not_enabled, cuando la organización no activó el módulo al que pertenece la operación, y 403 core.module_read_only, cuando ese módulo está en solo lectura para la organización, con params.module que lo nombra. Estas operaciones ya podían responder ambos códigos.Los dos códigos se suman a la respuesta de error de:core.module_read_only se suma a la respuesta de error de esta operación, que ya listaba core.module_not_enabled:
Nuevo
Se abre el sitio para desarrolladores
El sitio para desarrolladores se abre con la referencia de la API y este registro de cambios, en inglés y en español. Todas las operaciones están en beta hasta el lanzamiento, así que aún pueden cambiar: cada cambio se lista aquí, con las operaciones que toca.