Antes de empezar
Usa siempre la API productiva publicada en:- Base URL:
https://api.raul.ugps.io - OpenAPI JSON:
https://api.raul.ugps.io/api/openapi.json
Flujo 1: autenticar y validar sesion
Usa este flujo al iniciar una integracion o antes de operar con endpoints protegidos.- Haz login con
POST /api/better-auth/sign-in/email. - Guarda el token del header de respuesta
set-auth-tokencomo Bearer. - Consulta
GET /api/auth/users/mepara validar identidad y permisos. - La sesion se renueva sola mientras haya actividad (deslizante, sin endpoint de refresh).
Flujo 2: crear un cliente y registrar direccion
Este flujo sirve para alta basica de cliente comercial.- Crea el cliente con
POST /api/v1/client. - Si necesitas branding, sube logo con
POST /api/v1/client/{id}/logo. - Agrega direccion con
POST /api/v1/clients/{clientId}/addresses. - Consulta
GET /api/v1/clients/{clientId}/addressespara verificar agrupacion por ciudad.
Recomendaciones
- Usa
GET /api/v1/client/all/paginatedpara backoffice o listados amplios. - Trata varios campos de cliente como
snake_case.
Flujo 3: crear contacto y asociarlo al cliente
Usa este flujo cuando el cliente ya existe y necesitas registrar interlocutores.- Crea el contacto con
POST /api/v1/contact/createoPOST /api/v1/contact/create-for-client. - Si el contacto nace separado, asocialo con
POST /api/v1/contact/associate-to-client. - Consulta roles funcionales con
GET /api/v1/contact/{contactId}/clients/{clientId}/functional-roles. - Actualiza roles con
PUT /api/v1/contact/{contactId}/clients/{clientId}/functional-roles. - Si detectas duplicados, revisa
GET /api/v1/contact/merge-previewantes dePOST /api/v1/contact/merge.
Recomendaciones
- Usa
GET /api/v1/contact/by-client/{clientId}para vistas por cliente. - Usa
GET /api/v1/contact/all/paginatedcuando el volumen sea alto.
Flujo 4: registrar un equipo GPS y asociarlo a suscripcion
Este flujo cubre el alta y consulta operativa de un GPS.- Revisa catalogos necesarios: modelos, marcas, categorias, plataformas y estados.
- Crea el equipo con
POST /api/v1/gps_details/create. - Consulta el detalle por
GET /api/v1/gps_details/{gps_details_id}. - Usa
GET /api/v1/gps_details/related-data/{gps_details_id}para contexto ampliado. - Consulta planes con
GET /api/v1/subscription_plan/all. - Crea la suscripcion con
POST /api/v1/subscription_details/create. - Revisa estado y resumen con
GET /api/v1/subscription_details/get/{subscription_detail_id}yGET /api/v1/subscription_details/summary.
Recomendaciones
- Para lotes grandes, prefiere
GET /api/v1/gps_details/all/cursor. - Usa
POST /api/v1/subscription_details/transfersolo cuando realmente cambie titularidad.
Flujo 5: ejecutar una visita tecnica con evidencia
Este flujo aplica cuando ya existe la visita o se necesita crear y documentar una visita tecnica.- Crea la visita con
POST /api/v1/visit_detail. - Consulta la agenda o resumen con
GET /api/v1/visit_detail/paginatedoGET /api/v1/visit_detail/summary. - Si necesitas evidencia, sube archivos con
POST /api/v1/visit_detail/upload/{visitDetailId}. - Recupera imagenes con
GET /api/v1/visit_detail/images/{visitDetailId}. - Si necesitas respaldo formal, descarga
GET /api/v1/visit_detail/{id}/pdf.
Recomendaciones
- Antes de reintentar un upload, verifica si la imagen ya quedo registrada.
- Para vistas por tecnico, usa
GET /api/v1/visit_detail/by-technicians.
Flujo 6: ciclo de invoice moderna y DTE
Este es uno de los flujos mas sensibles del sistema y varias mutaciones requieren perfil admin explicito.- Lista o crea facturas con
GET|POST /api/v1/billing/invoices; la creación deja un borrador (DRAFT). - Publica con
POST /api/v1/billing/invoices/{id}/publish. Esta operación intenta emitir el DTE automáticamente. - Consulta
GET /api/v1/billing/invoices/{id}y el DTE asociado antes de decidir si hay que reintentar.PUBLISHEDindica que la publicación se guardó, pero la emisión no terminó;DTE_SENTindica envío con TrackID, no aceptación del SII. - Si la emisión no llegó a iniciarse, usa
POST /api/v1/billing/invoices/{id}/emit-dtepara retomar. Si el DTE está enSII_UPLOAD_UNCERTAIN, concilia el folio con el SII antes de cualquier nueva emisión. - Para actualizar el veredicto de un DTE con TrackID, usa
POST /api/v1/dte/documents/{dteId}/sync. - Previsualiza y envía correo con
POST /api/v1/billing/invoices/{id}/email-previewyPOST /api/v1/billing/invoices/{id}/send-emailcuando corresponda. - Registra pago con
POST /api/v1/billing/invoices/{id}/register-payment.
Recomendaciones
- Verifica el estado comercial y el tributario antes de repetir mutaciones; una respuesta de publicación no prueba aceptación del SII.
- Usa
POST /api/v1/billing/invoices/batch/generate-monthlysolo para procesos batch. - Estas rutas requieren sesión de backoffice, rol
adminy acceso al módulo Finanzas. - Consulta la guía de facturas y DTE para payloads, estados y recuperación.
Flujo 7: acceso y autoservicio del portal cliente
- Solicita magic link con
POST /api/portal/auth/request. - Intercambia el token con
POST /api/portal/auth/exchange. - Lista documentos con
GET /api/portal/invoices. - Descarga detalle o respaldos con
GET /api/portal/invoices/{id},/pdf,/xmlo/detail-xlsx. - Si el cliente pagara o notificara transferencia, usa
POST /api/portal/invoices/pay,POST /api/portal/invoices/{id}/payoPOST /api/portal/invoices/{id}/notify-transfer. - Si el flujo es de soporte, usa
GET /api/portal/support/ticketsyPOST /api/portal/support/tickets/{ticketId}/comments.
Recomendaciones
- En portal, el acceso depende de roles funcionales del contacto.
invoicesysupportno comparten exactamente la misma matriz de acceso.
Flujo 8: inbox omnichannel con shared mailbox
- Consulta inbox y threads con
GET /api/omnichannel/inboxyGET /api/omnichannel/threads/{threadId}. - Si trabajas con bandejas compartidas, lista
GET /api/shared-mailboxesy las del usuario conGET /api/shared-mailboxes/my-mailboxes. - Si eres admin, registra o sincroniza mailboxes con
POST /api/shared-mailboxes,POST /api/shared-mailboxes/bootstrapyPOST /api/shared-mailboxes/{id}/sync. - Responde por email/WhatsApp con
POST /api/omnichannel/threads/{threadId}/reply,POST /api/omnichannel/send-sharedoPOST /api/omnichannel/send-whatsapp. - Ordena la operacion con assignment, tags y estado de lectura.
Recomendaciones
- Evita retries ciegos sobre envio real de mensajes.
- Reconsulta thread y ownership antes de reenviar o reasignar.
Manejo de rutas legacy
Si encuentras dos endpoints con el mismo objetivo:- Prefiere rutas sin verbos como
get,create,updateodelete. - Prefiere recursos por ID con
/{id}frente a/get/{id}. - Deja la ruta legacy solo para compatibilidad con consumidores existentes.