Hi!
This is your API key. Every example on this page is already filled in with it.
FullBAI Seller API
API FullBAI para Sellers
Create, update and delete products in the FullBAI catalog, upload in bulk, and validate stock and price in real time. Every body on this page is the official one.
Alta, actualización y baja de productos en el catálogo FullBAI, envío en lote y validación de stock y precio en tiempo real. Todos los cuerpos de esta página son los oficiales.
Integrate once and the catalog keeps itself up to date. Every operation is a
POST with Content-Type: application/json to the matching endpoint.
Integrá una vez y el catálogo se mantiene solo. Cada operación es un
POST con Content-Type: application/json al endpoint correspondiente.
| OperationOperación | Endpoint | IdentifierIdentificador |
|---|---|---|
| Create productAlta de producto | /webhook/create-product | your skutu sku |
| UpdateActualización | /webhook/update-product | your skutu sku |
| DeleteBaja | /webhook/delete-product | your skutu sku |
| Bulk uploadEnvío en lote | /fullbai/v1/batch | one per itemuno por ítem |
| Stock & priceStock y precio | your endpointtu endpoint | FullBAI calls youFullBAI te consulta |
sku is always yourssku siempre es el tuyoIn every body, sku is your own internal code — the same one you sent
when creating the product. Never the Full-XXXXXXXX you see in the panel: that is our
internal identifier and the API rejects it with 404.
En todos los cuerpos, sku es tu código interno — el mismo que enviaste al dar
de alta el producto. Nunca el Full-XXXXXXXX que ves en el panel: ese es nuestro
identificador interno y la API lo rechaza con 404.
AuthenticationAutenticación
Every request carries your key in the Authorization header. You receive it when
you are onboarded as a partner, and it is per seller: it only reaches your own products.
Toda solicitud lleva tu clave en el header Authorization. La recibís al homologarte
como socio y es por seller: sólo alcanza tus propios productos.
Authorization: Bearer TU_API_KEY Content-Type: application/json
Nothing leaves your machine: it is kept in localStorage and sent to no server.
Nada sale de tu equipo: se guarda en localStorage y no se envía a ningún servidor.
It creates, modifies and deletes products. Treat it like a password: never in repositories, screenshots or the customer's browser. If it leaked, ask support to rotate it.
Con ella se crean, modifican y eliminan productos. Guardala como una contraseña: nunca en repositorios, capturas ni en el navegador del cliente. Si se filtró, pedí la rotación al soporte.
Isolation between sellersAislamiento entre sellers
Every product records which seller it belongs to, and that is checked on every call. Using your
key on another seller's product returns 404 or 403 — it never modifies it.
Cada producto guarda a qué seller pertenece y se verifica en cada llamada. Usar tu clave sobre el
producto de otro seller devuelve 404 o 403 — nunca lo modifica.
Catalog rulesReglas del catálogo
Five rules explain almost every rejection. Reading them now saves retries later.
Cinco reglas explican casi todos los rechazos. Leerlas ahora ahorra reintentos después.
1 · Numbers go as text1 · Los números van como texto
Price, weight and dimensions are sent as strings, not numbers:
"199.99", not 199.99. The exception is stock_quantity,
which is an integer.
Precio, peso y dimensiones se envían como string, no como número:
"199.99" y no 199.99. La excepción es stock_quantity,
que es entero.
2 · Prices go in US dollars2 · Los precios van en dólares
Always USD, with a decimal point. The store handles the conversion to pesos.
Siempre USD, con punto decimal. La conversión a pesos la hace la tienda.
3 · Your SKU is unique within your catalog3 · Tu SKU es único dentro de tu catálogo
You cannot have two products with the same sku. Creating one with a SKU that
already exists returns 409 — it neither creates a duplicate nor overwrites the previous
one. To change something, use update.
No podés tener dos productos con el mismo sku. Un alta con un SKU que ya existe
devuelve 409 — no crea un duplicado ni pisa el anterior. Si querés cambiar algo,
usá actualizar.
The same SKU repeated within one batch is rejected too: the first one goes in and the
rest come back in rejected with code dup_no_lote, telling you which won.
El mismo SKU repetido dentro de un mismo lote también se rechaza: entra el primero y los
demás vuelven en rejected con el código dup_no_lote, indicando cuál ganó.
4 · When updating images, send them all4 · Al actualizar imágenes, mandá todas
The system deletes every current image and registers whatever comes in the body. Send one and the product ends up with one. The first is always the featured image; the rest is the gallery.
El sistema borra todas las imágenes actuales y registra las que vengan en el cuerpo. Si mandás una sola, el producto queda con una sola. La primera es siempre la destacada; el resto es la galería.
5 · Publishing belongs to the store5 · Publicar es de la tienda
New products come in as drafts and the store publishes them after review. You can move a published product to draft, but not publish it.
Los productos nuevos entran como borrador y los publica la tienda tras la curaduría. Vos podés pasar a borrador un producto publicado, pero no publicarlo.
POST Create simple productAlta de producto simple
A product without variations. This is the most common case.
Producto sin variaciones. Es el caso más común.
{
"name": "Producto Ejemplo XYZ 123",
"type": "simple",
"short_description": "Descripción corta y atractiva del producto ejemplo.",
"sku": "SKU1234567",
"regular_price": "199.99",
"sale_price": "99.99",
"stock_quantity": 50,
"dimensions": {
"height": "10.0",
"length": "25.0",
"width": "15.0"
},
"weight": "500",
"categories": [
{ "name": "Categoría Ejemplo" },
{ "name": "Categoría Ejemplo 2" }
],
"images": [
{ "src": "https://tu-cdn.com/51jHP4rL3iL._AC_SL1000_.jpg" },
{ "src": "https://tu-cdn.com/51GrCyeL3KL._AC_SL1000_.jpg" }
],
"attributes": [
{
"name": "COLOR",
"is_optional": false,
"options": ["Azul", "Verde", "Amarillo"],
"variation": true,
"visible": true
},
{
"name": "MARCA",
"is_optional": false,
"options": ["Marca Ejemplo"],
"variation": false,
"visible": true
}
],
"description": "Descripción completa del producto, con especificaciones técnicas y beneficios."
}
curl -X POST https://api.fullbai.com/webhook/create-product \ -H "Authorization: Bearer TU_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Producto Ejemplo XYZ 123", "type": "simple", "sku": "SKU1234567", "regular_price": "199.99", "sale_price": "99.99", "stock_quantity": 50, "weight": "500", "dimensions": { "height": "10.0", "length": "25.0", "width": "15.0" }, "categories": [{ "name": "Categoría Ejemplo" }], "images": [{ "src": "https://tu-cdn.com/imagen.jpg" }], "description": "Descripción completa del producto." }'
// Node 18+ — fetch nativo const res = await fetch('https://api.fullbai.com/webhook/create-product', { method: 'POST', headers: { 'Authorization': 'Bearer TU_API_KEY', 'Content-Type': 'application/json' }, body: JSON.stringify({ name: 'Producto Ejemplo XYZ 123', type: 'simple', sku: 'SKU1234567', regular_price: '199.99', stock_quantity: 50, weight: '500', categories: [{ name: 'Categoría Ejemplo' }], images: [{ src: 'https://tu-cdn.com/imagen.jpg' }] }) }); console.log(res.status, await res.json());
<?php $body = [ 'name' => 'Producto Ejemplo XYZ 123', 'type' => 'simple', 'sku' => 'SKU1234567', 'regular_price' => '199.99', 'stock_quantity' => 50, 'weight' => '500', 'categories' => [['name' => 'Categoría Ejemplo']], 'images' => [['src' => 'https://tu-cdn.com/imagen.jpg']], ]; $ch = curl_init('https://api.fullbai.com/webhook/create-product'); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer TU_API_KEY', 'Content-Type: application/json', ], CURLOPT_POSTFIELDS => json_encode($body), ]); $res = curl_exec($ch); echo curl_getinfo($ch, CURLINFO_HTTP_CODE), ' ', $res;
import requests body = { "name": "Producto Ejemplo XYZ 123", "type": "simple", "sku": "SKU1234567", "regular_price": "199.99", "stock_quantity": 50, "weight": "500", "categories": [{"name": "Categoría Ejemplo"}], "images": [{"src": "https://tu-cdn.com/imagen.jpg"}], } r = requests.post( "https://api.fullbai.com/webhook/create-product", json=body, headers={"Authorization": "Bearer TU_API_KEY"}, timeout=30, ) print(r.status_code, r.json())
FieldsCampos
| FieldCampo | TypeTipo | DescriptionDescripción | |
|---|---|---|---|
name | string | req.obl. | Full product name.Nombre completo del producto. |
type | string | req.obl. | simple oro variable. |
sku | string | req.obl. | Your unique code. It is the key to every operation.Tu código único. Es la llave de todas las operaciones. |
regular_price | string | req.obl. | Regular price in US dollars. "199.99" = US$ 199.99.Precio regular en dólares. "199.99" = US$ 199,99. |
sale_price | string | opt.opc. | Promotional price in US dollars.Precio promocional en dólares. |
stock_quantity | integer | req.obl. | Available quantity. The only number that is not sent as text.Cantidad disponible. Es el único numérico que no va como texto. |
weight | string | req.obl. | Weight in grams.Peso en gramos. |
dimensions | object | req.obl. | height, length, width in centimeters, as text.en centímetros, como texto. |
categories | array | req.obl. | List of { "name": "…" }. The name must match the catalog.Lista de { "name": "…" }. El nombre debe coincidir con el catálogo. |
images | array | req.obl. | List of { "src": "…" }. The first one is the featured image.Lista de { "src": "…" }. La primera es la destacada. |
attributes | array | opt.opc. | Color, size, brand… See attributes.Color, talla, marca… Ver atributos. |
short_description | string | opt.opc. | Short description, for listings.Descripción corta, para listados. |
description | string | opt.opc. | Full description, on the product page.Descripción completa, en la ficha. |
URLs must be publicly accessible, with no login and no signature that expires. We fetch them once and serve them from our CDN. If a URL fails we retry; if it keeps failing, the product is left without that image.
Las URLs deben ser públicamente accesibles, sin login ni firma que venza. Las bajamos una vez y las servimos desde nuestro CDN. Si una URL falla, reintentamos; si sigue fallando, el producto queda sin esa imagen.
POST Create variable productAlta de producto variable
Same endpoint as the simple one, with "type": "variable" and the variations array. Each variation is a sellable product with its own SKU, price and stock.
Mismo endpoint que el simple, con "type": "variable" y el array variations. Cada variación es un producto vendible con su propio SKU, precio y stock.
On the parent product, attributes uses options (plural, the list of possible values). On each variation it uses option (singular, the value of that combination). Mixing them up is the most common error when creating a variable product.
En el producto padre, attributes usa options (plural, lista de valores posibles). En cada variación usa option (singular, el valor de esa combinación). Confundirlos es el error más común del alta variable.
{
"name": "Producto Ejemplo XYZ 123",
"type": "variable",
"short_description": "Descripción corta y atractiva del producto ejemplo.",
"sku": "SKU1230000000",
"regular_price": "199.99",
"sale_price": "99.99",
"stock_quantity": 50,
"dimensions": { "height": "10.0", "length": "25.0", "width": "15.0" },
"weight": "500",
"categories": [{ "name": "Categoría Ejemplo" }],
"images": [{ "src": "https://tu-cdn.com/imagen.jpg" }],
// Padre: options (plural) = valores posibles
"attributes": [
{
"name": "COLOR",
"is_optional": false,
"options": ["Azul", "Verde", "Amarillo"],
"variation": true,
"visible": true
},
{
"name": "TALLA",
"is_optional": false,
"options": ["S", "M", "L", "XL"],
"variation": true,
"visible": true
}
],
// Cada variación: option (singular) = el valor de esta combinación
"variations": [
{
"sku": "711121111",
"regular_price": "16.00",
"weight": "10",
"dimensions": { "height": "1.0", "length": "1.0", "width": "1.0" },
"manage_stock": true,
"stock_quantity": "10",
"image": { "src": "https://tu-cdn.com/azul-s.jpg" },
"attributes": [
{ "name": "COLOR", "is_optional": false, "option": "Azul", "variation": true, "visible": true },
{ "name": "TALLA", "is_optional": false, "option": "S", "variation": true, "visible": true }
]
},
{
"sku": "7111111113",
"regular_price": "16.00",
"weight": "10",
"dimensions": { "height": "1.0", "length": "1.0", "width": "1.0" },
"manage_stock": true,
"stock_quantity": "10",
"image": { "src": "https://tu-cdn.com/verde-m.jpg" },
"attributes": [
{ "name": "COLOR", "is_optional": false, "option": "Verde", "variation": true, "visible": true },
{ "name": "TALLA", "is_optional": false, "option": "M", "variation": true, "visible": true }
]
}
],
"description": "Descripción completa del producto."
}
curl -X POST https://api.fullbai.com/webhook/create-product \ -H "Authorization: Bearer TU_API_KEY" \ -H "Content-Type: application/json" \ --data-binary @producto-variable.json
| Variation fieldCampo de la variación | TypeTipo | DescriptionDescripción | |
|---|---|---|---|
sku | string | req.obl. | The variation's own SKU, different from the parent and from the others.SKU propio de la variación, distinto del padre y de las demás. |
regular_price | string | req.obl. | Price of this combination, in US dollars.Precio de esta combinación, en dólares. |
manage_stock | boolean | req.obl. | true to track stock per variation.para controlar stock por variación. |
stock_quantity | string | req.obl. | Stock of this combination.Stock de esta combinación. |
weight, dimensions | string / object | req.obl. | Its own weight and measurements — used for shipping.Peso y medidas propios — se usan para el envío. |
image | object | opt.opc. | A single { "src": "…" } (singular, not an array).Un solo { "src": "…" } (singular, no array). |
attributes[].option | string | req.obl. | Value of this combination. It must exist in the parent's options.Valor de esta combinación. Debe existir en las options del padre. |
POST Update productActualizar producto
Works for simple and variable products. The product is found by your sku.
Sirve para simples y variables. El producto se encuentra por tu sku.
sku and type plus the fields you want to modify is enough. There is no need to resend the whole structure: whatever is not in the body is left untouched.
Basta sku y type más los campos a modificar. No hace falta reenviar la estructura completa: lo que no venga en el cuerpo no se toca.
{
"sku": "SKU1234567",
"type": "simple",
"regular_price": "399.99",
"sale_price": "90.99",
"stock_quantity": 50
}
{
"name": "Producto Ejemplo XYZ 123",
"type": "simple",
"short_description": "Descripción corta y atractiva del producto ejemplo.",
"sku": "SKU1234567",
"regular_price": "399.99",
"sale_price": "90.99",
"stock_quantity": 50,
"dimensions": { "height": "10.0", "length": "25.0", "width": "15.0" },
"weight": "500",
"categories": [{ "name": "Categoría Ejemplo" }],
// Ojo: estas reemplazan TODAS las imágenes actuales
"images": [
{ "src": "https://tu-cdn.com/destacada.jpg" },
{ "src": "https://tu-cdn.com/galeria-1.jpg" }
],
"description": "Descripción completa del producto."
}
curl -X POST https://api.fullbai.com/webhook/update-product \ -H "Authorization: Bearer TU_API_KEY" \ -H "Content-Type: application/json" \ -d '{"sku":"SKU1234567","type":"simple","stock_quantity":50,"regular_price":"399.99"}'
If you send images, we delete all the current ones and register the new ones, in order: the first is the featured image and the rest is the gallery. Always send every image that should remain, not just the new one. This prevents stale images in the catalog.
Si mandás images, borramos todas las actuales y registramos las nuevas, en orden: la primera es la destacada y el resto es la galería. Mandá siempre todas las que deben quedar, no sólo la nueva. Esto evita imágenes obsoletas en el catálogo.
If you do not send images, the current ones stay untouched.
Si no mandás images, las actuales quedan intactas.
POST Move to draftPasar a borrador
Takes a product out of the store without deleting it. It is an update with the status field.
Saca un producto de la tienda sin eliminarlo. Es un update con el campo status.
{
"sku": "SKU1234567",
"status": "draft"
}
curl -X POST https://api.fullbai.com/webhook/update-product \ -H "Authorization: Bearer TU_API_KEY" \ -H "Content-Type: application/json" \ -d '{"sku": "SKU1234567", "status": "draft"}'
Publishing is not possible through the API. It depends on categorization and the store review, and a product published without that becomes the customer's problem. To publish again, contact support.
Publicar no se puede por API. Depende de la categorización y la conferencia de la tienda, y un producto publicado sin eso se vuelve un problema para el cliente. Para volver a publicar, hablá con el soporte.
| Current statusEstado actual | You sendEnviás | ResponseRespuesta | What happensQué pasa |
|---|---|---|---|
| publishedpublicado | "draft" | 200 | Leaves the store.Sale de la tienda. |
| draftborrador | "draft" | 200 | No effect and no error — safe to retry.Sin efecto y sin error — podés reintentar tranquilo. |
| anycualquiera | "publish" | 403 | publicar_no_permitido |
| anycualquiera | other valueotro valor | 400 | status_invalido. Only draft is accepted.Sólo se acepta draft. |
You can combine it with other fields: {"sku":"…","status":"draft","stock_quantity":0}. But if the status is invalid, the whole request is rejected and no other field is applied — so you never end up with half an update and no way to know which half went through.
Podés combinarlo con otros campos: {"sku":"…","status":"draft","stock_quantity":0}. Pero si el status es inválido, se rechaza la solicitud entera y ningún otro campo se aplica — así nunca te quedás con media actualización sin saber qué mitad pasó.
POST Delete productEliminar producto
Sending the parent product SKU deletes the product and returns a success message. For variable products, the variations are deleted with it.
Enviando el SKU del producto padre, el producto se elimina y se devuelve un mensaje de éxito. En variables, las variaciones se eliminan con él.
{
"sku": "343712"
}
curl -X POST https://api.fullbai.com/webhook/delete-product \ -H "Authorization: Bearer TU_API_KEY" \ -H "Content-Type: application/json" \ -d '{"sku": "343712"}'
The product, its variations and its images are removed from our CDN. There is no trash bin. If you only want to take it off sale, use move to draft.
Se borran el producto, sus variaciones y sus imágenes de nuestro CDN. No hay papelera. Si sólo querés sacarlo de la venta, usá pasar a borrador.
POST Bulk uploadEnvío en lote
For large loads: up to 5,000 items in a single request, mixing creates, updates and deletes. It responds immediately and processes in the background.
Para cargas grandes: hasta 5.000 ítems en una sola solicitud, mezclando altas, actualizaciones y bajas. Responde de inmediato y procesa en segundo plano.
{
"items": [
{ "op": "create", "sku": "ABC123", "name": "Producto A",
"type": "simple", "regular_price": "19.90", "stock_quantity": 10 },
{ "op": "update", "sku": "ABC124", "type": "simple",
"stock_quantity": 0 },
{ "op": "delete", "sku": "ABC125" }
],
"options": { "batch_id": "carga-2026-09-22" }
}
{
"success": true,
"batch_id": "carga-2026-09-22",
"total_received": 3,
"total_queued": 3,
"total_rejected": 0,
"rejected": [],
"elapsed_ms": 2
}
// Con un SKU repetido dentro del mismo lote:
{
"total_received": 5,
"total_queued": 2,
"total_rejected": 3,
"rejected": [
{ "index": 1, "code": "dup_no_lote", "sku": "ABC123", "primeiro_idx": 0 },
{ "index": 3, "code": "dup_no_lote", "sku": "ABC123", "primeiro_idx": 0 },
{ "index": 4, "code": "dup_no_lote", "sku": "ABC123", "primeiro_idx": 0 }
]
}
curl -X POST https://fullbai.com.ar/wp-json/fullbai/v1/batch \ -H "Authorization: Bearer TU_API_KEY" \ -H "Content-Type: application/json" \ --data-binary @lote.json # Estado del lote curl https://fullbai.com.ar/wp-json/fullbai/v1/batch/carga-2026-09-22/status \ -H "Authorization: Bearer TU_API_KEY"
| Response fieldCampo de respuesta | What it meansQué significa |
|---|---|
total_received | Items that arrived in the body.Ítems que llegaron en el cuerpo. |
total_queued | Items accepted and queued.Ítems aceptados y encolados. |
total_rejected | Items discarded before queueing.Ítems descartados antes de encolar. |
rejected[] | One per discarded item, with index and code.Uno por ítem descartado, con index y code. |
batch_id | Yours if you sent one, generated otherwise. Use it to check the status.Tuyo si lo mandaste; si no, generado. Sirve para consultar el estado. |
To accept 5,000 items fast, the batch does not query the catalog item by item. A create with a SKU that already exists enters the queue and is rejected when processed — check the batch status, not just the immediate response. The only thing filtered on the spot is a SKU repeated within the same batch (dup_no_lote).
Para aceptar 5.000 ítems rápido, el lote no consulta el catálogo ítem por ítem. Un create con un SKU que ya existe entra a la cola y se rechaza al procesarse — mirá el estado del lote, no sólo la respuesta inmediata. Lo único que sí se filtra en el acto es el SKU repetido dentro del mismo lote (dup_no_lote).
Stock and price validationValidación de stock y precio
Here the direction flips: FullBAI calls your endpoint. When a customer adds a product to the cart, we query your system to validate stock and price in real time.
Acá el sentido se invierte: FullBAI llama a tu endpoint. Cuando un cliente agrega un producto al carrito, consultamos tu sistema para validar stock y precio en tiempo real.
Your endpoint must respond within 15 seconds. On error or timeout, FullBAI allows adding to the cart (fail-safe): we would rather review a sale than lose it because your side went down.
Tu endpoint debe responder en máximo 15 segundos. Ante error o timeout, FullBAI permite agregar al carrito (fail-safe): preferimos una venta a revisar antes que perderla por una caída tuya.
Supported endpoint formatsFormatos de endpoint soportados
| FormatFormato | ExampleEjemplo | How the SKU arrivesCómo llega el SKU | |
|---|---|---|---|
| GET | with placeholdercon placeholder | https://api.seller.com/stock?cod=123&sku={sku} |
{sku} is replaced automatically.{sku} se reemplaza automáticamente. |
| GET | ending in sku=terminando en sku= |
https://api.seller.com/stock?cod=123&sku= |
Appended to the end of the URL.Se agrega al final de la URL. |
| POST | with JSON bodycon JSON body | https://api.seller.com/webhook |
In the body (classic format).En el cuerpo (formato clásico). |
What you will receiveLo que vas a recibir
POST https://tu-endpoint.com/api/fullbai-stock Content-Type: application/json X-Seller: nombre_seller { "sku": "ABC123", "sku-simple": "ABC123", "sku-variation": ["ABC123"] }
GET https://api.seller.com/stock?cod=123&sku=ABC123 X-Seller: nombre_seller # El SKU viaja en la URL. El header X-Seller identifica al seller.
What you must returnLo que debés responder
Always HTTP 200 with Content-Type: application/json. Three shapes are accepted.
Siempre HTTP 200 con Content-Type: application/json. Se aceptan tres formas.
// Recomendado { "sku": "ABC123", "stock": 10, "price": 49.90 }
[
{
"sku-variation": "ABC123",
"stock": 10,
"price": 49.90
}
]
[
{
"sku": "ABC123",
"stock": 10,
"price": 49.90
},
{
"sku": "ABC124",
"stock": 0,
"price": 39.90
}
]
| FieldCampo | TypeTipo | DescriptionDescripción | |
|---|---|---|---|
sku · sku-simple · sku-variation | string | req.obl. | Product SKU. Any of the three names works.SKU del producto. Cualquiera de los tres nombres sirve. |
stock | numbernúmero | req.obl. | Available quantity. 0 = out of stock.Cantidad disponible. 0 = agotado. |
price | numbernúmero | opt.opc. | Current price (informational).Precio actual (informativo). |
regular_price | float / null | opt.opc. | Regular price.Precio regular. |
sale_price | float / null | opt.opc. | Promotional price. null or 0 removes it.Precio promocional. null o 0 lo elimina. |
Price fields are numbers here, not text — the opposite of product creation. It is not an oversight: they are two different contracts.
Los campos de precio son números acá, no texto — al revés que en el alta de productos. No es un descuido: son dos contratos distintos.
Managing sale pricesGestión de precios de oferta
To remove the sale pricePara eliminar el precio de oferta
Send sale_price as null, 0, "" or "null".
Enviá sale_price como null, 0, "" o "null".
{
"sku": "ABC123",
"stock": 10,
"sale_price": null
}
// O junto con la actualización del precio regular:
{
"sku": "ABC123",
"stock": 10,
"regular_price": 299.90,
"sale_price": 0
}
Result: the promotional price is removed and the product shows only the regular one.
Resultado: el precio promocional se elimina y el producto muestra sólo el regular.
To update prices while keeping the salePara actualizar precios manteniendo la oferta
{
"sku": "ABC123",
"stock": 10,
"regular_price": 399.90,
"sale_price": 299.90
}
BehaviorComportamiento
| SituationSituación | ResultResultado |
|---|---|
stock: 0 | Product blocked, not added to the cart.Producto bloqueado, no se agrega al carrito. |
stock < quantity requestedcantidad pedida | Shows an error with the available stock.Muestra error con el stock disponible. |
stock ≥ quantity requestedcantidad pedida | Product added normally.Producto agregado normalmente. |
sale_price: null / 0 | Removes the promotional price.Elimina el precio promocional. |
| No price fieldsSin campos de precio | Prices are left unchanged.No altera precios. |
| Error or timeoutError o timeout | Allows adding to the cart (fail-safe).Permite agregar al carrito (fail-safe). |
Errors on your sideErrores de tu lado
If your endpoint fails, return a status other than 200:
Si tu endpoint falla, devolvé un status distinto de 200:
{ "error": "Base de datos no disponible" }
FullBAI logs it and applies the fail-safe. Do not return 200 with an error body: we would read it as valid stock.
FullBAI lo registra y aplica el fail-safe. No devuelvas 200 con un cuerpo de error: lo interpretaríamos como stock válido.
AttributesAtributos
Attributes are not decorative: they feed the store filters, the segmentation and the product page layout. A well-attributed product shows up in more searches.
Los atributos no son decorativos: alimentan los filtros de la tienda, las segmentaciones y el diseño de la ficha. Un producto bien atribuido aparece en más búsquedas.
| AttributeAtributo | ExampleEjemplo | variation | visible | UseUso |
|---|---|---|---|---|
| COLOR | Azul, Verde, Amarillo | true | true | Generates variations (affects combinations).Genera variaciones (afecta combinaciones). |
| TALLA | S, M, L, XL | true | true | Generates variations (affects combinations).Genera variaciones (afecta combinaciones). |
| MODELO | XYZ-123 | false | true | Informational, display only.Informativo, sólo visible. |
| MARCA | Marca Ejemplo | false | true | Informational, display only.Informativo, sólo visible. |
| POTENCIA | 1500W | false | true | Informational, useful for electronics.Informativo, útil en electrónicos. |
| CÓDIGO DE BARRAS | 7891524632587 | false | true | Informational.Informativo. |
| PAÍS DE ORIGEN | Importado | false | true | Informational.Informativo. |
variation: true only on attributes that actually generate combinations. Marking MARCA as variation multiplies variations nobody chose.
variation: true sólo en los atributos que realmente generan combinaciones. Marcar MARCA como variation multiplica variaciones que nadie eligió.
"attributes": [ { "name": "COLOR", "is_optional": false, "options": ["Rojo", "Negro", "Blanco"], "variation": true, "visible": true }, { "name": "ROPA", "is_optional": false, "options": ["L", "M", "S", "XS"], "variation": true, "visible": true }, { "name": "CÓDIGO DE BARRAS", "is_optional": false, "options": ["7891524632587"], "variation": false, "visible": true }, { "name": "COMPOSICIÓN DEL MATERIAL", "is_optional": false, "options": ["95% Algodón, 5% Elastano"], "variation": false, "visible": true }, { "name": "INSTRUCCIONES DE CUIDADO", "is_optional": false, "options": ["Lavar a máquina con agua fría, No usar blanqueador"], "variation": false, "visible": true }, { "name": "PAÍS DE ORIGEN", "is_optional": false, "options": ["Importado"], "variation": false, "visible": true } ]
Error codesCódigos de error
| HTTP | CodeCódigo | What happenedQué pasó | What to doQué hacer |
|---|---|---|---|
200 | — | Accepted.Aceptado. | Nothing.Nada. |
400 | missing_fields | Missing sku, name or type.Falta sku, name o type. | Complete the body.Completá el cuerpo. |
400 | status_invalido | status is not draft.El status no es draft. | Only draft is accepted.Sólo se acepta draft. |
401 | invalid_key | API key missing or invalid.API key ausente o inválida. | Check the Authorization header.Revisá el header Authorization. |
403 | publicar_no_permitido | You tried to publish.Intentaste publicar. | Publishing belongs to the store.Publicar es de la tienda. |
403 | forbidden | The product belongs to another seller.El producto es de otro seller. | Check the SKU.Verificá el SKU. |
404 | not_found | That SKU does not exist in your catalog.No existe ese SKU en tu catálogo. | Did you send the Full-XXXX instead of yours?¿Mandaste el Full-XXXX en vez del tuyo? |
409 | sku_exists | You already have a product with that SKU.Ya tenés un producto con ese SKU. | Use update.Usá update. |
409 | sku_queued | A create for the same SKU is in progress.Hay un alta del mismo SKU en curso. | Wait — do not retry in parallel.Esperá — no reintentes en paralelo. |
sku_exists and sku_queuedsku_exists y sku_queuedBoth say the same thing: that SKU is already taken. The first because the product exists; the second because another request of yours is creating it right now. Neither creates a duplicate, which is why sending the same create several times in parallel is safe: only one goes in.
Los dos dicen lo mismo: ese SKU ya está tomado. El primero, porque el producto existe; el segundo, porque otra solicitud tuya lo está creando en este momento. Ninguno de los dos crea un duplicado, y por eso enviar el mismo alta varias veces en paralelo es seguro: entra una sola.
SupportSoporte
If something does not match what is documented here, write to us with the SKU, the body you sent and the response you got. With those three we can find the case in the logs.
Si algo no encaja con lo documentado acá, escribinos con el SKU, el cuerpo enviado y la respuesta recibida. Con esos tres datos encontramos el caso en los registros.
Before writing, check the three most frequent causes: numbers sent as numbers instead of text, image URLs that are not public, and the Full-XXXXXXXX used instead of your SKU.
Antes de escribir, revisá las tres causas más frecuentes: números enviados como número en vez de texto, URLs de imagen que no son públicas, y el Full-XXXXXXXX usado en lugar de tu SKU.