Download OpenAPI specification:
Documentación oficial de la API de Sistema de Ventas. Esta documentación sirve como "Single Source of Truth" para Frontend, QA y Consumidores Externos.
Endpoints para el flujo completo de autenticación del sistema. Gestiona la obtención del Token Maestro (login), el Token Empresarial (company-access) y el cierre de sesión (logout).
Autentica al usuario con correo y contraseña. Devuelve un Token Maestro y la lista de empresas vinculadas al usuario.
Lógica del frontend según la respuesta:
user.roleSystem es "superadmin" o "soporte" → redirigir al dashboard global.
No requiere Token Empresarial.user.roleSystem es null y companies tiene 1 elemento → el Token Empresarial
ya viene precargado en companies[0].company.auth. Redirigir al dashboard empresarial.user.roleSystem es null y companies tiene más de 1 elemento → todos los
company.auth son null. Mostrar selector de empresa y llamar a POST /auth/company-access.Credenciales para iniciar sesión en el sistema.
| email required | string <email> <= 255 characters Correo electrónico registrado del usuario. |
| password required | string [ 6 .. 24 ] characters Contraseña del usuario. Mínimo 6, máximo 24 caracteres. |
{- "email": "usuario1@gmail.com",
- "password": "Password#123"
}roleSystem = "superadmin", companies = []. Entra directo al dashboard global. No necesita Token Empresarial.
{- "success": true,
- "message": "La sesión se ha iniciado correctamente.",
- "data": {
- "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlblR5cGUiOiJtYXN0ZXIifQ.55WudInmaPffOzq7upm_gPbtuLkj8cNU2-xeSt5gYbE",
- "type": "Bearer",
- "expirationAt": "2026-04-12T13:51:13.802129Z",
- "user": {
- "id": 1,
- "firstName": "Master System",
- "secondName": "Admin",
- "fullName": "Master System Admin",
- "documentType": "CI",
- "documentNumber": "9631256",
- "documentComplement": null,
- "email": "superadmin@valora.com",
- "phone": "59178533899",
- "image": null,
- "roleSystem": "superadmin",
- "state": "enabled",
- "emailVerifiedAt": "2026-04-02T06:11:55.000000Z"
}, - "companies": [ ]
}, - "errors": [ ],
- "meta": { },
- "traceId": "38ab526e-97f2-4ece-9bf5-5977940322f9"
}Genera un Token Empresarial para operar dentro de una empresa específica.
Cuándo usar este endpoint:
Solo cuando el usuario tiene más de una empresa vinculada y todos los company.auth
en la respuesta del login son null. El usuario debe elegir explícitamente con qué empresa
desea operar.
Cómo obtener los valores del body:
companyId → campo companyId de la empresa elegida en companies[] del login.companyUserId → campo companyUserId de ese mismo elemento del array.Resultado: El Token Empresarial recibido reemplaza al Token Maestro como token activo para todos los módulos empresariales (productos, ventas, facturación, clientes, etc.).
Datos para solicitar acceso a una empresa específica. Requiere Token Maestro en el header Authorization.
| companyId required | integer >= 1 ID de la empresa a la que se desea acceder. Debe coincidir con un "companyId" de la lista "companies" retornada en el login. |
| companyUserId required | integer >= 1 ID del vínculo usuario-empresa (campo "companyUserId" de la lista "companies" del login). Identifica la relación exacta entre el usuario y la empresa seleccionada. |
{- "companyId": 2,
- "companyUserId": 2
}{- "success": true,
- "message": "El acceso a la empresa ha sido concedido.",
- "data": {
- "companyId": 2,
- "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlblR5cGUiOiJjb21wYW55IiwiY29tcGFueUlkIjoyfQ.TOKEN_EMPRESA_A",
- "type": "Bearer",
- "expirationAt": "2026-04-17T14:14:49.317991Z"
}, - "errors": [ ],
- "meta": { },
- "traceId": "f392ed62-d94a-4a1a-94c6-4c72f38faf27"
}Revoca la sesión completa del usuario. Invalida el Token Maestro y todos los Tokens Empresariales generados a partir de él en una sola operación.
Comportamiento clave:
401 AUTH_TOKEN_REVOKED.No requiere body. Solo el header Authorization: Bearer <token>.
{- "success": true,
- "message": "La sesión se ha cerrado correctamente.",
- "data": null,
- "errors": [ ],
- "meta": { },
- "traceId": "821b948e-4f63-4d53-baa4-aa6aff665b66"
}Endpoints públicos accesibles sin autenticación previa. Gestionan el registro inicial de empresas en la plataforma SaaS.
Endpoint público que permite a un usuario externo registrar una nueva empresa en el sistema con una estructura mínima y controlada. No requiere autenticación previa.
Dos escenarios principales:
owner y se envía correo de bienvenida.Reglas clave del flujo:
isNewUser en meta para que el frontend interprete el resultado (R18).Datos mínimos requeridos para el registro público de una empresa en el sistema SaaS.
| nit required | string <= 30 characters ^\d+$ Número de Identificación Tributaria de la empresa. Solo dígitos numéricos. Debe ser único en el sistema. |
| category required | string <= 100 characters Categoría o rubro de la empresa. Valores permitidos: accessories, food, automotive, barbershop, boutique, coffee-shop, butcher-shop, clinic, commerce, construction, consulting, education, electronics, training, pharmacy, hardware-store, general, gym, home, printing, jewelry, bookstore, liquor-store, logistics, marketing, minimarket, fashion, furniture, stationery, bakery, hair-salon, perfumery, restaurant, health, supermarket, transportation, technology, tourism, veterinary, shoe-store. |
| legalName required | string <= 255 characters Razón social oficial de la empresa. |
| firstName required | string <= 120 characters Nombres del propietario de la empresa. |
| lastName required | string <= 120 characters Apellidos del propietario de la empresa. |
| email required | string <email> <= 255 characters Correo electrónico del propietario. Determina si el usuario ya existe en el sistema. Si existe, se reutiliza sin modificar sus datos. Si no, se crea un nuevo usuario. |
| password required | string [ 6 .. 24 ] characters Contraseña del propietario. Campo obligatorio por consistencia del flujo público, pero solo se aplica si el usuario no existe previamente en el sistema. Debe contener al menos 1 mayúscula, un número y un símbolo especial. |
{- "nit": "1234567890",
- "category": "technology",
- "legalName": "Mi Empresa de Prueba S.A.",
- "firstName": "Juan",
- "lastName": "Pérez García",
- "email": "juan.perez@example.com",
- "password": "Password#123"
}El correo no existía en el sistema. Se creó el usuario, se creó la empresa, se vincularon con rol owner y se encoló el correo de bienvenida.
{- "success": true,
- "message": "La empresa se ha registrado correctamente.",
- "data": null,
- "errors": [ ],
- "meta": {
- "isNewUser": true
}, - "traceId": "8d1a6ef2-c3f7-45ea-a88b-42bfa1c5bc19"
}Endpoint público que consume el token de verificación del correo empresarial, emitido previamente por el flujo de verificación de correo de empresa.
Comportamiento:
Seguridad:
| token required | string non-empty Token seguro emitido por el flujo de verificación de correo empresarial. |
{- "token": "aB3dEfGhIjKlMnOpQrStUvWxYz0123456789aB3dEfGhIjKlMnOpQrStUvWxYz01"
}El token era válido, vigente y coincidía con el correo actual de la empresa. Se registró la fecha de verificación y se cerró el proceso.
{- "success": true,
- "message": "El correo de la empresa se ha verificado correctamente.",
- "data": {
- "companyId": 21,
- "email": "contacto@saludexpress.com",
- "verified": true,
- "alreadyVerified": false,
- "verifiedAt": "2026-04-14T15:10:00.000000Z"
}, - "errors": [ ],
- "meta": { },
- "traceId": "d44bb1d1-0b1d-4f91-84ca-c4ac3d4ae7c6"
}Endpoints de gestión de empresas. Incluye gestión del perfil de la empresa actual (requiere Token Empresarial) y administración interna (requiere Token Maestro).
Crea una nueva empresa desde el panel administrativo. Si el correo del propietario no existe, se creará el usuario y se le asignará una contraseña autogenerada y enviada a su correo. Si existe, se reutilizará.
Datos requeridos para registrar una nueva empresa y vincular su propietario desde el sistema administrativo.
required | object Objeto con los datos empresariales. |
required | object Objeto con los datos del propietario. |
{- "company": {
- "nit": "1234567890",
- "category": "technology",
- "tradeName": "Mi Empresa Trade",
- "legalName": "Mi Empresa S.R.L.",
- "description": "Empresa de desarrollo de software.",
- "email": "empresa@ejemplo.com",
- "phone": "+59178500000",
- "department": "Santa Cruz",
- "address": "Av. Principal #123",
- "latitude": -17.7833,
- "longitude": -63.1821,
- "logo": "logo.png",
- "banner": "banner.jpg",
- "socialNetworks": [
], - "state": "enabled"
}, - "user": {
- "firstName": "Juan",
- "lastName": "Pérez",
- "email": "juan.perez@example.com",
- "phone": "+59171111111",
- "documentType": "CI",
- "documentNationality": "Boliviana",
- "documentNumber": "1234567",
- "documentComplement": "1B",
- "avatar": "avatar.png"
}
}{- "success": true,
- "message": "La empresa se ha registrado correctamente.",
- "data": null,
- "errors": [ ],
- "meta": {
- "isNewUser": true
}, - "traceId": "a3f2d1c8-4e5b-4f6a-9c7d-1b2e3f4a5b6c"
}Obtiene un listado paginado de todas las empresas registradas en la plataforma SaaS. Permite filtrar por categoría, estado y estado de verificación, además de buscar por término y ordenar por diferentes columnas.
| page | integer >= 1 Default: 1 Número de la página para la paginación. |
| per_page | integer [ 1 .. 100 ] Default: 10 Cantidad de elementos por página. |
| search | string Example: search=El termino a buscar Término de búsqueda para filtrar los resultados. |
| sortBy | string Enum: "nit" "legalName" "tradeName" "owner" "category" "status" "updatedAt" Example: sortBy=updatedAt Campo por el cual ordenar el listado. |
| sortDirection | string Enum: "asc" "desc" Example: sortDirection=desc Dirección del ordenamiento. |
| category | string Example: category=technology Filtro exacto por categoría de la empresa. |
| verification | string Enum: "pending" "completed" "rejected" Example: verification=pending Filtro por estado de verificación de los documentos de la empresa. |
| status | string Enum: "enabled" "disabled" "suspended" Example: status=enabled Filtro por estado general de la empresa. |
{- "success": true,
- "message": "El listado de empresas se ha obtenido correctamente.",
- "data": [
- {
- "id": 1,
- "legalName": "Tech Solutions S.A.",
- "tradeName": "Tech Solutions Trade",
- "nit": "1020304050",
- "owner": {
- "id": 5,
- "fullName": "Carlos Mendoza"
}, - "category": "technology",
- "verification": "completed",
- "status": "enabled",
- "updatedAt": "2026-05-01T10:00:00Z"
}, - {
- "id": 2,
- "legalName": "Comercializadora El Sol",
- "tradeName": null,
- "nit": "5040302010",
- "owner": {
- "id": 8,
- "fullName": "Ana Rojas"
}, - "category": "Comercio",
- "verification": "pending",
- "status": "suspended",
- "updatedAt": "2026-04-28T14:30:00Z"
}
], - "errors": [ ],
- "meta": {
- "pagination": {
- "page": 1,
- "perPage": 10,
- "total": 2,
- "lastPage": 1
}, - "sort": {
- "sortBy": "updatedAt",
- "sortDirection": "desc"
}, - "filters": {
- "category": null,
- "verification": null,
- "status": null
}, - "search": {
- "value": null
}
}, - "traceId": "b8c3e4d5-f6a7-8b9c-0d1e-2f3a4b5c6d7e"
}Obtiene el detalle completo de una empresa desde el entorno interno del sistema. Retorna toda la información necesaria para la revisión, gestión y seguimiento del perfil empresarial, incluyendo los datos completos del propietario principal y una vista resumida (últimos 5 registros) del historial reciente de verificación. Las imágenes y archivos se retornan como rutas completas listas para su consumo, acompañadas de metadatos básicos.
| id required | integer >= 1 Identificador único de la empresa. |
{- "success": true,
- "message": "Operación exitosa",
- "data": {
- "company": {
- "id": 21,
- "nit": "8763011631",
- "legalName": "Mi Salud Express SA.",
- "tradeName": "Farmacia Salud Express",
- "description": "Cadena minorista de productos farmacéuticos.",
- "category": "pharmacy",
- "email": "contacto@saludexpress.com",
- "phone": "+59163248810",
- "address": "3er Anillo Externo, Calle Angel Roca",
- "department": "Santa Cruz",
- "latitude": -17.7833,
- "longitude": -63.1821,
- "logoFile": {
- "name": "logo",
- "extension": "png",
- "size": 184320
}, - "bannerFile": {
- "name": "banner",
- "extension": "jpg",
- "size": 512000
}, - "socialNetworks": [
], - "verified": false,
- "state": "enabled",
- "verifiedAt": null,
- "emailVerifiedAt": null,
- "createdAt": "2026-04-10T10:00:00Z",
- "updatedAt": "2026-04-14T09:30:00Z"
}, - "user": {
- "id": 44,
- "email": "mariaparedes@gmail.com",
- "firstName": "Maria",
- "secondName": "Paredes",
- "fullName": "Maria Paredes",
- "phone": "+59169914251",
- "avatarFile": {
- "name": "avatar",
- "extension": "png",
- "size": 102400
}, - "documentType": "CI",
- "documentNationality": "Bolivia",
- "documentNumber": "8763011",
- "documentComplement": null,
- "state": "enabled",
- "emailVerifiedAt": "2026-04-12T08:00:00Z",
- "createdAt": "2026-04-10T10:00:00Z",
- "updatedAt": "2026-04-12T08:00:00Z"
}, - "verification": [
- {
- "id": 101,
- "requestCode": "d70cfc28-0693-41e3-9ca9-7e1342ffb99a",
- "status": "process",
- "observation": "Solicitud en revisión administrativa.",
- "user": {
- "id": 44,
- "fullName": "Maria Paredes",
}, - "createdAt": "2026-04-14T09:20:00Z"
}
]
}, - "errors": [ ],
- "meta": {
- "emailRequiresVerification": false,
- "verification": "completed"
}, - "traceId": "729bb1bf-882d-483b-89d3-5855dc5af3aa"
}Actualiza de manera parcial los datos de la empresa y del propietario.
Este endpoint requiere rol de superadmin o soporte.
Reglas de negocio críticas:
category o la legalName (Razón Social), la empresa perderá su estado de verificado automáticamente y se generará una nueva solicitud de verificación en el historial.enabled.| id required | integer ID interno de la empresa a actualizar. |
Datos requeridos para actualizar parcialmente una empresa y su propietario.
object Objeto con los datos empresariales a actualizar. | |
object Objeto con los datos del propietario vinculado. |
{- "company": {
- "category": "technology",
- "tradeName": "Mi Empresa Trade",
- "legalName": "Mi Empresa S.R.L.",
- "description": "Empresa dedicada al desarrollo de software",
- "email": "contacto@nuevaempresa.com",
- "phone": "+59178500000",
- "department": "Santa Cruz",
- "address": "Av. Principal #123",
- "latitude": -17.7833,
- "longitude": -63.1821,
- "logo": "logo.png",
- "banner": "banner.jpg",
- "socialNetworks": [
], - "state": "enabled"
}, - "user": {
- "phone": "+59170000001",
- "firstName": "Pedro",
- "lastName": "Gómez",
- "documentType": "CI",
- "documentNationality": "Boliviana",
- "documentNumber": "9876543",
- "documentComplement": "1B",
- "avatar": "avatar.png"
}
}{- "success": true,
- "message": "Operación exitosa",
- "data": null,
- "errors": [ ],
- "meta": {
- "verificationReset": true,
- "verificationRequestCreated": true,
- "emailVerificationReset": false
}, - "traceId": "729bb1bf-882d-483b-89d3-5855dc5af3aa"
}Elimina físicamente una empresa y sus dependencias directas desde el entorno administrativo.
Esta operación:
superadmin o soporte).restrictOnDelete() (ej. verificaciones NIT y correo, audit).| id required | integer >= 1 Example: 1 Identificador único de la empresa a eliminar. |
{- "success": true,
- "message": "Empresa eliminada permanentemente a través del endpoint de administración.",
- "data": null,
- "errors": [ ],
- "meta": {
- "deletedCompany": true,
- "deletedCompanyUsersCount": 2,
- "deletedUsersCount": 1,
- "preservedUsersCount": 1,
- "deletedNitVerificationCount": 3,
- "deletedEmailVerificationCount": 2
}, - "traceId": "729bb1bf-882d-483b-89d3-5855dc5af3aa"
}Obtiene el listado paginado de verificaciones NIT de empresas registradas en la plataforma. Solo muestra el último registro vigente de verificación por empresa dentro de una gestión (año) específica.
Este endpoint permite al equipo administrativo revisar el estado actual de las solicitudes de verificación NIT, identificar procesos pendientes, en revisión, aprobados o rechazados, y priorizar la atención según vencimiento, encargado, categoría, documento y fecha de actualización.
Reglas de negocio:
startedAt corresponde a la fecha de la solicitud original del ciclo.startedAt.approved o rejected, minutesRemaining devuelve 0 de forma fija, isExpired es false y category es 'none'.handler) es el usuario que registró el cambio al estado process.handler es null.| year required | integer Example: year=2026 Gestión (año) a consultar. Campo obligatorio. Filtra verificaciones cuya solicitud original pertenece a este año. |
| page | integer >= 1 Default: 1 Número de la página para la paginación. |
| per_page | integer [ 1 .. 100 ] Default: 10 Cantidad de elementos por página. |
| search | string Example: search=El termino a buscar Término de búsqueda para filtrar los resultados. |
| sortBy | string Default: "expiration" Enum: "legalName" "category" "document" "startedAt" "expiration" "handler" "status" "updatedAt" Example: sortBy=expiration Campo por el cual ordenar el listado. |
| sortDirection | string Default: "asc" Enum: "asc" "desc" Example: sortDirection=asc Dirección del ordenamiento. |
| category | string Example: category=pharmacy Filtro exacto por categoría de la empresa. Solo un valor. |
| document | string Enum: "certificate" "exhibition" "code" Example: document=certificate Filtro exacto por tipo de documento tributario presentado. |
| expiration | string Enum: "high" "medium" "low" "none" Example: expiration=high Filtro por rango de vencimiento del ciclo activo. Solo aplica a estados
|
| status | string Enum: "request" "process" "approved" "rejected" Example: status=process Filtro exacto por estado de la verificación. |
{- "success": true,
- "message": "El listado de verificaciones de empresas se ha obtenido correctamente.",
- "data": [
- {
- "id": 58,
- "companyId": 5,
- "verificationCode": "REQ-2026-NUEVA",
- "legalName": "Rutas del Oriente SRL.",
- "category": "transportation",
- "document": "Certificado de Registro",
- "startedAt": "2026-05-17T21:15:22-04:00",
- "expiration": {
- "deadline": "2026-05-20T21:15:22-04:00",
- "minutesRemaining": 2747,
- "isExpired": false
}, - "handler": null,
- "status": "solicitud",
- "updatedAt": "2026-05-17T21:15:22-04:00"
}, - {
- "id": 55,
- "companyId": 3,
- "verificationCode": "REQ-2026-MEDIA",
- "legalName": "Tecnologia Andina SRL.",
- "category": "technology",
- "document": "Documento de Exhibición",
- "startedAt": "2026-05-16T05:15:22-04:00",
- "expiration": {
- "deadline": "2026-05-19T05:15:22-04:00",
- "minutesRemaining": 347,
- "isExpired": false
}, - "handler": {
- "id": 2,
- "avatar": null,
- "firstName": "Support System",
- "lastName": "Admin"
}, - "status": "proceso",
- "updatedAt": "2026-05-16T05:45:22-04:00"
}
], - "errors": [ ],
- "meta": {
- "year": 2026,
- "pagination": {
- "page": 1,
- "perPage": 10,
- "total": 2,
- "lastPage": 1
}, - "sort": {
- "sortBy": "expiration",
- "sortDirection": "asc"
}, - "filters": {
- "category": null,
- "document": null,
- "expiration": null,
- "status": null
}, - "search": {
- "value": null
}
}, - "traceId": "f1e2d3c4-b5a6-7890-abcd-ef1234567890"
}Actualiza parcialmente los datos tributarios (NIT, razón social, régimen, representantes legales, etc.) asociados a un registro de verificación de empresa. Debe enviarse al menos un campo a modificar.
| verificationId required | integer Example: 101 ID del registro de verificación. |
| nitNumber | string or null <= 30 characters Número de Identificación Tributaria (NIT). |
| nitLegalName | string or null <= 255 characters Razón social asociada al NIT. |
| nitCertificationCode | string <= 255 characters Código de certificación tributaria. |
| nitImage | string <= 255 characters Ruta o identificador de la imagen del documento NIT. |
| nitTaxRegime | string or null Enum: "general" "simplified" "integrated" "unified" Régimen tributario. |
| nitTaxCategory | string or null Enum: "pricos" "gracos" "rest" Categoría tributaria. |
| nitTaxpayerType | string or null Enum: "natural" "legal" "unipersonal" Tipo de contribuyente. |
| nitTaxpayerState | string or null <= 255 characters Estado del contribuyente. |
| nitEntityType | string or null <= 255 characters Tipo de entidad. |
Array of objects or null non-empty Lista de actividades económicas. Si se envía, debe tener al menos un elemento. | |
Array of objects or null non-empty Lista de representantes legales. Si se envía, debe tener al menos un elemento. |
{- "nitNumber": "123456789",
- "nitLegalName": "Empresa de Ejemplo S.A.",
- "nitCertificationCode": "ABC123XYZ",
- "nitImage": "nit_image_45.jpg",
- "nitTaxRegime": "general",
- "nitTaxCategory": "rest",
- "nitTaxpayerType": "legal",
- "nitTaxpayerState": "Activo",
- "nitEntityType": "Sociedad Anónima",
- "nitEconomicActivities": [
- {
- "code": "62010",
- "name": "Desarrollo de software",
- "description": "Actividades de desarrollo de sistemas informáticos",
- "primary": true,
- "state": "Activo"
}
], - "nitLegalRepresentatives": [
- {
- "documentNumber": "1234567",
- "documentType": "CI",
- "fullName": "Juan Perez",
- "email": "juan.perez@ejemplo.com"
}
]
}{- "success": true,
- "message": "Los datos tributarios de la verificación se han actualizado correctamente.",
- "data": null,
- "errors": [ ],
- "meta": [ ],
- "traceId": "a3f2d1c8-4e5b-4f6a-9c7d-1b2e3f4a5b6f"
}Obtiene toda la información detallada de un registro de verificación NIT de una empresa, incluyendo datos de la empresa, propietario, información tributaria, historial de verificaciones, encargado y metadatos del estado del proceso.
Este endpoint permite al equipo administrativo revisar en profundidad toda la información relacionada con una solicitud de verificación, incluyendo el historial completo de cambios de estado, observaciones, y quién registró cada cambio.
| verificationId required | integer Example: 41 Identificador único del registro de verificación. |
{- "success": true,
- "message": "La información de verificación de la empresa se ha obtenido correctamente.",
- "data": {
- "company": {
- "id": 5,
- "logoFile": {
- "name": "logo.png",
- "extension": "png",
- "size": 12345
}, - "nit": "123456789",
- "legalName": "Rutas del Oriente SRL.",
- "category": "transportation",
- "phone": "78945612",
- "email": "contacto@rutasdeloriente.com",
- "department": "La Paz",
- "address": "Calle 1 Nro. 123, Zona Centro"
}, - "owner": {
- "id": 10,
- "firstName": "Juan",
- "lastName": "Perez",
- "email": "juan.perez@ejemplo.com",
- "documentNumber": "1234567",
- "documentType": "CI",
- "documentNationality": "Bolivia",
- "documentComplement": null
}, - "email": {
- "address": "contacto@rutasdeloriente.com",
- "confirmedAt": "2026-05-15T15:30:00Z"
}, - "document": {
- "nitDocumentType": "certificate",
- "documentFile": {
- "name": "nit.pdf",
- "extension": "pdf",
- "size": 567890
}, - "nitCertificationCode": "ABC123XYZ"
}, - "validation": {
- "nitNumber": "123456789",
- "certificationCode": "ABC123XYZ",
- "taxRegime": "general",
- "taxCategory": "pricos",
- "taxpayerType": "legal",
- "taxpayerState": "Activo",
- "entityType": "Sociedad Anónima",
- "economicActivities": [
- {
- "activityCode": "49390",
- "activityName": "Transporte de pasajeros por carretera, n.c.p.",
- "activityModel": "primary",
- "activityState": "Activo"
}
], - "legalRepresentatives": [
- {
- "documentType": "CI",
- "documentNumber": "1234567",
- "fullName": "Juan Perez",
- "email": "juan.perez@ejemplo.com"
}
]
}, - "verifications": [
- {
- "REQ-2026-001": [
- {
- "id": 41,
- "status": "process",
- "observation": "Revisando documentación tributaria.",
- "createdAt": "2026-05-17T21:45:22Z",
- "user": {
- "id": 2,
- "fullName": "Support System Admin",
- "avatar": null,
- "avatarFile": null,
- "role": "support"
}
}, - {
- "id": 40,
- "status": "request",
- "observation": null,
- "createdAt": "2026-05-17T21:15:22Z",
- "user": null
}
]
}
], - "handler": {
- "id": 2,
- "firstName": "Support System",
- "lastName": "Admin",
- "role": "support",
- "avatar": null,
- "avatarFile": null,
- "summary": {
- "approvedCount": 15,
- "rejectedCount": 3
}
}
}, - "errors": [ ],
- "meta": {
- "verificationStatus": {
- "status": "process",
- "observation": "Revisando documentación tributaria.",
- "requestCode": "REQ-2026-001",
- "currentRecordId": 41,
- "canRequestNew": false
}, - "expiration": {
- "deadline": "2026-05-20T21:15:22Z",
- "minutesRemaining": 2747,
- "isExpired": false
}, - "verificationData": {
- "isHandler": true,
- "step1": {
- "code": "request_accepted",
- "passed": true
}, - "step2": {
- "code": "validation_data_complete",
- "passed": true
}, - "step3": {
- "code": "final_resolution",
- "passed": false
}, - "step4": {
- "code": "final_resolution",
- "passed": false
}, - "step5": {
- "code": "final_resolution",
- "passed": false
}
}
}, - "traceId": "f1e2d3c4-b5a6-7890-abcd-ef1234567890"
}Actualiza el estado del proceso de verificación de una empresa. Permite confirmar una solicitud, aprobar una verificación o rechazar una solicitud/verificación según el estado actual del flujo.
| verificationId required | integer Example: 10 ID de la verificación a gestionar. |
Payload para cambiar el estado de verificación.
| status required | string Enum: "confirm" "approve" "reject" Acción a realizar sobre la verificación. Valores: confirm (Confirmar solicitud), approve (Aprobar proceso), reject (Rechazar solicitud o proceso). |
| observation | string or null <= 1500 characters Observaciones o motivos de rechazo/aprobación. Requerido para approve y reject (mín 50 caracteres). Opcional para confirm. |
{- "status": "approve",
- "observation": "Los documentos revisados cumplen con los requisitos legales y tributarios correspondientes a la categoría general. Se aprueba la solicitud."
}{- "success": true,
- "message": "La verificación ha sido confirmada.",
- "data": {
- "company": {
- "id": 10,
- "legalName": "Empresa S.A.",
- "verified": false
}, - "verification": {
- "id": 5,
- "currentStatus": "process",
- "observation": null
}, - "assignee": {
- "id": 1,
- "fullName": "Admin Test"
}
}, - "errors": [ ],
- "meta": { },
- "traceId": "123e4567-e89b-12d3-a456-426614174000"
}Inicia el proceso de verificación del correo electrónico empresarial enviando un código o enlace de verificación al correo registrado de la empresa.
Este enlace apunta a la aplicación Frontend (frontend_url) donde el usuario
podrá completar el proceso.
Este endpoint puede ser ejecutado por:
| companyId required | integer Example: 1 ID de la empresa a la que se le enviará la verificación. |
{- "success": true,
- "message": "La verificación del correo de la empresa se ha enviado correctamente.",
- "data": null,
- "errors": [ ],
- "meta": { },
- "traceId": "a3f2d1c8-4e5b-4f6a-9c7d-1b2e3f4a5b6c"
}Nota de Seguridad: Este endpoint requiere un Token Empresarial (no el Master Token normal). Debe obtenerse previamente mediante el endpoint /api/v1/auth/company-access.
Obtiene el perfil completo de la empresa vinculada al token actual, incluyendo sus datos generales, la información del propietario principal, y el historial agrupado de todas sus solicitudes de verificación.
{- "success": true,
- "message": "El perfil de la empresa se ha obtenido correctamente.",
- "data": {
- "company": {
- "id": 2,
- "nit": "8763011631",
- "legalName": "Mi Salud Express SA.",
- "tradeName": "Farmacia Salud Express",
- "description": "Farmacia especializada en productos naturales y atención de primer nivel.",
- "category": "pharmacy",
- "email": "info@farmaxpress.com",
- "phone": "+59163248810",
- "address": "3er. Anillo Externo, Calle Angel Roca, Comercial Romero, Local 4",
- "department": "Santa Cruz",
- "latitude": -17.769283,
- "longitude": -63.182745,
- "logoFile": {
- "name": "logo_farmaxpress.png",
- "extension": "png",
- "size": 102450
}, - "bannerFile": {
- "name": "banner_farmaxpress.jpg",
- "extension": "jpg",
- "size": 354020
}, - "socialNetworks": [
], - "verified": true,
- "state": "enabled",
- "verifiedAt": "2026-05-10T09:30:00Z",
- "emailVerifiedAt": "2026-05-11T10:15:00Z",
- "createdAt": "2026-05-01T08:00:00Z",
- "updatedAt": "2026-05-22T11:00:00Z"
}, - "user": {
- "id": 2,
- "email": "usuario2@gmail.com",
- "firstName": "Maria Lorena",
- "secondName": "Vargas",
- "fullName": "Maria Lorena Vargas",
- "phone": "+59171234567",
- "avatarFile": {
- "name": "avatar_maria.png",
- "extension": "png",
- "size": 85020
}, - "documentType": "CI",
- "documentNationality": "Bolivia",
- "documentNumber": "12345678",
- "documentComplement": "1G",
- "state": "enabled",
- "emailVerifiedAt": "2026-05-01T08:05:00Z",
- "createdAt": "2026-05-01T08:00:00Z",
- "updatedAt": "2026-05-22T10:45:00Z"
}, - "verification": [
- {
- "b3e5a2c1-8d2b-4e4f-8f1a-6d4b3c2a1e90": [
- {
- "id": 28,
- "status": "request",
- "observation": "Reinicio automático por actualización de Razón Social.",
- "user": {
- "id": 2,
- "fullName": "Maria Lorena Vargas",
- "role": "owner"
}, - "createdAt": "2026-05-22T11:45:00Z"
}
]
}, - {
- "d1f9b3e4-1c2a-4d5b-a678-c123456789ab": [
- {
- "id": 15,
- "status": "approved",
- "observation": "Documentos validados correctamente. Empresa verificada.",
- "user": {
- "id": 1,
- "fullName": "Admin Sistema",
- "role": "admin"
}, - "createdAt": "2026-05-10T09:30:00Z"
}
]
}
]
}, - "errors": [ ],
- "meta": {
- "emailRequiresVerification": false,
- "verification": {
- "status": "request",
- "requestCode": "b3e5a2c1-8d2b-4e4f-8f1a-6d4b3c2a1e90",
- "startedAt": "2026-05-22T11:45:00Z",
- "updatedAt": "2026-05-22T11:45:00Z",
- "currentRecordId": 28
}, - "expiration": {
- "deadline": "2026-05-23T11:45:00Z",
- "remainingMinutes": 1440,
- "expired": false
}
}, - "traceId": "729bb1bf-882d-483b-89d3-5855dc5af3aa"
}Nota de Seguridad: Este endpoint requiere un Token Empresarial activo.
Permite al propietario actualizar parcialmente el perfil de su empresa. Permite modificar datos generales de la empresa, datos básicos del propietario y campos visuales. No se permite actualizar identificadores sensibles como el NIT de la empresa o el correo del propietario.
Reglas Críticas:
request o process), no se permite actualizar.category, legalName de la empresa, o datos documentales del propietario) reiniciará el estado de verificación y generará una nueva solicitud automáticamente.email) reiniciará la verificación del correo electrónico.Datos requeridos para actualizar parcialmente el perfil de la empresa y su propietario.
object Objeto contenedor de los datos de la empresa. | |
object Objeto contenedor de los datos del propietario. |
{- "company": {
- "category": "technology",
- "tradeName": "MasterSCZ Devs",
- "legalName": "MasterSCZ Devs SRL",
- "description": "Desarrollo de software y soluciones tecnológicas avanzadas en Santa Cruz.",
- "email": "contacto@masterscz.com.bo",
- "phone": "+59178945612",
- "department": "Santa Cruz",
- "address": "Av. San Martín Esq. 4to Anillo, Edificio Empresarial Piso 5",
- "latitude": -17.769213,
- "longitude": -63.197211,
- "logo": "logo-masterscz.png",
- "banner": "banner-masterscz.jpg",
- "socialNetworks": [
]
}, - "user": {
- "phone": "+59171234567",
- "firstName": "Carlos Alberto",
- "lastName": "Mamani Rojas",
- "documentType": "ci",
- "documentNationality": "BO",
- "documentNumber": "1234567",
- "documentComplement": "SC",
- "avatar": "avatar-carlos.png"
}
}{- "success": true,
- "message": "El perfil de la empresa se ha actualizado correctamente.",
- "data": null,
- "errors": [ ],
- "meta": {
- "verificationRequestCreated": false,
- "emailVerificationReset": false
}, - "traceId": "5fdb1d84-0c41-49dc-8c38-79f8fb77e7f1"
}Inicia el proceso formal de verificación de una empresa.
Esta operación es exclusiva para el entorno de empresa y solo puede ser ejecutada por el propietario (owner).
Para poder crear la solicitud, la empresa debe cumplir requisitos mínimos (NIT, Razón Social, Categoría, Correo, Teléfono, Dirección), el propietario debe tener datos básicos completos, tener el correo verificado, y haber adjuntado la evidencia del tipo de documento legal seleccionado.
{- "success": true,
- "message": "La solicitud de verificación de la empresa se ha creado correctamente.",
- "data": null,
- "errors": [ ],
- "meta": { },
- "traceId": "86161ad0-79e7-4320-9c80-cad3e459122d"
}Actualiza la documentación legal que respalda la verificación y el NIT de la empresa actual desde su contexto autenticado.
Esta operación es exclusiva para el entorno empresarial y solo puede ser ejecutada por el propietario (OWNER).
La actualización de documentación de respaldo no genera una nueva solicitud de verificación por sí misma, sino que actualiza los datos que se enviarán en la solicitud de verificación.
| legalDocumentType required | string Enum: "exhibition" "certificate" "code" Tipo de documento legal de verificación del NIT. Valores permitidos:
|
| legalDocumentFile | string <binary> Archivo adjunto de evidencia del documento legal.
Es obligatorio si el campo |
| certificationCode | string Código de certificación tributaria.
Es obligatorio si el campo |
{- "success": true,
- "message": "La documentación legal de la empresa se ha actualizado correctamente.",
- "data": {
- "nombre": "9b4c6f3e-1c2a-4ad4-93b9-813f146f3b12.pdf",
- "extension": "pdf",
- "tamaño": 328145
}, - "errors": [ ],
- "meta": {
- "legalDocumentType": "exhibition",
- "requiresNewRequest": true,
- "fileStored": true
}, - "traceId": "9969dc5b-2e28-4d66-aa5f-3974db7754ef"
}Nota de Seguridad: Este endpoint requiere un Token Empresarial (no el Master Token normal). Debe obtenerse previamente mediante el endpoint /api/v1/auth/company-access.
Obtiene la información necesaria para que el propietario revise el estado de verificación de su empresa, los requisitos previos para solicitar una nueva verificación y el historial completo de solicitudes anteriores.
{- "success": true,
- "message": "La información de verificación de la empresa se ha obtenido correctamente.",
- "data": {
- "company": {
- "id": 21,
- "nit": "8763011631",
- "legalName": "Mi Salud Express SA.",
- "category": "pharmacy",
- "phone": "+59163248810",
- "email": "contacto@saludexpress.com",
- "department": "Santa Cruz",
- "address": "3er Anillo Externo, Calle Angel Roca"
}, - "owner": {
- "id": 44,
- "firstName": "Maria",
- "secondName": "Paredes",
- "email": "propietario@saludexpress.com",
- "documentNumber": "8763011",
- "documentType": "CI",
- "documentNationality": "BO",
- "documentComplement": null
}, - "email": {
- "email": "contacto@saludexpress.com",
- "confirmedAt": "2026-04-19T09:10:00Z"
}, - "document": {
- "vnitDocumentType": "code",
- "document": null,
- "documentFile": null,
- "vnitCertificationCode": "CERT-2026-000145"
}, - "verifications": [
- {
- "REQ-20260417-A66FSD23": [
- {
- "id": 196,
- "status": "approved",
- "observation": "Documentos revisados y aprobados.",
- "user": {
- "id": 7,
- "fullName": "Maria Elena Riquelmer Valdez",
- "avatarFile": {
- "name": "avatar.png",
- "extension": "png",
- "size": 15420
}, - "role": "support"
}, - "createdAt": "2026-04-18T15:00:00Z"
}, - {
- "id": 160,
- "status": "process",
- "observation": "En revisión por soporte técnico.",
- "user": {
- "id": 7,
- "fullName": "Maria Elena Riquelmer Valdez",
- "avatarFile": {
- "name": "avatar.png",
- "extension": "png",
- "size": 15420
}, - "role": "support"
}, - "createdAt": "2026-04-18T07:00:00Z"
}, - {
- "id": 145,
- "status": "request",
- "observation": null,
- "user": null,
- "createdAt": "2026-04-17T10:00:00Z"
}
]
}
]
}, - "errors": [ ],
- "meta": {
- "verificationStatus": {
- "status": "approved",
- "observation": "Documentos revisados y aprobados.",
- "requestCode": "REQ-20260417-A66FSD23",
- "currentRecordId": 196,
- "newRequestAvailable": false
}, - "requestVerificationStatus": {
- "completedSteps": 3,
- "totalSteps": 3,
- "step1": {
- "code": "company_owner_data",
- "completed": true
}, - "step2": {
- "code": "company_email_confirmed",
- "completed": true
}, - "step3": {
- "code": "legal_document_backup",
- "completed": true
}
}
}, - "traceId": "12d89c4c-7a4a-47ae-bf7a-2237713d5b13"
}Endpoints de gestión y administración de archivos del sistema. Exclusivos para usuarios con tokens maestros o tokens empresariales.
Sube un archivo de imagen segun el tipo especificado (logo - banner - avatar). El acceso esta abierto a usuarios de sistema y usuarios empresariales. El contenido de la solicitud debe estar en multipart/form-data.
Datos requeridos para subir un archivo de imagen a su respectivo entorno.
| file required | string <binary> Archivo de imagen para subida. |
| type required | string Enum: "logo" "banner" "avatar" Destino del archivo asociado a la imagen. |
{- "success": true,
- "message": "El archivo de imagen se ha almacenado correctamente.",
- "data": {
- "name": "a1b01fe0-1511-4379-b505-572f9cdcfcd5",
- "extension": "jpg",
- "size": 117958,
}, - "errors": [ ],
- "meta": { },
- "traceId": "75b25c0f-31fc-4820-a093-22adbe797fd5"
}Restablece la base de datos a su estado inicial. Este endpoint está estrictamente protegido y solo funciona en entornos locales y de QA.
| reason required | string [ 10 .. 255 ] characters Razón o justificación por la cual se está solicitando el restablecimiento de la base de datos. |
{- "reason": "Restablecimiento por pruebas de integración y QA."
}{- "success": true,
- "message": "Operación exitosa",
- "data": null,
- "errors": [ ],
- "meta": { },
- "traceId": "729bb1bf-882d-483b-89d3-5855dc5af3aa"
}