RevUp

Manual técnico de APIs RevUp

Acceso gobernado, exportación y operación por tenant

API v1.0Edición gobernada
Base del tenant
https://revup.cl/{slug}/api/public/v1

Use siempre una API key con privilegio mínimo.

Qué es la API pública de RevUp

La API pública permite consultar y exportar información comercial gobernada sin acceder a las pantallas internas. Cada respuesta está limitada al tenant, al usuario de servicio y a los permisos asignados.

La versión documentada es v1 y mantiene envelopes, códigos de error y cursores estables.

Acceso genérico de cada tenant

La base productiva es https://revup.cl/{slug}/api/public/v1 y la documentación interactiva es https://revup.cl/{slug}/api-docs/. Reemplace {slug} por la ruta pública entregada a la empresa.

El slug forma parte de la ruta y nunca debe enviarse como query string, header o dato libre.

Usuarios de servicio, roles y permisos

Un administrador crea un usuario de servicio activo, habilita public_api y emite una API key vinculada a ese usuario. Luego concede solo los scopes necesarios.

El scope habilita una capacidad, pero no amplía el RBAC: la integración ve únicamente los clientes, equipos y oportunidades visibles para su usuario de servicio.

Ciclo de vida de la API key

La clave completa se muestra una sola vez. Debe guardarse en un vault y enviarse como Authorization: Bearer <apiKey>.

Use una clave por integración, rótela periódicamente, revoque las claves sin uso y nunca la incluya en código, documentación, tickets o repositorios.

Swagger y Postman

Swagger permite explorar el contrato y ejecutar llamadas autorizadas sin persistir el token tras la sesión. La colección Postman contiene ejemplos, tests, cursores y todos los formatos de exportación.

Los manuales, OpenAPI y Postman se sirven desde el mismo tenant y no dependen de CDN.

Paginación y filtros

Las listas aceptan limit y cursor. El cursor es opaco: no lo modifique ni lo reutilice con otro recurso o tenant.

Los filtros de fechas usan ISO 8601. Los filtros desconocidos o combinaciones inválidas reciben un error sanitizado.

Exportaciones gobernadas

Cree un job con recurso, formato y filtros; consulte su estado; descargue al finalizar y elimínelo cuando deje de ser necesario. Los formatos soportados son CSV, JSONL y XLSX.

Cada archivo admite hasta 100.000 filas, se almacena fuera del document root y expira a las 24 horas.

Errores, límites y soporte

401 indica credencial inválida; 403 entitlement, usuario o scope insuficiente; 409 recurso todavía no listo; 422 dato inválido; 429 límite excedido.

Conserve X-Correlation-ID al solicitar soporte. Los mensajes están sanitizados y nunca deben revelar SQL, rutas privadas o secretos.

Arquitectura y aislamiento

El slug resuelve una instalación de tenant; el bootstrap autentica la clave por hash, valida estado, entitlement, scope y usuario de servicio, y recién entonces abre el acceso al repositorio del tenant.

No existe selección de base mediante input del cliente. Los archivos exportados viven en un root privado.

Contratos, schemas y envelopes

OpenAPI 3.1 es generado desde el mismo registro que el runtime. Las respuestas JSON usan un envelope estable con ok, data y meta; los errores usan ok=false y un objeto error sanitizado.

Autenticación, scopes y RBAC

La clave Bearer identifica tenant, ambiente, prefijo y secreto. Solo se persiste el hash. La autorización combina entitlement, scope y visibilidad del usuario de servicio.

La revocación, expiración o inactividad se evalúan en cada request.

Cursores, concurrencia e idempotencia

Los cursores están firmados y ligados a tenant y recurso. Los jobs se reclaman con locks de base de datos, admiten reintentos acotados y no publican un archivo parcial.

CSV, JSONL y XLSX

CSV usa encabezado estable y escaping RFC 4180; JSONL emite un objeto por línea; XLSX limita fórmulas y neutraliza valores peligrosos. Todas las salidas respetan el mismo conjunto de campos.

Ejemplos de integración

Ejemplos equivalentes: curl, JavaScript fetch, Python requests, PHP cURL y PowerShell Invoke-RestMethod. Todos usan variables de entorno y omiten secretos reales.

Workers y limpieza

El worker procesa jobs en lotes, actualiza progreso, publica con rename atómico y registra errores sanitizados. Un timer evita solapamientos; las garantías definitivas residen en locks de filas.

Despliegue por tenant

El mismo bundle inmutable instala runtime, OpenAPI, Swagger, Postman, manuales y migraciones. QA debe aprobar antes de producción. Se preservan .revup-instance.php, private/, vaults y secretos del tenant.

Observabilidad y auditoría

Registre operationId, status, duración, correlation ID y una identidad no reversible de la clave. Nunca registre Authorization, filas exportadas ni secretos. Métricas mínimas: tasa, latencia, errores, jobs y bytes.

