Usamos cookies para servicios esenciales y analíticas. Puedes cambiar tus preferencias en cualquier momento. Lista de cookies
La API para socios conecta BoutiqVerse con tu almacén, tu ERP o tu propia tienda. Es pequeña a propósito: catálogo, existencias, pedidos y entrega del paquete – lo que necesita una sincronización.
Crea una clave en el panel: Ajustes → Claves de API. La mostramos una sola vez, al crearla – guárdala enseguida, porque solo almacenamos su hash. Cada clave tiene sus propios alcances, y una clave revocada deja de funcionar.
Envía la clave en la cabecera Authorization (Bearer) o X-API-Key. El límite es de 120 peticiones por minuto por clave – al superarlo recibirás una respuesta 429.
https://www.boutiqverse.com/api/partner
Authorization: Bearer $BOUTIQVERSE_API_KEY
X-API-Key: $BOUTIQVERSE_API_KEYCrea una clave de prueba en el mismo sitio (Ajustes → Claves de API) marcando «Clave de prueba». Empieza por btk_test_ y funciona con los datos de la tienda de demostración, no con tu tienda. La lectura del catálogo y de los pedidos es real, y el cambio de existencias y la entrega del paquete reciben la misma respuesta que de verdad – con el campo sandbox: true – pero no guardan nada. La respuesta lleva también la cabecera X-BoutiqVerse-Sandbox.
Comprueba un webhook con el botón «Enviar un evento de prueba» en Ajustes → Webhooks: llegará un evento webhook.test con la misma firma que los reales.
Alcance necesario: products:read
El catálogo de la boutique con existencias por talla, primero los productos más nuevos. Parámetros: limit (de 1 a 500, 100 por defecto) y offset.
curl "https://www.boutiqverse.com/api/partner/products?limit=100&offset=0" \
-H "Authorization: Bearer $BOUTIQVERSE_API_KEY"
{
"success": true,
"data": {
"products": [
{
"id": "5f0c8a52-…",
"name": "Sukienka Lena",
"slug": "sukienka-lena-5f0c8a",
"price": "249.00",
"status": "active",
"stock_quantity": 6,
"in_stock": true,
"variants": [
{ "id": "9a1e…", "sku": "LENA-CZ-S", "size": "S", "color": "Czarny", "stock": 2, "priceOverride": null }
]
}
],
"limit": 100,
"offset": 0
}
}Alcance necesario: stock:write
Fija existencias de hasta 1000 SKU en una sola petición. Las existencias se fijan, no se suman – repetir la petición no duplica nada. Las unidades reservadas por pedidos pendientes de pago y por reservas para probar las restamos nosotros. La respuesta dice cuántas tallas cambiaron, qué SKU no conocemos y qué existencias no son válidas.
curl -X PATCH "https://www.boutiqverse.com/api/partner/stock" \
-H "Authorization: Bearer $BOUTIQVERSE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "updates": [ { "sku": "LENA-CZ-S", "stock": 4 }, { "sku": "LENA-CZ-M", "stock": 0 } ] }'
{
"success": true,
"data": { "updated": 2, "notFound": [], "invalid": [] }
}Alcance necesario: orders:read
Pedidos con tus productos – solo tus líneas y el estado de tu paquete. Parámetros: since (fecha ISO) y limit (de 1 a 500).
curl "https://www.boutiqverse.com/api/partner/orders?since=2026-10-01T00:00:00Z&limit=100" \
-H "X-API-Key: $BOUTIQVERSE_API_KEY"
{
"success": true,
"data": {
"orders": [
{
"id": "c41d…",
"order_number": "ORD-2026-001234",
"status": "processing",
"created_at": "2026-10-28T09:12:44.000Z",
"shipping_country": "PL",
"tracking_number": null,
"carrier": null,
"items": [
{ "productId": "5f0c8a52-…", "sku": "LENA-CZ-S", "name": "Sukienka Lena", "quantity": 1, "price": "249.00", "size": "S", "color": "Czarny" }
]
}
]
}
}Alcance necesario: orders:write
Entrega un número de seguimiento. El paquete pasa a enviado igual que en el panel: la clienta recibe un correo. Si la clienta desistió antes del envío o el pedido no se puede enviar, recibirás una respuesta 409 con un código de error.
curl -X POST "https://www.boutiqverse.com/api/partner/orders/c41d…/ship" \
-H "Authorization: Bearer $BOUTIQVERSE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "trackingNumber": "520000011395200025754312", "carrier": "inpost" }'
{
"success": true,
"data": { "trackingNumber": "520000011395200025754312", "trackingUrl": "https://…", "carrier": "inpost" }
}Un error es JSON con los campos success (false), message y normalmente code.
Configura la dirección, el secreto y los eventos en el panel: Ajustes → Webhooks. Enviamos un POST con JSON a una dirección https. La cabecera X-Butiki-Signature es el HMAC-SHA256 del cuerpo sin procesar con tu secreto (hexadecimal), X-Butiki-Event es el tipo de evento y X-Butiki-Delivery el identificador de la entrega. La entrega tiene éxito cuando tu servidor responde con un código 2xx en 15 segundos. Si no, lo intentamos de nuevo tras un minuto, 5 minutos, 30 minutos y 3 horas – hasta 5 intentos en total.
order.createdpedido nuevoorder.paidpedido pagadoorder.shippedpaquete enviadoorder.refundedpedido reembolsadoorder.cancelledpedido canceladoproduct.updatedproducto modificado – también por la sincronización con tu tiendareturn.creatednueva devolución o reclamaciónreturn.refundeddevolución reembolsadaPOST https://twoj-serwer.pl/boutiqverse
Content-Type: application/json
X-Butiki-Event: order.paid
X-Butiki-Delivery: 7b0f…
X-Butiki-Signature: 3f9a… (HMAC-SHA256, hex)
{ "id": "7b0f…", "type": "order.paid", "payload": { … }, "createdAt": "2026-10-28T09:13:02.000Z" }// Node.js: podpis liczony z SUROWEJ tresci zadania
const crypto = require("crypto")
function isFromBoutiqVerse(rawBody, signatureHeader, secret) {
const expected = crypto.createHmac("sha256", secret).update(rawBody).digest("hex")
const a = Buffer.from(expected)
const b = Buffer.from(String(signatureHeader || ""))
return a.length === b.length && crypto.timingSafeEqual(a, b)
}¿Necesitas otro método o una integración con otra plataforma? La añadiremos gratis. Escríbenos