Todas las llamadas a la API van con tu token en el header Authorization:
curl -X GET \
'/api/v1/offices/get' \
-H 'Authorization: Bearer TU_TOKEN' \
-H 'Content-type: application/json'
La URL base de la API es https://sag-qa.efipay.co/api/v1. Todos los endpoints de
esta documentación cuelgan de ahí.
| Ambiente | Host | Cuándo lo usas |
|---|---|---|
| Producción | https://sag.efipay.co/api/v1 |
Siempre que integres de verdad, con token de prueba o de producción |
| QA | https://sag-qa.efipay.co/api/v1 |
Solo si te pedimos probar contra QA en un acompañamiento |
{warning} Usa
sag.efipay.co.sag-qa.efipay.coes nuestro ambiente interno de pruebas: puede reiniciarse o quedarse abajo sin aviso. Para construir y probar tu integración, apunta asag.efipay.cocon un token de prueba: ahí no se mueve dinero y el servicio tiene la disponibilidad de producción.
{info} Esta documentación se publica en los dos ambientes y muestra el host del ambiente en el que la estás leyendo. Si copiaste una URL desde la doc de QA, te llevaste el host de QA sin darte cuenta. Ahora mismo estás leyendo la de
https://sag-qa.efipay.co.
Genera y revoca tus tokens en el panel, en Documentación → API key. El token se muestra una sola vez: guárdalo en tu gestor de secretos, no en el código.
{danger} Un token da acceso a cobrar en nombre de tu comercio. Nunca lo pongas en código de frontend, en un repositorio, ni en una aplicación móvil. Todas las llamadas se hacen desde tu servidor.
Hay dos tipos de token y el tipo decide en qué ambiente ocurre todo:
| Token de prueba | Token de producción | |
|---|---|---|
| Para qué | Construir y probar tu integración | Cobrar de verdad |
| Movimiento de dinero | Ninguno | Real |
| Resultado de un pago | Lo decides tú con las tarjetas de prueba | Lo decide la red |
| Se ve en tu reporte | Sí, marcado como prueba | Sí |
| Se abona a tu cuenta virtual | No | Sí |
No cambies de URL para probar. Dentro de un mismo host es la misma API; lo que decide si el dinero se mueve es el token. Un cobro creado con token de prueba solo se puede consultar y pagar con token de prueba, y viceversa: los dos ambientes de datos no se ven entre sí.
{info} Al listar transacciones, el ambiente lo decide el token (
api-access:testoapi-access:production), no un query param. Si envíasproduction, se ignora. Es la causa número uno de «no aparece mi transacción»: estás consultando con el token del otro ambiente.
{warning} Las reservas de cupo en modalidad
apisolo funcionan con token de producción: retienen fondos reales y no hay forma de simular una retención que después puedas cobrar o liberar.
403 en todo.office)Muchos endpoints piden un campo office con el id de una de tus sucursales: generar un
pago, crear un plan, un suscriptor, un cupón. Obtén el tuyo con
GET /api/v1/offices/get y guárdalo en tu
configuración; no cambia.
Si tu comercio tiene una sola sucursal, siempre será ese id.
Es distinto del token de la API y tiene un solo propósito: verificar que un webhook que recibes viene de nosotros y no de un tercero. Lo encuentras en el mismo lugar del panel.
| Alcance | Uno por comercio. No hay uno por sede: todas las sedes firman con el mismo token |
| Ambientes | El mismo para prueba y producción. No se puede tener uno distinto por ambiente |
| Rotación | Hoy no se puede rotar desde el panel |
Nunca lo envíes en una petición; solo se usa para calcular la firma de los webhooks que recibes. Ver Webhooks.
{danger} Como el token es único y no rotable, trátalo como un secreto de larga vida: guárdalo en tu gestor de secretos, no lo dejes en el repositorio y no lo registres en logs. Si crees que se filtró, escríbenos: la rotación hay que coordinarla.
| Código | Significa | Qué revisar |
|---|---|---|
401 |
No llegó el token, o no es válido | El header Authorization: Bearer .... Que no lo hayas revocado |
403 |
El token es válido pero no puede operar | Que tu comercio esté activo y habilitado, y que el usuario del token esté activo |
404 en un recurso que sí creaste |
Estás mirando el otro ambiente | Que el token sea del mismo tipo con el que creaste el recurso |
{success} Respuesta de una llamada autenticada correctamente code:
200
{danger} Token ausente o inválido code:
401 { "message": "Unauthenticated." }
{danger} Comercio o usuario que no puede operar code:
403 { "message": "Unauthorized" }