La API de Multitiendas para conectar tu negocio
Consulta catálogo, precios, clientes, ventas, cartera y citas, y crea pedidos, cotizaciones y reservas desde tu sistema, tu tienda o herramientas como n8n, Make, Zapier, ManyChat y Dapta.
GET /api/public/products/search?q=cera
Host: api.multitiendas.shop
Authorization: Bearer TU_TOKEN
X-Tenant: tu-empresa
Accept: application/json{
"success": true,
"data": {
"products": [{
"id": 4930,
"title": "Cera mate 150 ml",
"category": { "id": 12, "name": "Cuidado capilar" },
"variants": [{
"sku": "CER-MAT-150",
"sale_price": 25000
}]
}],
"total_results": 1,
"query": "cera"
}
}X-RateLimit-Remaining: 99
Límite por hora configurable en cada token
URL base
https://api.multitiendas.shop/api/publicAutenticación
Token Bearer por empresa y header X-Tenant
Formato
JSON sobre HTTPS
45 endpoints
8 grupos de recursos documentados
Tu primera solicitud en tres pasos
Paso 1
Crea un token
En Multitiendas, entra a Configuración → Acceso API. Ahí también ves el identificador de tu empresa para X-Tenant.
Paso 2
Elige sus permisos
Dale al token solo lo que necesita: leer productos, crear pedidos, gestionar citas. Puedes limitarlo por IP y ponerle vencimiento.
Paso 3
Envía los dos headers
Authorization con tu token y X-Tenant con tu empresa, en cada solicitud.
Authorization: Bearer TU_TOKEN
X-Tenant: tu-empresacurl "https://api.multitiendas.shop/api/public/products/search?q=cera&limit=5" \
-H "Authorization: Bearer TU_TOKEN" \
-H "X-Tenant: tu-empresa" \
-H "Accept: application/json"¿Construyes una app para tus clientes finales? En las rutas con sesión de cliente, el token del negocio va en X-API-Token y el del cliente en Authorization.
Todo lo que expone la API
Cada endpoint indica el permiso que necesita el token. Abre los que tienen parámetros para ver el detalle.
Catálogo y precios
Productos con variantes, imágenes, stock por bodega, categorías y servicios.
GET
products:read/productsLista el catálogo con variantes, imágenes, precios y stock por bodega.
Permiso: products:read
- limit integer
- Productos por página. Por defecto 50, máximo 100.
- offset integer
- Cuántos omitir. Usa pagination.next_offset para la siguiente página.
- category integer
- ID de categoría.
- status string
- active (por defecto), inactive o all.
GET
products:read/products/searchBusca productos por nombre, código o descripción.
Permiso: products:read
- q string
- ObligatorioTexto a buscar, mínimo 2 caracteres.
- limit integer
- Resultados. Por defecto 20, máximo 100.
- category integer
- ID de categoría.
GET
products:read/products/pricesVersión ligera para sincronizar precios, precios personalizados, stock e imágenes. Hasta 500 productos por llamada.
Permiso: products:read
- limit integer
- Por defecto 100, máximo 500.
- offset integer
- Cuántos omitir.
- status string
- active (por defecto), inactive o all.
GET
products:read/categoriesCategorías con la cantidad de productos de cada una.
Permiso: products:read
- status string
- Estado de los productos contados: active, inactive o all.
- min_products integer
- Mínimo de productos por categoría. Por defecto 1.
GET
services:read/servicesServicios de la empresa: precio, duración y categoría.
Permiso: services:read
- limit integer
- Por defecto 50, máximo 100.
- offset integer
- Cuántos omitir.
- category integer
- ID de categoría de servicio.
- q string
- Busca por nombre, descripción o código.
- es_recurrente boolean
- Solo servicios recurrentes (1/0).
- requiere_cita boolean
- Solo servicios que requieren cita (1/0).
Cotizaciones y catálogo en PDF
Cotiza por SKU y entrega el PDF al cliente, o genera un catálogo en PDF con tu diseño.
POST
quotations:write/quotationsCrea una cotización a partir de los SKU. Si el cliente no existe, lo crea. Devuelve el enlace al PDF.
Permiso: quotations:write
- customer object
- Obligatoriodocument_type (CC, CE, NIT, PP, TI), document, first_name y datos de contacto opcionales.
- items[] array
- Obligatoriosku y cantidad; descuento e impuesto_porcentaje opcionales.
- discount number
- Descuento general.
- shipping_cost number
- Costo de envío.
- description, notes string
- Textos que aparecen en la cotización.
- GETquotations:read
/quotations/{id}/pdfDescarga el PDF de una cotización.
POST
catalog:download/catalog/pdfGenera un catálogo de productos en PDF con portada, colores, fuentes y productos por página.
Permiso: catalog:download
- products[] array
- Obligatoriotitle, main_image_url y variants de cada producto.
- category_name string
- ObligatorioNombre que aparece en la portada.
- settings object
- ObligatorioLogo, colores y datos de la portada.
- per_page integer
- Productos por página: 1, 2 o 4.
curl -X POST "https://api.multitiendas.shop/api/public/quotations" \
-H "Authorization: Bearer TU_TOKEN" \
-H "X-Tenant: tu-empresa" \
-H "Content-Type: application/json" \
-d '{
"customer": {
"document_type": "CC",
"document": "1020304050",
"first_name": "Laura",
"phone": "3001234567"
},
"items": [
{ "sku": "CER-MAT-150", "cantidad": 2 },
{ "sku": "ACE-BAR-30", "cantidad": 1 }
],
"notes": "Válida por 15 días"
}'Pedidos
Registra pedidos que descuentan inventario y consulta los que llegaron por la API.
POST
orders:create/ordersCrea un pedido con cliente e ítems por SKU y descuenta el inventario. Valida el stock antes de guardar.
Permiso: orders:create
- customer object
- ObligatorioDocumento, nombre y datos de contacto. Se crea si no existe.
- items[] array
- Obligatoriosku y cantidad; precio_unitario, descuento_porcentaje e impuesto_porcentaje opcionales.
- source string
- Origen del pedido, por ejemplo chatbot o web.
- payment_form, payment_method string
- Forma y medio de pago.
- reference_code string
- Tu propio identificador del pedido.
GET
orders:read/ordersLista los pedidos creados por la API.
Permiso: orders:read
- status string
- pending, paid o cancelled.
- source string
- Filtra por origen.
- from_date, to_date date
- Rango de fechas (AAAA-MM-DD).
- limit, page integer
- Paginación. Por defecto 20 por página, máximo 100.
- GETorders:read
/orders/{id}Detalle de un pedido con cliente, ítems y totales.
POST
orders:write/orders/notify-whatsappEnvía por WhatsApp la notificación de un pedido que llegó de un canal de venta.
Permiso: orders:write
- platform string
- ObligatorioCanal de origen del pedido.
- platform_order_id string
- ObligatorioID del pedido en ese canal.
- event string
- order.created u order.updated.
Clientes, proveedores y operación
Lectura de terceros, sedes, ventas, compras, gastos, ingresos y cartera. Paginación por cursor y sincronización incremental.
Estos endpoints devuelven hasta 100 registros por página. Envía ?cursor= con el valor que te devuelve la respuesta para seguir, y ?since= (fecha ISO 8601) en operaciones para traer solo lo nuevo.
- GETcontapos:read
/contapos/customersClientes con documento y datos de contacto.
- GETcontapos:read
/contapos/proveedoresProveedores.
- GETcontapos:read
/contapos/employeesEmpleados con tipo y número de documento.
- GETcontapos:read
/contapos/locations/storesSedes y bodegas de la empresa.
- GETcontapos:read
/contapos/catalog/productsProductos. También /catalog/variants, /catalog/categories y /catalog/services.
- GETcontapos:read
/contapos/catalog/expense-categoriesCategorías de gastos. También /catalog/income-categories.
GET
contapos:read/contapos/operations/salesVentas con su detalle de valores e impuestos.
Permiso: contapos:read
- cursor string
- Posición de la siguiente página.
- since datetime
- Solo lo creado o modificado desde esa fecha.
GET
contapos:read/contapos/operations/purchasesCompras a proveedores.
Permiso: contapos:read
- cursor integer
- Posición de la siguiente página.
- since datetime
- Solo lo nuevo desde esa fecha.
- GETcontapos:read
/contapos/operations/expensesGastos. También /operations/income para ingresos y /operations/adjustments para ajustes de inventario.
- GETcontapos:read
/contapos/balances/currentSaldos actuales: caja, valor del inventario, cuentas por cobrar y por pagar.
- GETcontapos:read
/contapos/cartera/receivablesCuentas por cobrar abiertas, con cliente, vencimiento y saldo pendiente.
- GETcontapos:read
/contapos/cartera/payablesCuentas por pagar abiertas a proveedores.
Empleados
Consulta tu equipo y da de alta empleados con su acceso al sistema.
GET
employees:read/employeesLista de empleados.
Permiso: employees:read
- status string
- active o inactive.
- search string
- Busca por nombre, apellido o código de empleado.
- limit, page integer
- Paginación. Máximo 100 por página.
- GETemployees:read
/employees/{id}Detalle con comisiones por servicios y ventas, bonificaciones y resumen de ganancias de los últimos 30 días.
POST
employees:create/employeesCrea el empleado y su usuario. La contraseña temporal se devuelve una sola vez.
Permiso: employees:create
- nombre, apellido string
- ObligatorioNombre del empleado.
- email string
- ObligatorioCorreo único; es su usuario.
- telefono, emp_code, direccion… string
- Datos opcionales de la ficha.
Citas y horarios
Lo mismo que usa la app de citas: profesionales, horarios libres y reservas.
- GETappointments:read
/appointments/platformBanner, ícono y WhatsApp configurados para la app de citas.
GET
appointments:read/appointments/employeesProfesionales activos con los servicios que prestan.
Permiso: appointments:read
- service_id integer
- Solo quienes prestan ese servicio.
- include_services boolean
- Incluye servicios (1 por defecto).
- include_schedules boolean
- Incluye horarios de trabajo (0 por defecto).
GET
appointments:read/appointments/available-slotsHorarios libres de un profesional en una fecha, según la duración de turno de su horario.
Permiso: appointments:read
- employee_id integer
- ObligatorioProfesional.
- date date
- ObligatorioFecha, hoy o posterior.
POST
appointments:create/appointmentsAgenda una cita y avisa al cliente y al profesional.
Permiso: appointments:create
- employee_id, service_id integer
- ObligatorioProfesional y servicio.
- customer_name, customer_phone string
- ObligatorioDatos del cliente (o customer_first_name y customer_last_name).
- appointment_date, start_time string
- ObligatorioFecha AAAA-MM-DD y hora HH:mm.
- duration_minutes integer
- ObligatorioDe 15 a 480.
- send_notifications boolean
- Enviar avisos (1/0).
GET
appointments:read/appointments/by-emailCitas de un cliente por su correo.
Permiso: appointments:read
- email string
- ObligatorioCorreo del cliente.
- status string
- scheduled, confirmed, in_progress, completed, cancelled o no_show.
- from_date, to_date date
- Rango de fechas.
- limit integer
- Máximo 50.
- GETappointments:read
/appointments/{id}Detalle de la cita con profesional y servicio.
- PUTappointments:update
/appointments/{id}Cambia profesional, servicio, fecha u hora. Solo si faltan al menos 30 minutos.
- POSTappointments:update
/appointments/{id}/confirmConfirma la cita y notifica.
POST
appointments:update/appointments/{id}/cancelCancela la cita con un motivo y notifica.
Permiso: appointments:update
- cancellation_reason string
- ObligatorioMotivo de la cancelación.
Cuentas de tus clientes
Registro con verificación por WhatsApp, inicio de sesión y autogestión de citas para tu propia app.
En las rutas con sesión de cliente, el token del negocio va en X-API-Token y el token del cliente en Authorization: Bearer.
- POSTcustomers:auth
/customers/otp/sendEnvía un código de 6 dígitos por WhatsApp. Luego /otp/verify y /register.
- POSTcustomers:auth
/customers/loginInicio de sesión con teléfono y contraseña.
- POSTcustomers:auth
/customers/password-resetCambia la contraseña con un código enviado por WhatsApp (/password-reset/send-otp).
- POSTcustomers:auth
/customers/claim-accountActiva el acceso de un cliente que ya existía, sin perder su historial.
- GETSesión de cliente
/customers/mePerfil del cliente. PUT para actualizarlo y POST /logout para cerrar sesión.
- GETSesión de cliente
/customers/appointmentsPróximas citas del cliente. También /history, agendar (POST) y cancelar.
- GETSesión de cliente
/customers/notificationsRecordatorios y confirmaciones. Marca como leídas una o todas.
Ubicaciones de Colombia
Departamentos y municipios con códigos DIAN, los mismos del panel.
- GETlocations:read
/locations/departmentsDepartamentos con su código DANE.
GET
locations:read/locations/municipalitiesMunicipios. El id es el municipality_id que usan los clientes.
Permiso: locations:read
- department_code string
- Código de 2 dígitos, por ejemplo 05 para Antioquia.
Errores claros y límites a la vista
Cada token tiene un límite de solicitudes por hora que tú defines: 100 por defecto y hasta 10.000. Las respuestas incluyen X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset.
- Permisos por token
- Lista de IP autorizadas
- Vencimiento y regeneración del token
- Registro de cada solicitud
- 401Falta el token, no es válido, venció o está desactivado.
- 403El token no tiene el permiso (required_ability) o la IP no está autorizada.
- 404El recurso no existe o es de otra empresa.
- 422Datos inválidos. La respuesta indica qué campo corregir.
- 429Superaste el límite de solicitudes por hora del token.
Úsala con n8n, Make, Zapier, ManyChat y Dapta
No necesitas programar. Cada herramienta hace una solicitud HTTP con tu token y trabaja con los datos reales de tu negocio.
n8n
Reporte diario de ventas
Un flujo programado toma las ventas del día y te envía el resumen por correo o WhatsApp.
- 1Schedule Trigger todos los días a las 9 p. m.
- 2Nodo HTTP Request con los headers de tu token
- 3Suma los totales y envíalos con el nodo de Gmail o WhatsApp
Más ideas en integraciones.
// Nodo HTTP Request
Method: GET
URL: https://api.multitiendas.shop/api/public/contapos/operations/sales
Query: since = {{ $today.toISO() }}
Headers:
Authorization: Bearer {{ $env.MULTITIENDAS_TOKEN }}
X-Tenant: tu-empresaWebhooks
Avisos automáticos a tu sistema cuando entra un pedido, se registra una venta o cambia una cita, sin tener que consultar.
SDK oficiales
Librerías para JavaScript, PHP y Python. Mientras tanto, la API funciona con cualquier cliente HTTP.
Acceso a la API
Incluida en Agenda PRO, Profesional y Corporativo
Agenda PRO
$49.900 al mes
Barberías, salones de belleza y profesionales que trabajan con cita previa.
Profesional
$99.900 al mes
Para negocios en crecimiento que venden en varios canales.
Corporativo
$199.900 al mes
Para grandes volúmenes y operaciones con varios canales.
Primer mes gratis, sin tarjeta de crédito.
Preguntas frecuentes sobre la API
¿Qué plan necesito para usar la API de Multitiendas?
El acceso a la API está incluido en los planes Agenda PRO, Profesional y Corporativo. Primer mes gratis, sin tarjeta de crédito.
¿Cómo obtengo mi token de API?
En Multitiendas, entra a Configuración → Acceso API y crea un token. Eliges sus permisos, el límite de solicitudes por hora, las IP autorizadas y la fecha de vencimiento. Allí mismo ves el identificador de tu empresa para el header X-Tenant.
¿Qué información puedo consultar y crear con la API?
Consultas productos, precios, stock, categorías, servicios, clientes, proveedores, empleados, sedes, ventas, compras, gastos, ingresos, cartera y citas. Puedes crear pedidos, cotizaciones con PDF, catálogos en PDF, citas y empleados.
¿Cuántas solicitudes puedo hacer?
Cada token tiene un límite por hora que tú defines: 100 por defecto y hasta 10.000. Cada respuesta trae los headers X-RateLimit-Limit y X-RateLimit-Remaining para que controles tu consumo.
¿Puedo conectar Multitiendas con n8n, Make, Zapier, ManyChat o Dapta?
Sí. Todas pueden hacer solicitudes HTTP con tu token: el nodo HTTP Request de n8n, el módulo HTTP de Make, Webhooks by Zapier, la solicitud externa de ManyChat y las herramientas HTTP de Dapta.
¿La API tiene webhooks?
Todavía no. Los webhooks salientes están en desarrollo. Mientras tanto, consulta periódicamente: los pedidos se filtran por fecha y las operaciones aceptan ?since= para traer solo lo nuevo.
¿Hay SDK para JavaScript, PHP o Python?
Los SDK oficiales llegarán próximamente. Hoy la API funciona con cualquier lenguaje o herramienta que haga solicitudes HTTP y lea JSON.
¿Qué tan segura es la API?
Cada token pertenece a una sola empresa y solo accede a lo que le permites. Puedes limitarlo a ciertas IP, ponerle vencimiento, desactivarlo o regenerarlo, y cada solicitud queda registrada.
Empieza hoy. Tu negocio no puede esperar.
Regístrate gratis y configura tu primer punto de venta en minutos. Si necesitas ayuda, nuestro equipo te acompaña en cada paso.
¿Tienes preguntas? Habla con un experto por WhatsApp