
Loading Optiviera...
JSON · Auth JWT · Multi-tenant
Integre cualquier sistema con Optiviera a través de una API REST completamente documentada. Todos los endpoints requieren un token JWT Bearer y se limitan automáticamente a su tenant.
De cero a tu primera llamada API en tres pasos
Envíe sus credenciales a POST /api/auth/login. La respuesta contiene un token JWT válido por 24 horas.
Adjunte el token a cada solicitud: Authorization: Bearer [token]
Todos los endpoints están bajo https://optiviera.com/api y responden con JSON. El contexto del tenant se deriva automáticamente de su token.
Cada solicitud debe llevar un token JWT Bearer válido obtenido del endpoint de inicio de sesión
curl -X POST https://optiviera.com/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"[email protected]","password":"••••"}'{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expiresIn": 86400,
"tokenType": "Bearer"
}Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...Todo lo que necesita saber antes de su primera llamada
URL base: https://optiviera.com/api — Todos los endpoints son relativos a esta URL base. Use siempre HTTPS.
Todas las solicitudes y respuestas usan application/json. Establezca Content-Type: application/json en operaciones de escritura.
Los datos se filtran automáticamente a su organización usando el TenantId incluido en su JWT.
Los endpoints de lista admiten ?page=1&pageSize=20. La respuesta incluye totalCount, page y pageSize.
La mayoría de los endpoints de lista aceptan parámetros como ?status=Open&sortBy=createdAt&sortDir=desc.
12 grupos de recursos que cubren todos los módulos de la plataforma
/api/auth/login/api/auth/refresh/api/auth/logout/api/tickets/api/tickets/api/tickets/{id}/api/tickets/{id}/api/tickets/{id}/api/tickets/{id}/comments/api/invoices/api/invoices/api/journal-entries/api/journal-entries/api/balance-sheet/api/trial-balance/api/employees/api/employees/api/employees/{id}/api/employees/{id}/api/positions/api/departments/api/payroll/api/payroll/run/api/payroll/{id}/api/payroll/{id}/approve/api/orders/api/orders/api/quotations/api/quotations/api/customers/api/customers/api/purchase-orders/api/purchase-orders/api/suppliers/api/suppliers/api/purchase-orders/{id}/api/products/api/products/api/stock-movements/api/stock-movements/api/warehouses/api/leads/api/leads/api/contacts/api/contacts/api/pipeline-stages/api/work-orders/api/work-orders/api/work-orders/{id}/api/work-orders/{id}/api/work-orders/{id}/api/reports/tickets/api/reports/finance/api/reports/hr/api/reports/sales/api/reports/inventory/api/settings/tenant/api/settings/tenant/api/settings/users/api/sla-configs/api/sla-configsLa semántica HTTP estándar se utiliza de forma coherente en toda la API
Solicitud exitosa. El cuerpo contiene el resultado.
Recurso creado. El cuerpo contiene el nuevo objeto con su ID.
Solicitud exitosa. Sin cuerpo (usado para DELETE).
Solicitud mal formada o campos obligatorios faltantes.
Token JWT faltante, caducado o inválido.
Token válido pero permisos insuficientes para esta acción.
El recurso no existe o pertenece a otro tenant.
La validación de entrada falló. Vea el array details en el cuerpo de la respuesta.
Error inesperado del servidor. Contacte al soporte con el ID de solicitud.
Todas las respuestas de error siguen una estructura JSON coherente
Cuando una solicitud falla, la API devuelve un cuerpo JSON estructurado. Use el array details para retroalimentación de validación a nivel de campo.
{
"status": 422,
"error": "ValidationError",
"message": "Request validation failed",
"details": [
{ "field": "email", "message": "Email is required" },
{ "field": "password", "message": "Minimum 8 characters" }
]
}Explore la documentación Swagger interactiva completa o contacte a nuestro equipo para acceso a la API.