Diagnóstico técnico

Valide slug, reloj, estado de la clave, scopes, entitlement y RBAC. Ante 429 respete Retry-After. Ante exportaciones fallidas use correlation ID y error sanitizado; no inspeccione ni exponga datos del archivo.

Diccionario de operaciones

operationIdMétodo y rutaScopeDescripción
createExportPOST /exportsexports:writeDevuelve un trabajo de exportación dentro del tenant autorizado.
deleteExportDELETE /exports/{id}exports:deleteDevuelve la eliminación de una exportación dentro del tenant autorizado.
downloadExportGET /exports/{id}/downloadexports:readDevuelve el archivo exportado dentro del tenant autorizado.
getActivityGET /activities/{id}activities:readDevuelve una actividad dentro del tenant autorizado.
getCatalogGET /catalogs/{type}products:readDevuelve un catálogo dentro del tenant autorizado.
getClientGET /clients/{id}clients:readDevuelve un cliente dentro del tenant autorizado.
getClientTimelineGET /clients/{id}/timelineclients:readDevuelve la línea de tiempo del cliente dentro del tenant autorizado.
getContactGET /contacts/{id}contacts:readDevuelve un contacto dentro del tenant autorizado.
getCustomerSuccessGET /customer-success/{clientId}customer_success:readDevuelve el resumen de customer success del cliente dentro del tenant autorizado.
getExportGET /exports/{id}exports:readDevuelve el estado de una exportación dentro del tenant autorizado.
getHealthGET /healthhealth:readDevuelve estado de la API dentro del tenant autorizado.
getOpportunityGET /opportunities/{id}opportunities:readDevuelve una oportunidad dentro del tenant autorizado.
getProductGET /products/{id}products:readDevuelve un producto dentro del tenant autorizado.
listActivitiesGET /activitiesactivities:readDevuelve actividades dentro del tenant autorizado.
listAiUsageGET /ai/usageai_usage:readDevuelve consumo agregado de IA dentro del tenant autorizado.
listAuditEventsGET /audit-eventsaudit:readDevuelve eventos de auditoría sanitizados dentro del tenant autorizado.
listChangesGET /changeschanges:readDevuelve cambios incrementales dentro del tenant autorizado.
listClientsGET /clientsclients:readDevuelve clientes dentro del tenant autorizado.
listCommitmentsGET /commitmentscommitments:readDevuelve compromisos dentro del tenant autorizado.
listContactsGET /contactscontacts:readDevuelve contactos dentro del tenant autorizado.
listCustomerSuccessGET /customer-successcustomer_success:readDevuelve resúmenes de customer success dentro del tenant autorizado.
listFeedbackGET /feedbackfeedback:readDevuelve feedback dentro del tenant autorizado.
listForecastGET /forecastforecast:readDevuelve pronóstico comercial dentro del tenant autorizado.
listGoalsGET /goalsgoals:readDevuelve metas dentro del tenant autorizado.
listKpisGET /kpiskpis:readDevuelve indicadores KPI dentro del tenant autorizado.
listMarketIntelligenceGET /market-intelligencemarket_intelligence:readDevuelve hallazgos de inteligencia de mercado dentro del tenant autorizado.
listOpportunitiesGET /opportunitiesopportunities:readDevuelve oportunidades dentro del tenant autorizado.
listPipelineSnapshotsGET /pipeline/snapshotspipeline:readDevuelve instantáneas del pipeline dentro del tenant autorizado.
listProductsGET /productsproducts:readDevuelve productos dentro del tenant autorizado.
listUsersGET /usersusers:readDevuelve usuarios autorizados dentro del tenant autorizado.

Diccionario de recursos

clientes · clients:read

Datos públicos gobernados de clientes.

CamposFiltrosExportación
id, company_code, legal_name, trade_name, tax_identifier, country_code, region, municipality, industry_code, billing_method, payment_method, status, owner_user_id, created_at, updated_atlimit, cursor, created_from, created_to, updated_from, updated_to, statusCSV, JSONL, XLSX

contactos · contacts:read

Datos públicos gobernados de contactos.

CamposFiltrosExportación
id, client_id, first_name, last_name, job_title, email, phone, is_primary, status, created_at, updated_atlimit, cursor, created_from, created_to, updated_from, updated_to, status, client_idCSV, JSONL, XLSX

productos y catálogos · products:read

Datos públicos gobernados de productos y catálogos.

CamposFiltrosExportación
id, code, name, description, product_type, billing_period, currency, unit_price, status, valid_from, valid_to, created_at, updated_atlimit, cursor, created_from, created_to, updated_from, updated_to, status, currency, billing_period, product_typeCSV, JSONL, XLSX

oportunidades · opportunities:read

Datos públicos gobernados de oportunidades.

