Comandos
Los comandos exigen una llave de conexión con el permiso indicado y el encabezado Idempotency-Key: una clave única por operación (8 a 200 caracteres: letras, números, . _ : -).
- Si se corta la red, reintenta con la misma clave y el mismo cuerpo: no se repite el cambio y recibes la misma respuesta con
"replayed": true. - La misma clave con otro cuerpo responde
409 idempotency_conflict. Un comando rechazado no guarda la clave: corrige y reintenta. - Respuesta correcta:
200 con { data, replayed }. Una regla de la tienda rechaza con 422 command_rejected y el motivo en reason. - «Pagó» nunca se pone ni se quita por la API: solo la pone un pago acreditado.
POST/api/public/v1/businesses/{business_id}/labels
Crear etiqueta
Crea una etiqueta de venta. Si envías «activators» o «removers», la llave también necesita automations:write. Permiso: labels:write.
{
"label": "Mayorista",
"color": "info",
"mode": "manual",
"instructions": "",
"isActive": true,
"channels": [
"whatsapp",
"instagram"
]
}
PUT/api/public/v1/businesses/{business_id}/labels/{label_id}
Editar etiqueta
Reemplaza nombre, color, quién la pone, instrucciones, estado y canales. Sin «activators»/«removers» no se tocan sus automatizaciones. Permiso: labels:write.
{
"label": "Mayorista VIP",
"color": "info",
"mode": "manual",
"instructions": "",
"isActive": true,
"channels": [
"whatsapp"
]
}
POST/api/public/v1/businesses/{business_id}/conversations/{conversation_id}/labels
Poner etiqueta en un chat
Pone la etiqueta como si la pusiera el dueño de la conexión. «Pagó» no se puede poner: solo la pone un pago acreditado. Permiso: labels:write.
{
"label_id": "3f6c1e2a-8b1d-4c5e-9a0f-1b2c3d4e5f60"
}
DELETE/api/public/v1/businesses/{business_id}/conversations/{conversation_id}/labels/{label_id}
Quitar etiqueta de un chat
Quita la etiqueta del chat. «Pagó» no se puede quitar por la API. Permiso: labels:write.
POST/api/public/v1/businesses/{business_id}/automations
Crear automatización
Crea un activador que pone una etiqueta sola. Mismas reglas que la pantalla (máximo 20, sin círculos, nunca «Pagó»). Permiso: automations:write.
{
"name": "Sin respuesta 1 día",
"trigger": "customer_idle",
"idleMinutes": 1440,
"fromLabelId": "8a2d4c6e-1f3b-4d5a-9c7e-2b4d6f8a0c1e",
"addLabelId": "3f6c1e2a-8b1d-4c5e-9a0f-1b2c3d4e5f60",
"removeFromLabel": true,
"overrideManual": false,
"enabled": true
}
PUT/api/public/v1/businesses/{business_id}/automations/{automation_id}
Editar automatización
Reemplaza todos los campos del activador. Permiso: automations:write.
{
"name": "Sin respuesta 2 días",
"trigger": "customer_idle",
"idleMinutes": 2880,
"fromLabelId": "8a2d4c6e-1f3b-4d5a-9c7e-2b4d6f8a0c1e",
"addLabelId": "3f6c1e2a-8b1d-4c5e-9a0f-1b2c3d4e5f60",
"removeFromLabel": true,
"overrideManual": false,
"enabled": true
}
DELETE/api/public/v1/businesses/{business_id}/automations/{automation_id}
Borrar automatización
Borra el activador. Permiso: automations:write.
POST/api/public/v1/businesses/{business_id}/catalog/sources/{source_id}/products
Enviar productos desde tu ERP
Hasta 50 por llamada. Crea o actualiza por external_id (el ID del producto en tu ERP) y solo escribe lo que cambió. Si el SKU ya existe en otra ficha no crea nada: queda en «Posibles duplicados» hasta que la tienda decida. Responde fila por fila: created, updated, unchanged, pending_merge o error. Rechaza todo si Mercado Libre está conectado (una sola fuente manda la existencia). Permiso: catalog:write.
{
"items": [
{
"external_id": "ERP-1001",
"sku": "PF-COR-0812",
"name": "Pastilla de freno delantera Corolla 2008-2013",
"description": "Juego de 4",
"brand": "Bosch",
"price": 25.5,
"currency": "USD",
"stock": 12,
"status": "active",
"photos": [
{
"path": "5d2e8a1c-3b4f-4a6d-8e9f-0a1b2c3d4e5f/7c9e1a3b-5d6f-4b8a-9c0d-1e2f3a4b5c6d/0b6f3c1e-2a4d-4e8f-9b1c-3d5e7f9a1b2c.jpg"
}
]
}
]
}
POST/api/public/v1/businesses/{business_id}/catalog/sources/{source_id}/photo-uploads
Pedir permiso para subir fotos
Hasta 10 por llamada (jpg, png o webp). Devuelve por foto un «path» y un «upload_url» de un solo uso (vence en 2 horas): sube los bytes con PUT a upload_url (Content-Type de la imagen, máx. 5 MB) y luego envía el path en «photos» de catalog.upsert. Las fotos no pasan por YaCRM. En catalog.upsert, «photos» reemplaza solo las fotos que puso tu ERP (la lista vacía las quita); las que subió la tienda no se tocan. En productos publicados en Mercado Libre se ignoran. Permiso: catalog:write.
{
"files": [
{
"type": "jpg"
},
{
"type": "png"
}
]
}
POST/api/public/v1/businesses/{business_id}/catalog/sources/{source_id}/stock
Actualizar existencia y precio desde tu ERP
Liviano, hasta 50 por llamada: solo stock y price de productos ya enlazados (por external_id). Lo no enlazado vuelve como error not_linked. Permiso: catalog:write.
{
"items": [
{
"external_id": "ERP-1001",
"stock": 9,
"price": 24.9
}
]
}
Colores: info, warning, success, danger, muted, new, followup. Quién pone la etiqueta (mode): manual, auto (Sofi, con instrucciones de al menos una frase) o rules (activadores). Disparadores: first_inbound, inbound_unlabeled, customer_idle, customer_replied, order_created, order_paid, quote_created, quote_accepted, ml_purchase, case_opened, assigned, ai_paused, label_age.