Documentación
API de Moon Inventory
Una API REST sobre HTTPS que expone el mismo modelo de datos que usa la aplicación: inventario, ventas, servicios, gastos, compras y reportes. Todas las respuestas son JSON y todo está delimitado a tu organización.
Introducción
La API usa convenciones REST: sustantivos en la ruta, verbos HTTP para la acción, códigos de estado estándar y JSON en peticiones y respuestas.
URL base
https://mooninventoryapi.onrender.com/apiTodas las rutas de esta documentación se muestran completas e incluyen el prefijo /api. La API no está versionada por URL todavía; los cambios incompatibles se anunciarán con antelación por correo a los administradores de la organización.
Comprobación rápida
curl https://mooninventoryapi.onrender.com/api/healthRequisitos
El acceso programático es una funcionalidad del plan Empresarial. Las claves de API solo pueden crearse y usarse si tu organización tiene ese plan activo.
Si tu plan no lo incluye, cualquier petición autenticada con una clave responde 403 con el código FEATURE_NOT_IN_PLAN.
Autenticación
La API acepta dos tipos de credencial. Para integraciones usa siempre una clave de API; el token de sesión (JWT) existe para la aplicación web y caduca a las 24 horas.
1. Crear una clave
Desde la aplicación: Configuración → Claves de API → Crear clave. La clave se muestra una sola vez; guárdala en tu gestor de secretos en ese momento, porque solo almacenamos su hash y no podemos recuperarla después.
Una clave tiene el formato:
mk_live_XSb9m2q7Kv1pLd0zR4tYhN8jWcE3gAuF6oQi5rTvBnM2. Enviarla en cada petición
Se acepta en cualquiera de estas dos cabeceras — usa una, no ambas:
Authorization: Bearer mk_live_TU_CLAVE
# o bien
X-API-Key: mk_live_TU_CLAVEEjemplos
curl -s "https://mooninventoryapi.onrender.com/api/products/products?page=1&limit=20" \
-H "Authorization: Bearer mk_live_TU_CLAVE"const res = await fetch("https://mooninventoryapi.onrender.com/api/products/products?limit=20", {
headers: { "X-API-Key": process.env.MOON_API_KEY },
});
if (!res.ok) {
const error = await res.json();
throw new Error(`${res.status} ${error.code ?? ""}: ${error.message}`);
}
const { data } = await res.json();import os, requests
res = requests.get(
"https://mooninventoryapi.onrender.com/api/products/products",
headers={"X-API-Key": os.environ["MOON_API_KEY"]},
params={"page": 1, "limit": 20},
timeout=30,
)
res.raise_for_status()
data = res.json()["data"]Nunca uses una clave desde el navegador
Una clave en JavaScript de cliente, en una app móvil o en un repositorio público queda expuesta a cualquiera. Úsala solo desde tu servidor. Si se filtra, revócala de inmediato: la revocación es instantánea.
Scopes y permisos
Cada clave lleva uno o más scopes, que limitan los verbos HTTP permitidos:
| Scope | Permite | Bloquea |
|---|---|---|
read | GET, HEAD, OPTIONS | POST, PUT, PATCH, DELETE |
write | Todos los verbos | — |
Un intento de escritura con una clave de solo lectura responde 403 con INSUFFICIENT_API_SCOPE.
La clave hereda los permisos de quien la creó
Una clave actúa como el usuario que la generó y está sujeta a su rol y sus permisos (RBAC), además del scope. Si ese usuario no puede ver gastos, la clave tampoco. Si desactivas al usuario o cambias su rol, sus claves se ven afectadas de inmediato.
Recomendación: crea un usuario de servicio con el rol mínimo necesario y genera las claves de integración desde esa cuenta.
Formato de respuestas
Las respuestas correctas devuelven status: "success" y el contenido dentro de data.
{
"status": "success",
"data": {
"products": [ { "_id": "66f1…", "name": "Café molido 1lb", "price": 350 } ],
"total": 128,
"page": 1,
"totalPages": 7
}
}La forma exacta de data depende del endpoint: la clave interna suele llamarse como el recurso (products, sales…). Los identificadores son ObjectId de 24 caracteres hexadecimales y las fechas van en ISO 8601 (UTC).
Errores
Los errores usan códigos HTTP estándar y devuelven status: "error" con un mensaje legible. Cuando el error es accionable incluye además un code estable — usa ese campo en tu lógica, no el texto del mensaje, que puede cambiar.
{
"status": "error",
"code": "INSUFFICIENT_API_SCOPE",
"message": "This API key is read-only. Create a key with the 'write' scope to perform this operation.",
"data": { "scopes": ["read"] }
}| HTTP | code | Significado y qué hacer |
|---|---|---|
| 400 | — | Petición inválida. Revisa el cuerpo y los parámetros; los errores de validación detallan el campo. |
| 401 | INVALID_API_KEY | Clave inexistente, mal formada, revocada o caducada. No reintentes: genera una nueva. |
| 401 | — | Token de sesión caducado o inválido (solo autenticación por JWT). |
| 403 | INSUFFICIENT_API_SCOPE | La clave es de solo lectura y se intentó escribir. Crea una clave con scope write. |
| 403 | FEATURE_NOT_IN_PLAN | Tu plan no incluye esta funcionalidad. data.requiredPlan indica cuál la incluye. |
| 403 | TIER_TOO_LOW | El módulo requiere un plan superior. data.requiredPlan indica el mínimo. |
| 403 | API_KEY_SELF_MANAGEMENT_FORBIDDEN | Una clave intentó gestionar claves. Usa la sesión de la aplicación. |
| 403 | — | Tu rol no tiene permiso para esta acción (RBAC), o la organización/usuario está inactivo. |
| 404 | — | El recurso no existe o no pertenece a tu organización. |
| 429 | — | Límite de peticiones superado. Espera y reintenta con backoff exponencial. |
| 500 | — | Error del servidor. Reintenta con backoff; si persiste, contáctanos. |
Límites de uso
- 100 peticiones cada 15 minutos por IP sobre la API en general. Al superarlo recibes
429. - Las respuestas incluyen las cabeceras estándar
RateLimit-Limit,RateLimit-RemainingyRateLimit-Reset. Úsalas para regular tu ritmo en lugar de esperar al 429. - Tamaño máximo del cuerpo: 10 KB en JSON. Para cargas grandes usa los endpoints de
/api/upload. - Los endpoints de IA consumen además los créditos mensuales de tu plan y responden
402cuando se agotan.
Escribe integraciones tolerantes
Reintenta los 429 y 5xx con backoff exponencial y un poco de aleatoriedad. Nunca reintentes un 401 o 403: no van a mejorar solos.
Paginación y filtros
Los listados aceptan page (desde 1) y limit, y devuelven el total junto a los resultados.
curl -s "https://mooninventoryapi.onrender.com/api/sales/invoices?page=2&limit=50" \
-H "X-API-Key: mk_live_TU_CLAVE"Muchos listados aceptan además filtros propios del recurso — rangos de fecha (startDate, endDate), estado, categoría o búsqueda por texto. Los parámetros no reconocidos se ignoran, así que compruébalos con cuidado.
Recorre las páginas de forma estable
Si se crean registros mientras paginas, el contenido se desplaza. Para exportaciones completas, filtra por un rango de fechas cerrado y ordena por fecha de creación en lugar de recorrer page a ciegas.
Gestión de claves
Estos endpoints se usan solo con la sesión de la aplicación. Una clave de API no puede crear ni revocar claves — así, una clave filtrada no puede perpetuarse a sí misma.
/api/api-keysLista las claves de la organización. Nunca devuelve el secreto./api/api-keysCrea una clave. Única respuesta que incluye el texto plano./api/api-keys/:idRevoca una clave. Deja de funcionar de inmediato.Crear una clave
POST /api/api-keys
{
"name": "Integración ERP",
"scopes": ["read", "write"],
"expiresInDays": 365
}scopes por defecto es ["read"]; expiresInDays es opcional (1–3650) y si se omite la clave no caduca.
{
"status": "success",
"message": "Guarda esta clave ahora: por seguridad no volverá a mostrarse completa.",
"data": {
"key": {
"id": "66f1…", "name": "Integración ERP",
"prefix": "mk_live_XSb9m2q7", "scopes": ["read","write"],
"expiresAt": "2027-09-04T00:00:00.000Z", "revokedAt": null
},
"plaintext": "mk_live_XSb9m2q7Kv1pLd0zR4tYhN8jWcE3gAuF6oQi5rTvBnM"
}
}Seguridad
- Guardamos únicamente un hash SHA-256 de la clave. Ni nosotros podemos recuperar el texto plano, por eso solo se muestra al crearla.
- La comparación es de tiempo constante, de modo que no se puede deducir una clave midiendo tiempos de respuesta.
- Concede el mínimo privilegio: usa
readsalvo que la integración escriba de verdad, y créala desde un usuario de servicio con un rol acotado. - Rota las claves periódicamente con
expiresInDays. Crea la nueva, migra la integración y revoca la anterior. - Guárdalas en variables de entorno o un gestor de secretos. Nunca en el control de versiones ni en código que llegue al navegador.
- Todo el tráfico va sobre HTTPS. Las peticiones desde un navegador están sujetas a una lista de orígenes permitidos (CORS); las llamadas de servidor a servidor no se ven afectadas.
Referencia de endpoints
420 endpoints en 39 módulos. Los módulos marcados con un candado exigen un plan concreto: la comprobación ocurre en el servidor, así que una clave de un plan inferior recibe 403 aunque conozca la ruta.
Analítica
/api/analytics7 endpointsSeries y agregados analíticos.
- GET
/api/analytics - GET
/api/analytics/dashboard - GET
/api/analytics/insights - GET
/api/analytics/inventory-trends - GET
/api/analytics/profit-margins - GET
/api/analytics/sales-trends - POST
/api/analytics/visits
Anuncios
/api/system-announcements6 endpointsAnuncios del sistema.
- GET
/api/system-announcements - POST
/api/system-announcements - DELETE
/api/system-announcements/:id - PUT
/api/system-announcements/:id - POST
/api/system-announcements/:id/dismiss - GET
/api/system-announcements/active
Archivos
/api/upload6 endpointsCarga de imágenes y archivos.
- POST
/api/upload/avatar - PUT
/api/upload/avatar - POST
/api/upload/image - POST
/api/upload/images - POST
/api/upload/logo - PUT
/api/upload/logo
Auditoría
/api/audit-logs6 endpointshasAuditLogs · Profesional+Registro de quién hizo qué y cuándo.
- GET
/api/audit-logs - POST
/api/audit-logs - GET
/api/audit-logs/entity/:entityType/:entityId - GET
/api/audit-logs/recent - GET
/api/audit-logs/stats - GET
/api/audit-logs/user/:userId
Bajas de inventario
/api/write-offs11 endpointsProfesional+ (por tier)Mermas, roturas y ajustes con motivo.
- GET
/api/write-offs - POST
/api/write-offs - GET
/api/write-offs/:id - PUT
/api/write-offs/:id - POST
/api/write-offs/:id/cancel - GET
/api/write-offs/analytics - GET
/api/write-offs/reasons - POST
/api/write-offs/reasons - DELETE
/api/write-offs/reasons/:id - GET
/api/write-offs/reasons/:id - PUT
/api/write-offs/reasons/:id
Campañas
/api/campaigns8 endpointsProfesional+ (por tier)Campañas de descuento y su retorno.
- GET
/api/campaigns - POST
/api/campaigns - DELETE
/api/campaigns/:id - GET
/api/campaigns/:id - PUT
/api/campaigns/:id - GET
/api/campaigns/:id/roi - PATCH
/api/campaigns/:id/status - GET
/api/campaigns/analytics
Conduces
/api/delivery-notes8 endpointsNotas de entrega.
- GET
/api/delivery-notes - POST
/api/delivery-notes - DELETE
/api/delivery-notes/:id - GET
/api/delivery-notes/:id - PUT
/api/delivery-notes/:id - POST
/api/delivery-notes/:id/cancel - POST
/api/delivery-notes/:id/dispatch - POST
/api/delivery-notes/:id/invoice
Cotizaciones
/api/quotations8 endpointsCotizaciones y su ciclo de aceptación o rechazo.
- GET
/api/quotations - POST
/api/quotations - DELETE
/api/quotations/:id - GET
/api/quotations/:id - PUT
/api/quotations/:id - POST
/api/quotations/:id/accept - POST
/api/quotations/:id/reject - POST
/api/quotations/:id/send
Cuentas por cobrar
/api/receivables4 endpointsSaldos pendientes de clientes.
- GET
/api/receivables/aging-report - GET
/api/receivables/by-client - GET
/api/receivables/overdue - GET
/api/receivables/summary
Departamentos
/api/departments6 endpointsDepartamentos dentro de la organización.
- GET
/api/departments - POST
/api/departments - DELETE
/api/departments/:id - GET
/api/departments/:id - PUT
/api/departments/:id - GET
/api/departments/hierarchy
Encuestas
/api/surveys6 endpointsEncuestas a usuarios.
- POST
/api/surveys/:id/responses - GET
/api/surveys/active - GET
/api/surveys/backoffice - POST
/api/surveys/backoffice - PATCH
/api/surveys/backoffice/:id - GET
/api/surveys/backoffice/:id/results
Entradas de mercancía
/api/goods-receipts6 endpointsRecepción de mercancía contra órdenes de compra.
- GET
/api/goods-receipts - POST
/api/goods-receipts - GET
/api/goods-receipts/:id - PUT
/api/goods-receipts/:id - POST
/api/goods-receipts/:id/cancel - POST
/api/goods-receipts/:id/confirm
Etiquetas y códigos
/api/labels3 endpointsGeneración de etiquetas y códigos de barras.
- POST
/api/labels/batch - POST
/api/labels/print/:productId - POST
/api/labels/testLabelPrinter
Feedback
/api/feedback13 endpointsEnvío de comentarios.
- POST
/api/feedback - POST
/api/feedback/:id/comments - POST
/api/feedback/:id/vote - GET
/api/feedback/backoffice/board - POST
/api/feedback/backoffice/columns - DELETE
/api/feedback/backoffice/columns/:id - PATCH
/api/feedback/backoffice/columns/:id - PATCH
/api/feedback/backoffice/settings - PATCH
/api/feedback/backoffice/tickets/:id - POST
/api/feedback/backoffice/tickets/:id/comments - GET
/api/feedback/ideas - GET
/api/feedback/mine - GET
/api/feedback/settings
Gastos
/api/expenses34 endpointshasExpenseTracking · Básico+Gastos, categorías, presupuestos, cuentas por pagar y análisis.
- GET
/api/expenses - POST
/api/expenses - DELETE
/api/expenses/:id - GET
/api/expenses/:id - PUT
/api/expenses/:id - POST
/api/expenses/:id/mark-paid - POST
/api/expenses/:id/partial-payment - GET
/api/expenses/:id/payment-history - GET
/api/expenses/analysis/categories - GET
/api/expenses/analysis/suppliers - GET
/api/expenses/analysis/timeline - GET
/api/expenses/budgets - POST
/api/expenses/budgets - DELETE
/api/expenses/budgets/:id - GET
/api/expenses/budgets/:id - PUT
/api/expenses/budgets/:id - GET
/api/expenses/budgets/months-years - GET
/api/expenses/categories - POST
/api/expenses/categories - DELETE
/api/expenses/categories/:id - GET
/api/expenses/categories/:id - PUT
/api/expenses/categories/:id - GET
/api/expenses/dashboard - GET
/api/expenses/distribution - GET
/api/expenses/payables/aging-report - GET
/api/expenses/payables/overdue - GET
/api/expenses/payables/summary - GET
/api/expenses/reports/generate - GET
/api/expenses/suppliers - POST
/api/expenses/suppliers - DELETE
/api/expenses/suppliers/:id - GET
/api/expenses/suppliers/:id - PUT
/api/expenses/suppliers/:id - GET
/api/expenses/trend
IA de ventas
/api/sales-ai7 endpointsPredicciones y análisis de ventas con IA.
- POST
/api/sales-ai/clients/:clientId/insight - POST
/api/sales-ai/dashboard/insight - GET
/api/sales-ai/insights - GET
/api/sales-ai/insights/:entityType/:entityId - DELETE
/api/sales-ai/insights/:insightId - POST
/api/sales-ai/sales/:saleId/insight - GET
/api/sales-ai/summary
Inteligencia artificial
/api/ai15 endpointsAnálisis con IA. Consume créditos del plan.
- POST
/api/ai/budget/optimization - GET
/api/ai/credits - GET
/api/ai/credits/packages - POST
/api/ai/credits/purchase - POST
/api/ai/credits/purchase/capture - POST
/api/ai/credits/purchase/paddle - POST
/api/ai/credits/purchase/paddle/capture - POST
/api/ai/expenses/:expenseId/insight - GET
/api/ai/insights - GET
/api/ai/insights/:entityType/:entityId - DELETE
/api/ai/insights/:insightId - POST
/api/ai/inventory/optimization - POST
/api/ai/products/:productId/insight - POST
/api/ai/products/demand-forecast - GET
/api/ai/summary
Inventario y productos
/api/products39 endpointsProductos, categorías, variantes, lotes, etiquetas y movimientos de stock.
- POST
/api/products/:id/add-stock - POST
/api/products/:id/adjust-stock - POST
/api/products/:id/remove-discount - POST
/api/products/:id/remove-stock - GET
/api/products/:id/stock-movements - GET
/api/products/categories - POST
/api/products/categories - DELETE
/api/products/categories/:id - GET
/api/products/categories/:id - PUT
/api/products/categories/:id - GET
/api/products/discounts/active - GET
/api/products/discounts/dashboard - GET
/api/products/exportAsExcel - GET
/api/products/inventory-value - GET
/api/products/lots/:lotId - PUT
/api/products/lots/:lotId - GET
/api/products/lots/expired - GET
/api/products/lots/expiring - GET
/api/products/low-stock - GET
/api/products/out-of-stock - GET
/api/products/products - POST
/api/products/products - DELETE
/api/products/products/:id - GET
/api/products/products/:id - PUT
/api/products/products/:id - GET
/api/products/products/:id/lots - GET
/api/products/products/:id/variants - POST
/api/products/products/:id/variants - GET
/api/products/products/category/:categoryId - GET
/api/products/stock-movements - GET
/api/products/tags - POST
/api/products/tags - DELETE
/api/products/tags/:id - GET
/api/products/tags/:id - PUT
/api/products/tags/:id - DELETE
/api/products/variants/:variantId - GET
/api/products/variants/:variantId - PUT
/api/products/variants/:variantId - GET
/api/products/variants/:variantId/lots
MFA
/api/mfa6 endpointsAutenticación de dos factores de la cuenta.
- POST
/api/mfa/disable - POST
/api/mfa/enable - POST
/api/mfa/regenerate-backup-codes - POST
/api/mfa/setup - GET
/api/mfa/status - POST
/api/mfa/verify-login
Notificaciones
/api/notifications2 endpointsNotificaciones de la organización.
- GET
/api/notifications - POST
/api/notifications/:id/read
Organización
/api/organization10 endpointsDatos y preferencias de la organización.
- GET
/api/organization - PUT
/api/organization - DELETE
/api/organization/:id - GET
/api/organization/:id - PUT
/api/organization/:id - GET
/api/organization/ai-preferences - PUT
/api/organization/ai-preferences - GET
/api/organization/all - GET
/api/organization/check-slug/:slug - PATCH
/api/organization/logo
Panel
/api/dashboard11 endpointsMétricas del panel principal.
- GET
/api/dashboard/best-selling - GET
/api/dashboard/category-distribution - GET
/api/dashboard/comprehensive - GET
/api/dashboard/expenses-overview - GET
/api/dashboard/low-stock - GET
/api/dashboard/monthly-sales-expenses-profit - GET
/api/dashboard/recent-sales - GET
/api/dashboard/sales-by-category - GET
/api/dashboard/sales-expenses-profit - GET
/api/dashboard/summary - GET
/api/dashboard/supplier-summary
Permisos
/api/permissions3 endpointsCatálogo de permisos disponibles.
- GET
/api/permissions - POST
/api/permissions - PATCH
/api/permissions/:permissionId
Posiciones
/api/positions6 endpointsCargos y posiciones organizacionales.
- GET
/api/positions - POST
/api/positions - DELETE
/api/positions/:id - GET
/api/positions/:id - PUT
/api/positions/:id - GET
/api/positions/hierarchy
Precios mayoristas
/api/wholesale-prices5 endpointsListas de precio por mayorista.
- POST
/api/wholesale-prices - DELETE
/api/wholesale-prices/:id - GET
/api/wholesale-prices/client/:clientId - GET
/api/wholesale-prices/product/:productId - GET
/api/wholesale-prices/search/:code
Proveedores
/api/suppliers5 endpointshasSupplierManagement · Básico+Catálogo de proveedores.
- GET
/api/suppliers - POST
/api/suppliers - DELETE
/api/suppliers/:id - GET
/api/suppliers/:id - PUT
/api/suppliers/:id
Punto de venta
/api/pos11 endpointsBásico+ (por tier)Turnos de caja, ventas rápidas, ventas aparcadas y anulaciones.
- GET
/api/pos/dashboard - GET
/api/pos/parked - POST
/api/pos/parked - DELETE
/api/pos/parked/:id - POST
/api/pos/sales - GET
/api/pos/sales-history - POST
/api/pos/sales/:id/void - GET
/api/pos/shifts - POST
/api/pos/shifts/close - POST
/api/pos/shifts/open - GET
/api/pos/wholesaler/:code
Reportes
/api/reports23 endpointsGeneración, descarga y programación de reportes.
- GET
/api/reports - DELETE
/api/reports/:id - GET
/api/reports/:id - GET
/api/reports/:id/download/excel - GET
/api/reports/:id/download/pdf - POST
/api/reports/:id/save - POST
/api/reports/:id/save-template - POST
/api/reports/:id/schedule - POST
/api/reports/:id/share - GET
/api/reports/action-to-take/:id - GET
/api/reports/ai-insight-action/:insightId - GET
/api/reports/categories - GET
/api/reports/customers/segmentation - GET
/api/reports/expenses/categories - GET
/api/reports/financial/profit-loss - POST
/api/reports/generate - GET
/api/reports/inventory/stock-levels - GET
/api/reports/recent - GET
/api/reports/sales/summary - GET
/api/reports/sales/top-products - GET
/api/reports/saved - GET
/api/reports/scheduled - GET
/api/reports/tab-counts
Requisiciones
/api/requisitions9 endpointsSolicitudes internas de compra.
- GET
/api/requisitions - POST
/api/requisitions - DELETE
/api/requisitions/:id - GET
/api/requisitions/:id - PUT
/api/requisitions/:id - POST
/api/requisitions/:id/approve - POST
/api/requisitions/:id/create-po - POST
/api/requisitions/:id/reject - POST
/api/requisitions/:id/submit
Roles
/api/roles6 endpointsRoles asignables dentro de la organización.
- GET
/api/roles - POST
/api/roles - DELETE
/api/roles/:roleId - GET
/api/roles/:roleId - PUT
/api/roles/:roleId - POST
/api/roles/assign-to-user
Servicios
/api/services23 endpointsCategorías, plantillas y transacciones de servicio con sus pagos.
- GET
/api/services/categories - POST
/api/services/categories - DELETE
/api/services/categories/:id - GET
/api/services/categories/:id - PUT
/api/services/categories/:id - GET
/api/services/dashboard - GET
/api/services/payments/analytics - GET
/api/services/templates - POST
/api/services/templates - DELETE
/api/services/templates/:id - GET
/api/services/templates/:id - PUT
/api/services/templates/:id - GET
/api/services/transactions - POST
/api/services/transactions - DELETE
/api/services/transactions/:id - GET
/api/services/transactions/:id - PUT
/api/services/transactions/:id - POST
/api/services/transactions/:id/cancel - POST
/api/services/transactions/:id/complete - PUT
/api/services/transactions/:id/payment-due-date - GET
/api/services/transactions/:id/payments - POST
/api/services/transactions/:id/payments - GET
/api/services/transactions/overdue
Solicitudes de plan
/api/plan-requests6 endpointsActivación asistida por nuestro equipo.
- POST
/api/plan-requests - GET
/api/plan-requests/backoffice - DELETE
/api/plan-requests/backoffice/:id - POST
/api/plan-requests/backoffice/:id/activate - PATCH
/api/plan-requests/backoffice/:id/status - GET
/api/plan-requests/mine
Sucursales
/api/branches6 endpointsUbicaciones físicas y su jerarquía.
- GET
/api/branches - POST
/api/branches - DELETE
/api/branches/:id - GET
/api/branches/:id - PUT
/api/branches/:id - GET
/api/branches/hierarchy
Suscripción
/api/subscriptions27 endpointsPlan actual, cambios de plan y facturación.
- GET
/api/subscriptions - POST
/api/subscriptions - PATCH
/api/subscriptions/:id/auto-renew - POST
/api/subscriptions/:subscriptionId/backoffice - PUT
/api/subscriptions/:subscriptionId/cancel - DELETE
/api/subscriptions/:subscriptionId/exemption - POST
/api/subscriptions/:subscriptionId/exemption - PUT
/api/subscriptions/:subscriptionId/payment - GET
/api/subscriptions/ai-usage - GET
/api/subscriptions/all - GET
/api/subscriptions/analytics - POST
/api/subscriptions/change-plan - GET
/api/subscriptions/current - GET
/api/subscriptions/paddle/:subscriptionId - POST
/api/subscriptions/paddle/:subscriptionId/cancel - POST
/api/subscriptions/paddle/checkout - GET
/api/subscriptions/paddle/confirm - POST
/api/subscriptions/paddle/portal - GET
/api/subscriptions/paid - GET
/api/subscriptions/plans - GET
/api/subscriptions/plans/public - GET
/api/subscriptions/stripe/:subscriptionId - POST
/api/subscriptions/stripe/:subscriptionId/cancel - POST
/api/subscriptions/stripe/checkout - GET
/api/subscriptions/stripe/confirm - POST
/api/subscriptions/stripe/portal - POST
/api/subscriptions/trial
Tareas
/api/tasks4 endpointsTareas internas.
- GET
/api/tasks - POST
/api/tasks - DELETE
/api/tasks/:id - PUT
/api/tasks/:id
Usuarios
/api/users10 endpointsUsuarios de la organización y su perfil.
- GET
/api/users - POST
/api/users - DELETE
/api/users/:id - GET
/api/users/:id - PUT
/api/users/:id - POST
/api/users/:id/reset-password - POST
/api/users/add-to-organization - GET
/api/users/organization-users - GET
/api/users/profile - PUT
/api/users/profile
Ventas y facturas
/api/sales37 endpointsClientes, facturas, pagos parciales, analíticas de venta e impuestos.
- GET
/api/sales/analytics - GET
/api/sales/analytics/categories - GET
/api/sales/analytics/cogs-breakdown - GET
/api/sales/analytics/performance - GET
/api/sales/analytics/timeline - GET
/api/sales/clients - POST
/api/sales/clients - GET
/api/sales/clients/:clientId/invoices - DELETE
/api/sales/clients/:id - GET
/api/sales/clients/:id - PUT
/api/sales/clients/:id - DELETE
/api/sales/clients/anonymous - GET
/api/sales/clients/dashboard-summary - GET
/api/sales/clients/dashboard-summary/:id - GET
/api/sales/clients/top - GET
/api/sales/clients/top/:id/products - GET
/api/sales/dashboard - GET
/api/sales/invoices - POST
/api/sales/invoices - DELETE
/api/sales/invoices/:id - GET
/api/sales/invoices/:id - PUT
/api/sales/invoices/:id - POST
/api/sales/invoices/:id/mark-paid - GET
/api/sales/invoices/:id/payments - POST
/api/sales/invoices/:id/payments - GET
/api/sales/invoices/:id/pdf - POST
/api/sales/invoices/:id/send-reminder - GET
/api/sales/invoices/deleted - GET
/api/sales/invoices/deleted/:id - GET
/api/sales/invoices/invoice-number/:invoiceNumber - GET
/api/sales/invoices/overdue - GET
/api/sales/invoices/partial-payments/list - GET
/api/sales/invoices/pending - GET
/api/sales/products/:productId/monthly-sales - GET
/api/sales/products/:productId/summary - GET
/api/sales/settings/tax - PATCH
/api/sales/settings/toggle-itbis
Versión
/api/version9 endpointsVersión de la plataforma.
- GET
/api/version - POST
/api/version - DELETE
/api/version/:id - PUT
/api/version/:id - POST
/api/version/:id/dismiss - GET
/api/version/api-version - GET
/api/version/check - GET
/api/version/latest - POST
/api/version/webhook/render-deploy
Órdenes de compra
/api/purchase-orders8 endpointsCreación, aprobación, envío y cancelación de órdenes.
- GET
/api/purchase-orders - POST
/api/purchase-orders - GET
/api/purchase-orders/:id - PUT
/api/purchase-orders/:id - POST
/api/purchase-orders/:id/approve - POST
/api/purchase-orders/:id/cancel - GET
/api/purchase-orders/:id/receipts - POST
/api/purchase-orders/:id/send
Limitaciones conocidas
Preferimos decirte esto por adelantado a que lo descubras integrando:
- No hay webhooks salientes. Hoy no notificamos cambios a sistemas externos; hay que consultar (polling). Ten en cuenta el límite de peticiones al elegir la frecuencia.
- No hay endpoint de refresco de token. El login devuelve un
refreshToken, pero no existe una ruta para canjearlo: una sesión JWT caducada exige volver a autenticarse. Es justamente por esto que las integraciones deben usar claves de API, que no caducan salvo que tú lo indiques. - La API no está versionada por URL. No hay
/v1/. Programa de forma defensiva: ignora los campos que no conozcas en lugar de validar la forma exacta de la respuesta. - Hay dos superficies de proveedores —
/api/suppliersy/api/expenses/suppliers. La aplicación usa la segunda; prefiere esa hasta que unifiquemos. - Sin entorno de pruebas separado. Las claves operan sobre tus datos reales. Prueba con una organización de prueba o con claves
readantes de escribir.
Soporte
¿Dudas o un comportamiento que no cuadra con esta documentación? Escríbenos desde Configuración → Feedback en la aplicación, e incluye el método, la ruta, la hora aproximada y el code del error. No nos envíes nunca tu clave.