CamposFiltrosExportación
id, client_id, name, stage, status, currency, amount, probability_percent, expected_close_date, owner_user_id, created_at, updated_atlimit, cursor, created_from, created_to, updated_from, updated_to, status, client_id, owner_user_id, currencyCSV, JSONL, XLSX

actividades · activities:read

Datos públicos gobernados de actividades.

CamposFiltrosExportación
id, client_id, opportunity_id, activity_type, subject, description, occurred_at, due_at, status, owner_user_id, created_at, updated_atlimit, cursor, created_from, created_to, updated_from, updated_to, status, client_id, owner_user_id, activity_typeCSV, JSONL, XLSX

compromisos · commitments:read

Datos públicos gobernados de compromisos.

CamposFiltrosExportación
id, client_id, opportunity_id, title, description, due_at, completed_at, status, owner_user_id, created_at, updated_atlimit, cursor, created_from, created_to, updated_from, updated_to, status, client_id, owner_user_idCSV, JSONL, XLSX

instantáneas del pipeline · pipeline:read

Datos públicos gobernados de instantáneas del pipeline.

CamposFiltrosExportación
id, snapshot_at, stage, currency, opportunity_count, weighted_amount, unweighted_amount, owner_user_id, created_at, updated_atlimit, cursor, created_from, created_to, updated_from, updated_to, status, owner_user_id, currency, periodCSV, JSONL, XLSX

pronóstico · forecast:read

Datos públicos gobernados de pronóstico.

CamposFiltrosExportación
id, period, currency, category, forecast_amount, committed_amount, best_case_amount, owner_user_id, created_at, updated_atlimit, cursor, created_from, created_to, updated_from, updated_to, status, owner_user_id, currency, periodCSV, JSONL, XLSX

indicadores KPI · kpis:read

Datos públicos gobernados de indicadores KPI.

CamposFiltrosExportación
id, code, name, period, value, unit, target_value, owner_user_id, status, created_at, updated_atlimit, cursor, created_from, created_to, updated_from, updated_to, status, owner_user_id, periodCSV, JSONL, XLSX

metas · goals:read

Datos públicos gobernados de metas.

CamposFiltrosExportación
id, name, description, period, target_value, actual_value, unit, owner_user_id, status, created_at, updated_atlimit, cursor, created_from, created_to, updated_from, updated_to, status, owner_user_id, periodCSV, JSONL, XLSX

usuarios · users:read

Datos públicos gobernados de usuarios.

CamposFiltrosExportación
id, display_name, email, role_code, team_code, is_active, created_at, updated_atlimit, cursor, created_from, created_to, updated_from, updated_to, status, role_code, team_codeCSV, JSONL, XLSX

customer success · customer_success:read

Datos públicos gobernados de customer success.

CamposFiltrosExportación
id, client_id, health_status, health_score, risk_level, last_contact_at, next_action_at, owner_user_id, status, created_at, updated_atlimit, cursor, created_from, created_to, updated_from, updated_to, status, client_id, owner_user_id, health_status, risk_levelCSV, JSONL, XLSX

feedback · feedback:read

Datos públicos gobernados de feedback.

CamposFiltrosExportación
id, client_id, feedback_code, category, title, description, status, submitted_by_user_id, assigned_to_user_id, resolved_at, created_at, updated_atlimit, cursor, created_from, created_to, updated_from, updated_to, status, client_id, categoryCSV, JSONL, XLSX

eventos de auditoría · audit:read

Datos públicos gobernados de eventos de auditoría.

CamposFiltrosExportación
id, action, actor_user_id, resource_type, resource_id, correlation_id, result, occurred_at, created_at, updated_atlimit, cursor, created_from, created_to, updated_from, updated_to, status, actor_user_id, resource_type, resource_id, correlation_idCSV, JSONL, XLSX

consumo de IA · ai_usage:read

Datos públicos gobernados de consumo de IA.

CamposFiltrosExportación
id, period, provider, model, operation_count, model_usage_units, error_count, currency, provider_cost, billable_amount, is_billable, created_at, updated_atlimit, cursor, created_from, created_to, updated_from, updated_to, status, period, provider, currencyCSV, JSONL, XLSX

inteligencia de mercado · market_intelligence:read

Datos públicos gobernados de inteligencia de mercado.

CamposFiltrosExportación
id, source, finding_type, title, summary, published_at, relevance_score, status, created_at, updated_atlimit, cursor, created_from, created_to, updated_from, updated_to, status, source, finding_typeCSV, JSONL, XLSX

cambios · changes:read

Datos públicos gobernados de cambios.

CamposFiltrosExportación
id, resource_type, resource_id, change_type, changed_at, correlation_id, created_at, updated_atlimit, cursor, created_from, created_to, updated_from, updated_to, status, resource_type, change_typeNo aplica

Documentos relacionados