Autenticación
La credencial de su máquina es el par client_id y client_secret. Intercambie los dos por un token OAuth2 (client_credentials) y envíe el token en Authorization: Bearer en toda llamada a /v2/. El token vale 900 segundos.
La API solo acepta llamadas desde las IP de su servidor registradas en su credencial. Usted genera el client_secret e informa las IP de salida en el panel, en El secreto y las IP en el panel.
Token #
POST /oauth/token
El client_id y el client_secret van en HTTP Basic. Es lo que hace curl -u:
curl -u "loja01:SEU_CLIENT_SECRET" -d "grant_type=client_credentials" -d "scope=cob.write cob.read pix.read ex.saldo.read ex.config.read" https://api.amunpay.com/oauth/token
POST /oauth/token
Authorization: Basic base64(client_id:client_secret)
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&scope=cob.write cob.read pix.read ex.saldo.read ex.config.read
→ 200
{
"access_token": "eyJhbGciOiJFUzI1NiIsImtpZCI6IjAxSjEifQ...",
"token_type": "Bearer",
"expires_in": 900,
"scope": "cob.write cob.read pix.read ex.saldo.read ex.config.read"
}
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
grant_type |
string | sí | Siempre client_credentials. |
scope |
string | no | Alcances separados por espacio, como máximo 10, dentro de los concedidos. Si se omite, el token trae todos los alcances concedidos. |
Como alternativa al Basic, client_id y client_secret pueden ir en el cuerpo del formulario. Enviar los dos de ambas formas con valores diferentes responde 400 invalid_request.
El token solo se emite y solo vale para llamadas que vienen de las IP registradas: desde otra IP, la solicitud del token y cada llamada responden 403 origem_nao_permitida. Sin ninguna IP registrada, ninguna llamada pasa.
El secreto y las IP en el panel #
El gestor de su empresa genera el client_secret en el panel, en Integração, en la pestaña Credenciais, con el código del segundo factor. El secreto aparece una sola vez, junto al client_id, cada uno con el botón de copiar, y nunca se vuelve a mostrar. Si lo pierde, genere otro: el anterior deja de valer en el acto. Los tokens ya emitidos valen hasta expirar, salvo cuando usted marca sospecha de filtración, que también los invalida.
| Cuándo | Qué sucede |
|---|---|
| Primera credencial | Usted informa al menos una IP de salida, y las IP valen en el acto. |
| Generar de nuevo | Un secreto nuevo. Los alcances y las IP se mantienen. |
| Quitar una IP | Vale en el acto. |
| Incluir una IP | Vale en el momento, con un correo electrónico a los contactos técnico y financiero de su empresa. Si AmunPay activa la espera de IP para su cuenta, vale 24 horas después: la pantalla muestra la hora en que pasa a valer, y usted puede desistir antes. |
El panel acepta IP pública, con prefijo de hasta /24 (IPv4) o /48 (IPv6), hasta 20 IP. Todo acto sobre la credencial va por correo electrónico a los contactos de su empresa, sin el secreto. Sin contacto técnico ni financiero registrado, el panel no genera ni incluye IP.
Solo el gestor genera y cambia las IP. Los demás usuarios ven el client_id y las IP. Si AmunPay activa la espera del segundo factor para su cuenta, el gestor que acaba de activar el segundo factor, que fue promovido, reactivado o al que otra persona le restableció la contraseña espera 24 horas para generar. La credencial de una subcuenta con credencial propia la genera la empresa titular.
Si la pantalla dice que la funcionalidad no está habilitada para su cuenta, hable con AmunPay. AmunPay también genera el secreto y registra las IP por usted, y por AmunPay la IP nueva vale en el acto.
Primera llamada #
GET /v2/ex/config
GET /v2/ex/config
→ 200
{
"conta": { "status": "ATIVA", "desde": "2026-09-18T09:20:23Z" },
"capacidades": {
"pix": true,
"subcontas": true,
"split": true,
"baas": false
},
"recebedor": { "chave": "01J8Z3QK5W7R2N4M6P8T0V2X4Y" },
"custodia": { "tipo": "PROPRIA", "custodiante": "Conta PI", "recusaAntesDoCredito": true },
"depositoPorChave": { "modo": "RECUSAR" }
}
| Campo | Tipo | Descripción |
|---|---|---|
conta.status |
string | ATIVA es el único estado que opera. |
capacidades |
objeto | Lo que esta cuenta puede usar. Léalo antes de suponer. |
recebedor.chave |
string | Identificador de su cuenta, que va en la chave de los cobros. No lo divulgue como clave Pix: reciba siempre por cobro, mediante el pixCopiaECola. Un Pix sin txid no se convierte en saldo, salvo cuando depositoPorChave.modo es ACEITAR. |
custodia.tipo |
string | PROPRIA: la cuenta es de esta institución. PARCEIRA: cuenta nominal en otra institución de pago. |
custodia.recusaAntesDoCredito |
booleano | true: un Pix rechazado no entra en la cuenta. false: entra y vuelve al pagador por devolución. |
depositoPorChave.modo |
string | RECUSAR: un Pix sin cobro se rechaza o se devuelve. ACEITAR: se convierte en un cobro y acredita. |
Alcances #
| Alcance | Qué habilita |
|---|---|
cob.read, cob.write |
Cobros. |
pix.read, pix.write |
Pix recibidos y devoluciones. |
ex.pix.send, ex.pix.send.read |
Retiros. |
ex.saldo.read, ex.extrato.read |
Saldo, extracto, transacciones y resumen. |
ex.webhook.read, ex.webhook.write, ex.eventos.read |
Webhooks y el feed de eventos. |
ex.subcontas.read, ex.subcontas.write |
Subcuentas. |
ex.limites.read, ex.limites.write, ex.bloqueios.read |
Límites y bloqueos de saldo. |
ex.med.read |
Disputas. |
ex.inquilinos.read, ex.inquilinos.write |
Credenciales propias de subcuenta. |
ex.config.read |
GET /v2/ex/config. |
Errores del token #
El POST /oauth/token responde en el formato { "error", "error_description" }.
| Estado | error |
Cuándo |
|---|---|---|
| 401 | invalid_client |
Secreto incorrecto, client_id desconocido o credencial suspendida (la respuesta no dice cuál), o ninguna credencial enviada. |
| 400 | invalid_request |
grant_type ausente, Basic que no se decodifica, o Basic y cuerpo divergentes. |
| 400 | unsupported_grant_type |
grant_type diferente de client_credentials. |
| 400 | invalid_scope |
Alcance fuera de los concedidos, o más de 10. |
| 403 | origem_nao_permitida |
La IP de origen no está entre las IP que valen en la credencial. Una IP incluida por el panel con la espera de IP activada solo vale 24 horas después. |
| 429 | invalid_client |
Cinco secretos incorrectos seguidos desde la misma IP. Espere el Retry-After; el intento durante la espera no se verifica. |
| 429 | limite_requisicoes |
Más de 2 solicitudes por segundo desde la misma IP (ráfaga de 20). Espere el Retry-After. |
| 413 | corpo_grande_demais |
El cuerpo supera 4 KiB. |
Errores en las llamadas #
| Estado | title |
Cuándo |
|---|---|---|
| 401 | acesso_negado |
Llamada sin Authorization: Bearer. |
| 401 | token_invalido |
Token inválido o expirado. Renuévelo. |
| 401 | token_revogado |
El token fue revocado antes de expirar (rotación del secreto, cambio de alcances o suspensión). Solicite otro token una vez, con el secreto actual; si la solicitud es rechazada, hable con soporte. |
| 403 | origem_nao_permitida |
La IP de origen no está entre las IP que valen en la credencial. Renovar no lo resuelve. Una IP incluida por el panel con la espera de IP activada solo vale 24 horas después. |
| 403 | escopo_insuficiente |
El token no tiene el alcance de la ruta. Solicite un token con él, o sin scope. Si no está entre los concedidos, hable con soporte. |
| 403 | merchant_nao_provisionado |
El client_id aún no tiene cuenta. |
| 403 | conta_bloqueada |
La cuenta no está ATIVA. |