Transacciones por Clave PIX
Descripción General
Los endpoints de transacciones por clave PIX le permiten consultar el historial de transacciones asociadas a una clave PIX específica (CPF, CNPJ, teléfono, email o clave aleatoria EVP). Son ideales para escenarios como:
- Conciliación por clave: verificar todos los recibos de un CNPJ o CPF específico
- Auditoría: auditar movimientos de una clave PIX dentro de un período
- Monitoreo de recibos: rastrear pagos recibidos a través de una clave específica
En comparación con el endpoint general /api/transactions, la diferencia principal es el filtro obligatorio por clave PIX y el size máximo mayor: hasta 1000 registros por página (vs. 100 en el endpoint general). La consulta retorna como máximo 1000 resultados en total -- si la clave tiene más transacciones en el período, use filtros de type, status o períodos más cortos para acotar.
Autenticación
Este endpoint requiere un Bearer token válido en el encabezado Authorization:
Authorization: Bearer <your_token>El token debe obtenerse a través del endpoint Generar Token.
Tipos de Clave PIX Soportados
| Tipo | Formato | Ejemplo |
|---|---|---|
| CPF | Solo números (11 dígitos) | 12345678900 |
| CNPJ | Solo números (14 dígitos) | 12345678000190 |
| Teléfono | Formato E.164 con + codificado como %2B | %2B5511999999999 |
| Dirección de email válida | joao@example.com | |
| Clave aleatoria (EVP) | UUID v4 | 550e8400-e29b-41d4-a716-446655440000 |
Cuando use claves con caracteres especiales en la URL (como + en números de teléfono), siempre aplique codificación URL. En los ejemplos de código, encodeURIComponent (JavaScript) y quote(..., safe="") (Python) manejan esto automáticamente.
Endpoint 1: Listar Transacciones por Clave PIX
GET /api/pix/transactions/pix-key/{pixKey}Parámetros
| Parámetro | Tipo | Requerido | Predeterminado | Descripción |
|---|---|---|---|---|
pixKey | string | Sí (path) | -- | Clave PIX (codificada en URL) |
page | integer | -- | 1 | Número de página |
size | integer | -- | 20 | Registros por página (máx. 1000) |
status | string | -- | -- | PENDING, CONFIRMED o ERROR |
type | string | -- | -- | PAYMENT, WITHDRAW, REFUND_IN o REFUND_OUT |
startDate | date | -- | Últimos 30 días | Fecha de inicio (ISO 8601) |
endDate | date | -- | Hoy | Fecha de fin (ISO 8601) |
El intervalo entre startDate y endDate no puede exceder 31 días. La consulta retorna como máximo 1000 resultados -- si hay más transacciones en el período, use filtros adicionales (type, status o períodos más cortos) para acotar.
Clave Sin Resultados
Si la pixKey proporcionada no tiene transacciones en el período consultado, la API retorna HTTP 200 con data vacío:
{
"data": [],
"metadata": { "page": 1, "size": 20, "total": 0, "totalPages": 0, "hasNext": false, "hasPrevious": false }
}Ejemplos
curl -X GET "https://api.avista.global/api/pix/transactions/pix-key/joao%40example.com?status=CONFIRMED&page=1&size=50" \
-H "Authorization: Bearer your_token_here"const pixKey = 'joao@example.com';
const params = new URLSearchParams({
status: 'CONFIRMED',
page: '1',
size: '50'
});
const response = await fetch(
`https://api.avista.global/api/pix/transactions/pix-key/${encodeURIComponent(pixKey)}?${params}`,
{
headers: {
'Authorization': 'Bearer your_token_here'
}
}
);
const data = await response.json();
console.log(data);import requests
from urllib.parse import quote
pix_key = 'joao@example.com'
response = requests.get(
f'https://api.avista.global/api/pix/transactions/pix-key/{quote(pix_key, safe="")}',
params={
'status': 'CONFIRMED',
'page': 1,
'size': 50
},
headers={
'Authorization': 'Bearer your_token_here'
}
)
data = response.json()
print(data)Ejemplo de Respuesta
{
"data": [
{
"transactionId": "12345",
"externalId": "order-abc123",
"status": "Confirmado",
"operationType": "Pix in",
"movementType": "CREDIT",
"originalAmount": 100.00,
"feeAmount": 1.00,
"finalAmount": 99.00,
"endToEndId": "E00416968202501151030VX5Sx8fIpkY",
"createdAt": "2025-01-15T10:30:00.000Z",
"processedAt": "2025-01-15T10:30:05.000Z",
"counterpart": {
"name": "João Silva",
"document": "***.456.789-**",
"bank": {
"bankISPB": "00000000",
"bankName": "Banco do Brasil",
"bankCode": "001",
"accountBranch": "0001",
"accountNumber": "123456-7"
}
}
}
],
"metadata": {
"page": 1,
"size": 50,
"total": 320,
"totalPages": 7,
"hasNext": true,
"hasPrevious": false
}
}Paginación
| Campo | Descripción |
|---|---|
page | Página actual |
size | Número de registros por página |
total | Total de registros encontrados (máx. 1000) |
totalPages | Total de páginas disponibles |
hasNext | Indica si hay una página siguiente |
hasPrevious | Indica si hay una página anterior |
Para obtener todos los resultados de una vez, use size=1000. Para procesar en lotes, navegue por las páginas mientras hasNext sea true:
async function getAllTransactions(pixKey, filters = {}) {
const results = [];
let page = 1;
do {
const params = new URLSearchParams({ ...filters, page, size: 100 });
const response = await fetch(
`https://api.avista.global/api/pix/transactions/pix-key/${encodeURIComponent(pixKey)}?${params}`,
{ headers: { 'Authorization': 'Bearer your_token_here' } }
);
const { data, metadata } = await response.json();
results.push(...data);
if (!metadata.hasNext) break;
page++;
} while (true);
return results;
}Endpoint 2: Consultar Transacción por Clave PIX e Identificador
GET /api/pix/transactions/pix-key/{pixKey}/{identifier}Parámetros
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
pixKey | string | Sí | Clave PIX (codificada en URL) |
identifier | string | Sí | Identificador de la transacción (codificado en URL) |
El identifier se compara simultáneamente contra tres campos de la transacción:
endToEndId-- ID End-to-End del PIX (ej.:E00416968202501151030VX5Sx8fIpkY)externalId-- Identificador externo proporcionado al crear la transacciónid(numérico) -- ID interno de la transacción en Avista (solo si el valor es puramente numérico)
En la práctica no hay ambigüedad: cada tipo de identificador tiene un formato único (e2eId comienza con E seguido de 32 caracteres alfanuméricos; id es puramente numérico; externalId es cualquier cadena).
Ejemplos
curl -X GET "https://api.avista.global/api/pix/transactions/pix-key/joao%40example.com/E00416968202501151030VX5Sx8fIpkY" \
-H "Authorization: Bearer your_token_here"curl -X GET "https://api.avista.global/api/pix/transactions/pix-key/joao%40example.com/order-abc123" \
-H "Authorization: Bearer your_token_here"const pixKey = 'joao@example.com';
const identifier = 'E00416968202501151030VX5Sx8fIpkY';
const response = await fetch(
`https://api.avista.global/api/pix/transactions/pix-key/${encodeURIComponent(pixKey)}/${encodeURIComponent(identifier)}`,
{
headers: {
'Authorization': 'Bearer your_token_here'
}
}
);
if (response.status === 404) {
console.log('Transaction not found');
} else {
const transaction = await response.json();
console.log(transaction);
}import requests
from urllib.parse import quote
pix_key = 'joao@example.com'
identifier = 'E00416968202501151030VX5Sx8fIpkY'
response = requests.get(
f'https://api.avista.global/api/pix/transactions/pix-key/{quote(pix_key, safe="")}/{quote(identifier, safe="")}',
headers={
'Authorization': 'Bearer your_token_here'
}
)
if response.status_code == 404:
print('Transaction not found')
else:
transaction = response.json()
print(transaction)Respuesta 200 -- Transacción Encontrada
{
"transactionId": "12345",
"externalId": "order-abc123",
"status": "Confirmado",
"operationType": "Pix in",
"movementType": "CREDIT",
"originalAmount": 100.00,
"feeAmount": 1.00,
"finalAmount": 99.00,
"endToEndId": "E00416968202501151030VX5Sx8fIpkY",
"createdAt": "2025-01-15T10:30:00.000Z",
"processedAt": "2025-01-15T10:30:05.000Z",
"counterpart": {
"name": "João Silva",
"document": "***.456.789-**",
"bank": {
"bankISPB": "00000000",
"bankName": "Banco do Brasil",
"bankCode": "001",
"accountBranch": "0001",
"accountNumber": "123456-7"
}
}
}Respuesta 404 -- No Encontrado
Se retorna cuando ninguna transacción coincide con el identifier proporcionado para la pixKey especificada.
{
"statusCode": 404,
"message": "Transação não encontrada"
}Mapeo de Campos
Estado
| Valor Interno | Valor Retornado |
|---|---|
PENDING | Pendente |
CONFIRMED | Confirmado |
ERROR | Error |
Tipo de Operación
| Valor Interno | Valor Retornado | Descripción |
|---|---|---|
PAYMENT | Pix in | Recepción PIX |
WITHDRAW | Pix out | Pago PIX |
REFUND_IN | Refund in | Devolución solicitada (débito) |
REFUND_OUT | Refund out | Reversión recibida (crédito) |
Tipo de Movimiento
| Tipo de Operación | Movimiento |
|---|---|
Pix in | CREDIT |
Pix out | DEBIT |
Refund in | DEBIT |
Refund out | CREDIT |
Diferencias con /api/transactions
| Aspecto | /api/transactions | /api/pix/transactions/pix-key/\{pixKey\} |
|---|---|---|
| Filtro principal | Toda la cuenta | Por clave PIX específica |
Máx. size por página | 100 | 1000 |
| Máx. resultados totales | Sin límite | 1000 |
startDate predeterminado | Últimos 31 días | Últimos 30 días |
| Clave inexistente / sin resultados | 200 con lista vacía | 200 con lista vacía |
Búsqueda por externalId | Query param ?externalId= | Path param /\{identifier\} |
Búsqueda por endToEndId | Query param ?endToEndId= | Path param /\{identifier\} |
Casos de Uso
Códigos de Error
| Código | Descripción |
|---|---|
400 | Parámetros inválidos, fechas invertidas o intervalo excede 31 días |
401 | Token no proporcionado o inválido |
404 | Transacción no encontrada (solo en el endpoint /\{pixKey\}/\{identifier\}) |