API REST · planes Agenda PRO, Profesional y Corporativo

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.

Solicitud
GET /api/public/products/search?q=cera
Host: api.multitiendas.shop
Authorization: Bearer TU_TOKEN
X-Tenant: tu-empresa
Accept: application/json
200 OKapplication/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/public

Autenticación

Token Bearer por empresa y header X-Tenant

Formato

JSON sobre HTTPS

45 endpoints

8 grupos de recursos documentados

Primeros pasos

Tu primera solicitud en tres pasos

  1. 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.

  2. 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.

  3. Paso 3

    Envía los dos headers

    Authorization con tu token y X-Tenant con tu empresa, en cada solicitud.

Headers obligatorios
Authorization: Bearer TU_TOKEN
X-Tenant: tu-empresa
curl "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.

Referencia

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.

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

    Crea 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.
  • GET
    /quotations/{id}/pdf

    Descarga el PDF de una cotización.

  • POST
    /catalog/pdf

    Genera 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

    Crea 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

    Lista 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.
  • GET
    /orders/{id}

    Detalle de un pedido con cliente, ítems y totales.

  • POST
    /orders/notify-whatsapp

    Enví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.

  • GET
    /contapos/customers

    Clientes con documento y datos de contacto.

  • GET
    /contapos/proveedores

    Proveedores.

  • GET
    /contapos/employees

    Empleados con tipo y número de documento.

  • GET
    /contapos/locations/stores

    Sedes y bodegas de la empresa.

  • GET
    /contapos/catalog/products

    Productos. También /catalog/variants, /catalog/categories y /catalog/services.

  • GET
    /contapos/catalog/expense-categories

    Categorías de gastos. También /catalog/income-categories.

  • GET
    /contapos/operations/sales

    Ventas 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/operations/purchases

    Compras a proveedores.

    Permiso: contapos:read

    cursor integer
    Posición de la siguiente página.
    since datetime
    Solo lo nuevo desde esa fecha.
  • GET
    /contapos/operations/expenses

    Gastos. También /operations/income para ingresos y /operations/adjustments para ajustes de inventario.

  • GET
    /contapos/balances/current

    Saldos actuales: caja, valor del inventario, cuentas por cobrar y por pagar.

  • GET
    /contapos/cartera/receivables

    Cuentas por cobrar abiertas, con cliente, vencimiento y saldo pendiente.

  • GET
    /contapos/cartera/payables

    Cuentas por pagar abiertas a proveedores.

Empleados

Consulta tu equipo y da de alta empleados con su acceso al sistema.

  • GET
    /employees

    Lista 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.
  • GET
    /employees/{id}

    Detalle con comisiones por servicios y ventas, bonificaciones y resumen de ganancias de los últimos 30 días.

  • POST
    /employees

    Crea 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.

  • GET
    /appointments/platform

    Banner, ícono y WhatsApp configurados para la app de citas.

  • GET
    /appointments/employees

    Profesionales 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/available-slots

    Horarios 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

    Agenda 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/by-email

    Citas 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.
  • GET
    /appointments/{id}

    Detalle de la cita con profesional y servicio.

  • PUT
    /appointments/{id}

    Cambia profesional, servicio, fecha u hora. Solo si faltan al menos 30 minutos.

  • POST
    /appointments/{id}/confirm

    Confirma la cita y notifica.

  • POST
    /appointments/{id}/cancel

    Cancela 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.

  • POST
    /customers/otp/send

    Envía un código de 6 dígitos por WhatsApp. Luego /otp/verify y /register.

  • POST
    /customers/login

    Inicio de sesión con teléfono y contraseña.

  • POST
    /customers/password-reset

    Cambia la contraseña con un código enviado por WhatsApp (/password-reset/send-otp).

  • POST
    /customers/claim-account

    Activa el acceso de un cliente que ya existía, sin perder su historial.

  • GET
    /customers/me

    Perfil del cliente. PUT para actualizarlo y POST /logout para cerrar sesión.

  • GET
    /customers/appointments

    Próximas citas del cliente. También /history, agendar (POST) y cancelar.

  • GET
    /customers/notifications

    Recordatorios y confirmaciones. Marca como leídas una o todas.

Ubicaciones de Colombia

Departamentos y municipios con códigos DIAN, los mismos del panel.

  • GET
    /locations/departments

    Departamentos con su código DANE.

  • GET
    /locations/municipalities

    Municipios. 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.
Automatizaciones

Ú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.

  1. 1Schedule Trigger todos los días a las 9 p. m.
  2. 2Nodo HTTP Request con los headers de tu token
  3. 3Suma los totales y envíalos con el nodo de Gmail o WhatsApp

Más ideas en integraciones.

Configuración en n8n
// 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-empresa
Próximamente

Webhooks

Avisos automáticos a tu sistema cuando entra un pedido, se registra una venta o cambia una cita, sin tener que consultar.

Próximamente

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