Transacciones por Clave PIX
Descripción General
Los endpoints de transacciones por clave PIX permiten consultar el historial de transacciones asociadas a una clave PIX específica (CPF, CNPJ, teléfono, e-mail o clave aleatoria EVP). Son ideales para escenarios como:
- Conciliación por clave: verificar todas las recepciones de un CNPJ o CPF específico
- Auditoría: auditar los movimientos de una clave PIX en un período
- Monitoreo de recepciones: seguir los pagos recibidos vía una clave específica
Comparado 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 devuelve 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 refinar.
Autenticación
Este endpoint requiere un token Bearer válido en el header Authorization:
Authorization: Bearer <su_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 e-mail válida | joao@example.com | |
| Clave aleatoria (EVP) | UUID v4 | 550e8400-e29b-41d4-a716-446655440000 |
Al usar claves con caracteres especiales en la URL (como + en el teléfono), aplique siempre URL encoding. En los ejemplos de código, encodeURIComponent (JavaScript) y quote(..., safe="") (Python) lo hacen automáticamente.
Endpoint 1: Listar Transacciones por Clave PIX
GET /api/pix/transactions/pix-key/{pixKey}Parámetros
| Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|---|---|---|---|---|
pixKey | string | ✓ (path) | — | Clave PIX (URL-encoded) |
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 inicial (ISO 8601) |
endDate | date | — | Hoy | Fecha final (ISO 8601) |
El intervalo entre startDate y endDate no puede exceder 31 días. La consulta devuelve 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 refinar.
Clave sin resultados
Si la pixKey informada no tiene transacciones en el período consultado, la API devuelve 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.fypay.me/api/pix/transactions/pix-key/joao%40example.com?status=CONFIRMED&page=1&size=50" \
-H "Authorization: Bearer su_token_aqui"const pixKey = 'joao@example.com';
const params = new URLSearchParams({
status: 'CONFIRMED',
page: '1',
size: '50'
});
const response = await fetch(
`https://api.fypay.me/api/pix/transactions/pix-key/${encodeURIComponent(pixKey)}?${params}`,
{
headers: {
'Authorization': 'Bearer su_token_aqui'
}
}
);
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.fypay.me/api/pix/transactions/pix-key/{quote(pix_key, safe="")}',
params={
'status': 'CONFIRMED',
'page': 1,
'size': 50
},
headers={
'Authorization': 'Bearer su_token_aqui'
}
)
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,
"amountPaid": 100.00,
"mismatchAmount": null,
"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 | Cantidad de registros por página |
total | Total de registros encontrados (máx. 1000) |
totalPages | Total de páginas disponibles |
hasNext | Indica si existe una página siguiente |
hasPrevious | Indica si existe una página anterior |
Para obtener todos los resultados de una vez, use size=1000. Para procesar en lotes, recorra 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.fypay.me/api/pix/transactions/pix-key/${encodeURIComponent(pixKey)}?${params}`,
{ headers: { 'Authorization': 'Bearer su_token_aqui' } }
);
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 | Obligatorio | Descripción |
|---|---|---|---|
pixKey | string | ✓ | Clave PIX (URL-encoded) |
identifier | string | ✓ | Identificador de la transacción (URL-encoded) |
El identifier se compara simultáneamente contra tres campos de la transacción:
endToEndId— End-to-End ID del PIX (ej.:E00416968202501151030VX5Sx8fIpkY)externalId— Identificador externo proporcionado en la creación de la transacciónidnumérico — ID interno de la transacción en FyPay (solo si el valor es puramente numérico)
En la práctica no hay ambigüedad: el formato de cada tipo de identificador es único (el e2eId comienza con E seguido de 32 caracteres alfanuméricos; el id es puramente numérico; el externalId es cualquier string).
Ejemplos
curl -X GET "https://api.fypay.me/api/pix/transactions/pix-key/joao%40example.com/E00416968202501151030VX5Sx8fIpkY" \
-H "Authorization: Bearer su_token_aqui"curl -X GET "https://api.fypay.me/api/pix/transactions/pix-key/joao%40example.com/order-abc123" \
-H "Authorization: Bearer su_token_aqui"const pixKey = 'joao@example.com';
const identifier = 'E00416968202501151030VX5Sx8fIpkY';
const response = await fetch(
`https://api.fypay.me/api/pix/transactions/pix-key/${encodeURIComponent(pixKey)}/${encodeURIComponent(identifier)}`,
{
headers: {
'Authorization': 'Bearer su_token_aqui'
}
}
);
if (response.status === 404) {
console.log('Transacción no encontrada');
} 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.fypay.me/api/pix/transactions/pix-key/{quote(pix_key, safe="")}/{quote(identifier, safe="")}',
headers={
'Authorization': 'Bearer su_token_aqui'
}
)
if response.status_code == 404:
print('Transacción no encontrada')
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 Encontrada
Se devuelve cuando ninguna transacción corresponde al identifier informado para la pixKey especificada.
{
"statusCode": 404,
"code": "PIX_TRANSACTION_NOT_FOUND",
"message": "Transaction not found for pixKey=12345678000190 and identifier=E00416968202501151030VX5Sx8fIpkY",
"userMessage": "Transação não encontrada.",
"errorId": "<correlation-id>",
"timestamp": "2025-01-15T10:30:00.000Z",
"path": "/api/pix/transactions/pix-key/12345678000190/E00416968202501151030VX5Sx8fIpkY",
"method": "GET"
}Mapeo de Campos
Estado
| Valor Interno | Valor Devuelto |
|---|---|
PENDING | Pendente |
CONFIRMED | Confirmado |
ERROR | Error |
Tipo de Operación
| Valor Interno | Valor Devuelto | Descripción |
|---|---|---|
PAYMENT | Pix in | Recepción vía PIX |
WITHDRAW | Pix out | Pago vía PIX |
REFUND_IN | Refund in | Devolución solicitada (débito) |
REFUND_OUT | Refund out | Devolució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 superior a 31 días |
401 | Token no proporcionado o inválido |
404 | Transacción no encontrada (solo en el endpoint /\{pixKey\}/\{identifier\}) |