< / >
{ } [ ] => API const git npm xo
flux_handshake.sh
DEV v1.0
Ctrl K

Getting Started

The fluX API is a RESTful JSON interface that enables you to send SPEI payouts, verify account ownership, and receive real-time notifications all through a single integration point connected to Mexico's interbank payment network via BANXICO.

https://flux.praxisglobe.com/api/v1/partners
HTTPS / TLS 1.2+
JSON

Platform Capabilities

Everything you need to move money in Mexico built on SPEI, powered by BANXICO.

Design Principles

Real-Time

All transactions are processed via SPEI in real time. No batch processing, no delays.

Secure by Default

TLS encryption, JWT authentication, and idempotency keys protect every request.

RESTful JSON API

Standard HTTP methods, predictable URLs, and JSON request/response bodies.

Idempotent

Safely retry any request with the same idempotency key without duplicating operations.

Webhook-First

Get notified in real time as events happen. No polling required (though supported).

ISO 20022 Ready

Aligned with international financial messaging standards for cross-border compatibility.

Quickstart Guide

Go from zero to your first API call in four steps.

1
Get Your Credentials ~2 min
During onboarding, fluX provides your access credentials. These are unique to your account.
2
Authenticate ~3 min
Obtain a JWT token by sending your credentials to the login endpoint. Include this token in all subsequent requests.
terminal
curl -X POST https://flux.praxisglobe.com/api/v1/partners/login \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "user@example.com",
    "password": "password123"
  }'
3
Make Your First API Call ~5 min
Use your JWT token in the Authorization header to call any endpoint. Here's an example creating a payout:
terminal
4
Handle the Response ~5 min
All successful responses return JSON with the transaction details. Monitor the transactionStatus field as it transitions through the lifecycle (INITIALIZED  PENDING  LIQUIDATED).
response.json

API Conventions

Convention Details

Environments

Sandbox TESTING

Use the sandbox environment for development and testing. No real funds are moved. Simulated SPEI responses and CEPs.

https://sandbox.flux.praxisglobe.com/api/v1/partners
Production LIVE

Production environment for live operations. Real SPEI transactions and CEP retrieval via BANXICO. Requires approved onboarding.

https://flux.praxisglobe.com/api/v1/partners
< 10s
LiquidaciónSettlement
99.9%
DisponibilidadUptime
2
Países ActivosActive Countries
1
Integración ÚnicaSingle Integration

¿Qué es fluX One?What is fluX One?

fluX One es una plataforma de middleware financiero que conecta tu negocio con los rieles de pago instantáneo de Latinoamérica a través de una sola integración. En México opera con SPEI (Banco de México) y en Colombia con Bre-B (Banco de la República). Tu equipo técnico integra una vez, y tu negocio puede mover dinero en ambos países de forma inmediata.fluX One is a financial middleware platform that connects your business to Latin America's instant payment rails through a single integration. In Mexico it operates via SPEI (Banco de México) and in Colombia via Bre-B (Banco de la República). Your technical team integrates once, and your business can move money across both countries instantly.

Capacidades de NegocioBusiness Capabilities

Dispersión de PagosPayouts
Envía pagos a cualquier cuenta bancaria en México o Colombia en segundos. Ideal para nómina, proveedores, préstamos y reembolsos.Send payments to any bank account in Mexico or Colombia in seconds. Ideal for payroll, suppliers, loans, and refunds.
Cobros InstantáneosInstant Collections
Recibe pagos de tus clientes a través de transferencias bancarias, llaves referenciadas y códigos QR. Reconciliación automática.Receive payments from your customers via bank transfers, referenced keys, and QR codes. Automatic reconciliation.
Códigos QRQR Codes
Genera QR estáticos o dinámicos para que tus clientes paguen desde su app bancaria. Estándar EMVCo interoperable.Generate static or dynamic QR codes for customers to pay from their banking app. Interoperable EMVCo standard.
Validación de CuentasAccount Validation
Verifica que las cuentas destino existen y son alcanzables antes de enviar dinero. Reduce rechazos hasta un 95%.Verify destination accounts exist and are reachable before sending money. Reduce rejections by up to 95%.

Proceso de OnboardingOnboarding Process

CredencialesCredentials
Día 1Day 1
SandboxSandbox
Semana 1-2Week 1-2
CertificaciónCertification
Semana 2-3Week 2-3
ProducciónProduction
Semana 3-4Week 3-4

¿Listo para comenzar?Ready to get started?

Agenda una llamada con nuestro equipo de integración para recibir tus credenciales de sandbox.Schedule a call with our integration team to receive your sandbox credentials.

Contactar EquipoContact Team

Flujo de una TransacciónTransaction Flow

Comprende el ciclo de vida completo de un pago o transferencia a través de la infraestructura integrada de fluX One, desde la solicitud inicial del cliente hasta el asentamiento en la red bancaria local y la notificación asíncrona.

Understand the complete lifecycle of a payment or transfer through the integrated infrastructure of fluX One, from the initial client request to the settlement in the local banking network and the asynchronous notification.

Ciclo Operativo Paso a PasoStep-by-Step Operating Cycle

1
Solicitud e Idempotencia (HTTP POST)
Request & Idempotency (HTTP POST)
El comercio realiza una petición POST con las credenciales de autorización JWT en la cabecera. La cabecera Idempotency-Key previene transacciones duplicadas ante fallos de red.
The merchant performs a POST request with the JWT authorization credentials in the header. The Idempotency-Key header prevents duplicate transactions in case of network failures.
2
Validación y Registro en Libro Mayor (Blockchain)
Validation & Journaling (Blockchain)
fluX One valida los fondos, la estructura de la solicitud y registra de forma inmutable la transacción en el Journal Ledger (blockchain), garantizando seguridad matemática y auditoría total.
fluX One validates the funds, the request structure, and immutably records the transaction in the Journal Ledger (blockchain), guaranteeing mathematical security and total auditability.
3
Dispersión en Red Bancaria Local (SPEI / Bre-B)
Local Banking Dispersion (SPEI / Bre-B)
La transacción se canaliza en tiempo real al Banco Central correspondiente (Banco de México vía SPEI o Banco de la República vía Bre-B en Colombia) para liquidación interbancaria instantánea en segundos.
The transaction is channeled in real time to the corresponding Central Bank (Banco de México via SPEI or Banco de la República via Bre-B in Colombia) for instant interbank settlement in seconds.
4
Notificación Asíncrona (Webhooks)
Asynchronous Notification (Webhooks)
Una vez que la red local confirma el éxito o fallo de la transferencia (LIQUIDATED o FAILED), fluX One despacha un webhook con firma criptográfica al endpoint registrado del comercio para actualizar su sistema de forma inmediata.
Once the local network confirms the success or failure of the transfer (LIQUIDATED or FAILED), fluX One dispatches a cryptographically signed webhook to the merchant's registered endpoint to update their system immediately.

Ciclo de Vida de un PagoPayment Lifecycle

Cada pago que procesas a través de fluX One sigue un ciclo de vida predecible y transparente. Desde que tu plataforma envía la instrucción hasta la confirmación final, el proceso toma menos de 10 segundos.Every payment processed through fluX One follows a predictable and transparent lifecycle. From the moment your platform sends the instruction to final confirmation, the process takes less than 10 seconds.

Tu PlataformaYour Platform
Envía instrucciónSends instruction
fluX OnefluX One
Procesa y enrutaProcesses & routes
BancoBank
Ejecuta pagoExecutes payment
ConfirmaciónConfirmation
< 10s

¿Qué pasa si algo falla?What happens if something fails?

  • fluX One reintenta automáticamente si el banco no responde. Zero intervención manual.fluX One automatically retries if the bank doesn't respond. Zero manual intervention.
  • Tu sistema recibe una notificación instantánea con el resultado final (éxito o fallo).Your system receives an instant notification with the final result (success or failure).
  • Protección contra duplicados: un pago nunca se procesa dos veces, incluso con fallas de red.Duplicate protection: a payment is never processed twice, even with network failures.
  • Cada transacción queda registrada en el journal inmutable de blockchain para auditoría completa.Every transaction is recorded on the immutable blockchain journal for complete auditability.

Obligaciones de SeguridadSecurity Obligations

Normativas obligatorias de seguridad y cumplimiento normativo que todos los clientes de la plataforma fluX One deben seguir estrictamente para proteger los datos financieros corporativos y de tarjetahabientes.

Mandatory security and compliance regulations that all fluX One platform clients must strictly follow to protect corporate and cardholder financial data.

Reglas de Cumplimiento ObligatoriasMandatory Compliance Rules

1. Almacenamiento de Datos Sensibles: Está estrictamente prohibido almacenar las credenciales de autenticación JWT o claves de API en repositorios de código abiertos o del lado del cliente (frontend). Todas las llamadas a la API de fluX One deben realizarse desde tu servidor back-end.

1. Sensitive Data Storage: It is strictly prohibited to store JWT authentication credentials or API keys in public code repositories or client-side code (frontend). All fluX One API calls must be executed from your back-end server.

2. Protocolos Seguros obligatorios: Todas las conexiones externas a la API deben utilizar HTTPS con cifrado TLS 1.2 o superior. Las conexiones cifradas en versiones antiguas de TLS (como TLS 1.0 y 1.1) serán rechazadas por el Gateway de seguridad.

2. Mandatory Secure Protocols: All external connections to the API must use HTTPS with TLS 1.2 encryption or higher. Encrypted connections on older TLS versions (like TLS 1.0 and 1.1) will be rejected by the security Gateway.

3. Gestión de Claves de Firma de Webhook: La clave secreta para validar las firmas criptográficas de los Webhooks debe ser tratada como un dato altamente confidencial. Si sospechas de un compromiso de seguridad, debes rotar la clave inmediatamente en el panel administrativo corporativo.

3. Webhook Signature Key Management: The secret key used to validate cryptographic Webhook signatures must be treated as highly confidential data. If you suspect a security compromise, you must rotate the key immediately in the corporate administrative dashboard.

Seguridad y CumplimientoSecurity & Compliance

fluX One opera bajo los más altos estándares de seguridad financiera. Tu información y la de tus clientes están protegidas con tecnología de grado bancario.fluX One operates under the highest financial security standards. Your information and your customers' data are protected with bank-grade technology.

Cifrado de Extremo a ExtremoEnd-to-End Encryption
Toda la comunicación utiliza HTTPS con TLS 1.2+ obligatorio. Conexiones antiguas son rechazadas automáticamente.All communication uses HTTPS with mandatory TLS 1.2+. Legacy connections are automatically rejected.
Credenciales SegurasSecure Credentials
Llaves de acceso únicas por entorno. Nunca se exponen al usuario final ni al código del frontend.Unique access keys per environment. Never exposed to end users or frontend code.
Auditoría CompletaFull Audit Trail
Registro inmutable de cada operación en blockchain. Trazabilidad total para cumplimiento regulatorio.Immutable record of every operation on blockchain. Full traceability for regulatory compliance.
Regulación LocalLocal Regulation
Cumplimiento con CNBV (México) y SFC (Colombia). Operación dentro del marco regulatorio de cada país.Compliance with CNBV (Mexico) and SFC (Colombia). Operation within each country's regulatory framework.

Autenticación

Todas las peticiones a las APIs de fluX deben estar autenticadas mediante Llaves Secretas (API Keys). No utilizamos un sistema de usuario y contraseña para integraciones máquina a máquina.

Uso de API Keys

Tus API Keys proporcionan acceso completo a tu entorno y deben mantenerse seguras en el backend. Nunca las expongas en el código del lado del cliente o repositorios públicos.

Header Requerido
Authorization: Bearer sk_live_...
Ejemplo de Petición Autenticada
curl -X GET "https://flux.praxisglobe.com/api/v1/partners/some_endpoint" \
  -H "Authorization: Bearer sk_live_ejemplo_secreto_12345" \
  -H "Accept: application/json"

Collections SPEI (Pay-ins)

SPEI (Sistema de Pagos Electrónicos Interbancarios) is Mexico's real-time interbank transfer system operated by Banco de México (BANXICO). fluX leverages SPEI to collect payments from any valid CLABE account into your concentrator account.

Use Cases

Subscription Billing

Automatically collect recurring payments from subscribers via SPEI.

E-Commerce Payments

Accept payments from customers directly into your concentrator account.

Invoice Collection

Generate collection requests tied to invoices for B2B payment flows.

Marketplace Deposits

Collect funds from buyers into your platform's escrow or settlement account.

Cliente Client Tu Plataforma Your Platform
fluX API  SPEI
1
POST /api/v1/partners/transactions/collections

El cliente envía una solicitud de recaudo con payer_clabe, amount y source_instrument_id.

Client sends a collection request with payer_clabe, amount, and source_instrument_id.

Recaudo Iniciado Collection Initiated 200 OK

fluX valida la solicitud e inicia el recaudo SPEI. Retorna la transacción con status: INITIALIZED. Los fondos se liquidan al confirmar el banco del pagador.

fluX validates the request and initiates the SPEI collection. Returns the transaction with status: INITIALIZED. Funds settle once payer's bank confirms.

2

Create a Collection

POST /api/v1/partners/transactions/collections Initiate a SPEI collection

Request Headers

Header Value
Authorization Bearer <YOUR_JWT_HERE>
Accept application/json
Content-Type application/json
Idempotency-Key UUID v5 unique per request

Body Parameters

Field Type Req. Description
client_id string Yes Your unique client identifier. Provided during onboarding.
source_instrument_id string Yes Instrument ID linked to your concentrator account (collection destination).
payer_clabe string Yes The 18-digit CLABE of the payer's account. Must be valid and SPEI-reachable.
transaction_request.external_reference string Yes Numeric reference (max 7 digits).
transaction_request.description string Yes Brief description (max 40 chars). Only letters, numbers, spaces, and ñ/.
transaction_request.amount string Yes Amount in MXN pesos as a string (e.g. "150.00"). Must be > 0.
transaction_request.currency string Yes ISO 4217 currency code. Currently only "MXN" is supported.
Code Examples
curl -i -X POST \
  https://flux.praxisglobe.com/api/v1/partners/transactions/collections \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: 660e8400-e29b-41d4-a716-446655440001' \
  -d '{
    "client_id": "c2d1d1e3-3340-4170-980e-e9269bbbc551",
    "source_instrument_id": "709448c3-7cbf-454d-a87e-feb23801269a",
    "payer_clabe": "012180015000000012",
    "transaction_request": {
      "external_reference": "7654321",
      "description": "Cobro servicio mensual",
      "amount": "150.00",
      "currency": "MXN"
    }
  }'
const axios = require('axios');

axios.post('https://flux.praxisglobe.com/api/v1/partners/transactions/collections', {
  client_id: 'c2d1d1e3-3340-4170-980e-e9269bbbc551',
  source_instrument_id: '709448c3-7cbf-454d-a87e-feb23801269a',
  payer_clabe: '012180015000000012',
  transaction_request: {
    external_reference: '7654321',
    description: 'Cobro servicio mensual',
    amount: '150.00',
    currency: 'MXN'
  }
}, {
  headers: {
    'Authorization': 'Bearer <YOUR_JWT_HERE>',
    'Idempotency-Key': '660e8400-e29b-41d4-a716-446655440001'
  }
})
.then(res => console.log(res.data))
.catch(err => console.error(err));
import requests

payload = {
  "client_id": "c2d1d1e3-3340-4170-980e-e9269bbbc551",
  "source_instrument_id": "709448c3-7cbf-454d-a87e-feb23801269a",
  "payer_clabe": "012180015000000012",
  "transaction_request": {
    "external_reference": "7654321",
    "description": "Cobro servicio mensual",
    "amount": "150.00",
    "currency": "MXN"
  }
}
headers = {
  'Authorization': 'Bearer <YOUR_JWT_HERE>',
  'Idempotency-Key': '660e8400-e29b-41d4-a716-446655440001'
}

res = requests.post('https://flux.praxisglobe.com/api/v1/partners/transactions/collections', json=payload, headers=headers)
print(res.json())
import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;

RestTemplate restTemplate = new RestTemplate();
String url = "https://flux.praxisglobe.com/api/v1/partners/transactions/collections";

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "Bearer <YOUR_JWT_HERE>");
headers.set("Idempotency-Key", "660e8400-e29b-41d4-a716-446655440001");

Map<String, Object> txReq = new HashMap<>();
txReq.put("external_reference", "7654321");
txReq.put("description", "Cobro servicio mensual");
txReq.put("amount", "150.00");
txReq.put("currency", "MXN");

Map<String, Object> body = new HashMap<>();
body.put("client_id", "c2d1d1e3-3340-4170-980e-e9269bbbc551");
body.put("source_instrument_id", "709448c3-7cbf-454d-a87e-feb23801269a");
body.put("payer_clabe", "012180015000000012");
body.put("transaction_request", txReq);

HttpEntity<Map> entity = new HttpEntity<>(body, headers);
ResponseEntity<String> res = restTemplate.postForEntity(url, entity, String.class);
System.out.println(res.getBody());
Response (200 OK)
{
  "id": "a3b8d1b6-0b3b-4b1a-9c1a-1a2b3c4d5e6f",
  "bankId": "9d84b03a-28d1-4898-a69c-38824239e2b1",
  "clientId": "c2d1d1e3-3340-4170-980e-e9269bbbc551",
  "externalReference": "7654321",
  "trackingId": "20250317FINCHCOLL8K3PQRS",
  "description": "Cobro servicio mensual",
  "amount": "150.00",
  "currency": "MXN",
  "category": "CREDIT_TRANS",
  "subCategory": "SPEI_CREDIT",
  "transactionStatus": "INITIALIZED",
  "audit": {
    "createdAt": "2025-03-17 09:30:00.000000-06:00",
    "updatedAt": "2025-03-17 09:30:00.000000-06:00",
    "deletedAt": "None",
    "blockedAt": "None"
  }
}

Transaction Status Lifecycle

INITIALIZED
Transfer created and registered. Transitions to PENDING in seconds.
PENDING
Transfer queued for submission to the SPEI network.
PROCESSING
Transfer submitted and currently being processed by SPEI.
LIQUIDATED
/
FAILED
Funds delivered successfully to beneficiary, or rejected by bank.
Status Description
INITIALIZED Collection request created and registered. Awaiting payer confirmation.
PENDING Collection authorized, awaiting SPEI credit from the payer's bank.
PROCESSING SPEI credit received, funds being settled to your concentrator account.
LIQUIDATED Funds successfully received and settled in your concentrator account.
FAILED Collection could not be completed. Check the error details for more information.

Error Codes

Code HTTP Description
invalid_clabe 400 The payer CLABE is invalid or unreachable via SPEI.
invalid_amount 400 The amount is invalid (zero, negative, or exceeds decimals limit).
invalid_description 400 Description contains invalid characters or exceeds 40 characters.
amount_exceeds_limit 400 The collection amount exceeds the configured daily or per-transaction limit.
client_not_found 404 The provided client_id does not exist or is inactive.
payer_bank_rejected 502 The payer's bank rejected the collection request.
internal_server_error 500 An internal server error occurred.

Idempotency Safe Retries

Include a Idempotency-Key (UUID v5) header with every request. If you retry the same request with the same key and body within 24 hours, fluX will return the cached result instead of creating a duplicate.

Scenario HTTP Result
Invalid key format (not UUID v5) 400 Bad Request the key must be a valid UUID v5.
Key-body mismatch (same key, different body) 409 Conflict the idempotency key was used with a different payload.
Duplicate while original is in-flight 409 Conflict "operation in progress". Retry once the first resolves.
Identical retry (same key + body within 24 h) 200 OK returns the same payload from cache. No duplicate created.

Possible Errors

Standard HTTP status codes are used to indicate the success or failure of API requests.

Code Description
400 Bad Request. Invalid data or malformed payload. Check the error response for details.
401 Unauthorized. Missing or invalid Bearer token. Verify your API credentials.
422 Unprocessable Entity. A validation error occurred on specific fields.
500 Internal Server Error. Something went wrong on our end.

Seguridad de AccesoAccess Security

Tu integración con fluX One está protegida con llaves criptográficas únicas (API Keys). Solo tu equipo técnico autorizado puede realizar operaciones. No utilizamos contraseñas — el acceso es 100% programático y seguro.Your fluX One integration is protected with unique cryptographic keys (API Keys). Only your authorized technical team can perform operations. We don't use passwords — access is 100% programmatic and secure.

  • Una llave para Sandbox (pruebas) y otra para Producción (dinero real).One key for Sandbox (testing) and another for Production (real money).
  • Las llaves se rotan cuando lo necesites sin interrumpir tu operación.Keys can be rotated whenever you need without interrupting your operation.
  • Todas las llamadas quedan registradas para auditoría de seguridad.All calls are logged for security audit purposes.
  • Protección contra duplicados: cada transacción incluye una clave de idempotencia que impide pagos dobles.Duplicate protection: every transaction includes an idempotency key that prevents double payments.
TLS 1.2+
Cifrado MínimoMinimum Encryption
24h
Ventana de IdempotenciaIdempotency Window
JWT
Estándar de TokensToken Standard

Payments (Payouts)

Send payouts to any Mexican bank account via SPEI in real time. Transfers are processed instantly during SPEI operating hours and settle within seconds. FluX handles all the complexity of SPEI connectivity, tracking, and reconciliation through a single API call.

Postman Collection Payouts

v1

Download the ready-to-use Postman collection with the Payouts endpoint, test scripts, and example responses.

Descargar ColecciónDownload Collection

Payouts SPEI

SPEI (Sistema de Pagos Electrónicos Interbancarios) is Mexico's real-time interbank transfer system operated by Banco de México (BANXICO). FluX leverages SPEI to deliver instant payouts to any valid CLABE account in the Mexican banking system.

Use Cases

Payroll Disbursements

Automate salary payments to thousands of employees in real time via SPEI.

Supplier Payments

Pay suppliers and vendors instantly without manual bank transfers.

Marketplace Settlements

Settle funds to sellers, drivers, or freelancers from your platform balance.

Refunds & Returns

Issue instant refunds directly to the customer's bank account.

Create a Payout

Initiate a SPEI payout from your concentrator account to any valid CLABE in Mexico.

POST https://flux.praxisglobe.com/api/v1/partners/transactions/payouts

Request Parameters

Field Type Description
client_id Req. string Your unique client identifier. Provided during onboarding.
source_instrument_id Req. string Instrument ID linked to your concentrator account (funding source). Provided during onboarding.
destination_clabe Req. string The 18-digit CLABE of the beneficiary account. Must be a valid SPEI-reachable CLABE.
transaction_request.external_reference Req. string Numeric reference (max 7 digits).
transaction_request.description Req. string Brief description to identify the transaction (max 40 chars). Only letters, numbers, spaces, and ñ/.
transaction_request.amount Req. string Amount in MXN with up to 2 decimal places (e.g. "1.95"). Must be greater than 0.
transaction_request.currency Req. string ISO 4217 currency code. Currently only "MXN" is supported.
cURL Example
curl -i -X POST \
  https://flux.praxisglobe.com/api/v1/partners/transactions/payouts \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000' \
  -d '{
    "client_id": "c2d1d1e3-3340-4170-980e-e9269bbbc551",
    "source_instrument_id": "709448c3-7cbf-454d-a87e-feb23801269a",
    "destination_clabe": "734180000069183455",
    "transaction_request": {
      "external_reference": "1234567",
      "description": "lorem ipsum dolor sit amet",
      "amount": "1.95",
      "currency": "MXN"
    }
  }'

Response

Status code: 200 OK. Returns the created transaction with status INITIALIZED.

200 OK application/json
{
  "id": "16811ee8-1ef9-4dd4-8d84-9c2df89cf302",
  "bankId": "9d84b03a-28d1-4898-a69c-38824239e2b1",
  "clientId": "c2d1d1e3-3340-4170-980e-e9269bbbc551",
  "externalReference": "1234567",
  "trackingId": "20250306FINCHVLIKQ5SKUM",
  "description": "lorem ipsum dolor sit amet",
  "amount": "1.95",
  "currency": "MXN",
  "category": "DEBIT_TRANS",
  "subCategory": "SPEI_DEBIT",
  "transactionStatus": "INITIALIZED",
  "audit": {
    "createdAt": "2025-03-06 11:57:55.408000-06:00",
    "updatedAt": "2025-03-06 11:57:55.408000-06:00",
    "deletedAt": "None",
    "blockedAt": "None"
  }
}

Transfer Lifecycle

Status Description
INITIALIZED Transfer created and registered. Transitions to PENDING within seconds.
PENDING Transfer queued for submission to the SPEI network.
PROCESSING Transfer submitted and being processed by SPEI.
LIQUIDATED Funds successfully delivered to the beneficiary account via SPEI.
FAILED Transfer could not be completed. Check the error details for more information.

Idempotency & Errors

Always include a unique Idempotency-Key (UUID v5) for every payout request. If a network failure occurs and you retry with the same key and body within 24 hours, you'll receive the original 200 OK response from cache.

Code HTTP Description
invalid_clabe400The destination CLABE is invalid or unreachable via SPEI.
insufficient_funds400Your concentrator account balance is insufficient for this transfer.
invalid_amount400The amount is invalid (zero, negative, or exceeds decimals limit).
invalid_description400Description contains invalid characters or exceeds 40 characters.
amount_exceeds_limit400The transfer amount exceeds the configured daily or per-transaction limit.
client_not_found404The provided client_id does not exist or is inactive.
beneficiary_bank_rejected502The beneficiary bank rejected the incoming transfer.

Dispersión de Pagos en MéxicoPayouts in Mexico

Envía dinero a cualquier cuenta bancaria en México a través del sistema SPEI del Banco de México. Los pagos se liquidan en segundos, las 24 horas del día, los 365 días del año.Send money to any bank account in Mexico through Banco de México's SPEI system. Payments settle in seconds, 24 hours a day, 365 days a year.

< 10s
Tiempo de LiquidaciónSettlement Time
24/7
DisponibilidadAvailability
MXN
MonedaCurrency

Casos de UsoUse Cases

NóminaPayroll
Dispersa pagos de nómina a todos tus empleados en segundos. Cuentas de ahorro o cheques.Disburse payroll payments to all your employees in seconds. Savings or checking accounts.
ProveedoresSuppliers
Paga a proveedores con liquidación inmediata. Mejora tu relación comercial y negocia mejores términos.Pay suppliers with immediate settlement. Improve your commercial relationship and negotiate better terms.
Desembolsos de PréstamosLoan Disbursements
Desembolsa préstamos aprobados directamente a la cuenta del solicitante en tiempo real.Disburse approved loans directly to the applicant's account in real time.
ReembolsosRefunds
Devuelve dinero a tus clientes al instante. Mejora la experiencia de usuario y reduce tickets de soporte.Return money to your customers instantly. Improve user experience and reduce support tickets.
InstrucciónInstruction
Tu sistemaYour system
fluX → SPEIfluX → SPEI
< 3s
Banco DestinoTarget Bank
< 7s
ConfirmadoConfirmed
NotificaciónNotification

Collections (Pay-ins)

Collect payments from any Mexican bank account via SPEI. Pay-in requests are processed in real time during SPEI operating hours. FluX handles the end-to-end flow from request initiation to fund settlement in your concentrator account.

Postman Collection Collections (Pay-ins)

v1

Download the ready-to-use Postman collection with the Collections endpoint, test scripts, and example responses.

Descargar ColecciónDownload Collection

Collections SPEI (Pay-ins)

SPEI (Sistema de Pagos Electrónicos Interbancarios) is Mexico's real-time interbank transfer system operated by Banco de México (BANXICO). FluX leverages SPEI to collect payments from any valid CLABE account into your concentrator account.

Use Cases

Subscription Billing

Automatically collect recurring payments from subscribers via SPEI.

E-Commerce Payments

Accept payments from customers directly into your concentrator account.

Invoice Collection

Generate collection requests tied to invoices for B2B payment flows.

Marketplace Deposits

Collect funds from buyers into your platform's escrow or settlement account.

Create a Collection

Initiate a SPEI collection from any valid CLABE to your concentrator account in Mexico.

POST https://flux.praxisglobe.com/api/v1/partners/transactions/collections

Request Parameters

Field Type Description
client_id Req. string Your unique client identifier. Provided during onboarding.
source_instrument_id Req. string Instrument ID linked to your concentrator account (collection destination). Provided during onboarding.
payer_clabe Req. string The 18-digit CLABE of the payer's account. Must be a valid SPEI-reachable CLABE.
transaction_request.external_reference Req. string Numeric reference (max 7 digits).
transaction_request.description Req. string Brief description to identify the collection (max 40 chars). Only letters, numbers, spaces, and ñ/.
transaction_request.amount Req. string Amount in MXN with up to 2 decimal places (e.g. "150.00"). Must be greater than 0.
transaction_request.currency Req. string ISO 4217 currency code. Currently only "MXN" is supported.
cURL Example
curl -i -X POST \
  https://flux.praxisglobe.com/api/v1/partners/transactions/collections \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: 660e8400-e29b-41d4-a716-446655440001' \
  -d '{
    "client_id": "c2d1d1e3-3340-4170-980e-e9269bbbc551",
    "source_instrument_id": "709448c3-7cbf-454d-a87e-feb23801269a",
    "payer_clabe": "012180015000000012",
    "transaction_request": {
      "external_reference": "7654321",
      "description": "Cobro servicio mensual",
      "amount": "150.00",
      "currency": "MXN"
    }
  }'

Response

Status code: 200 OK. Returns the created transaction with status INITIALIZED.

200 OK application/json
{
  "id": "a3b8d1b6-0b3b-4b1a-9c1a-1a2b3c4d5e6f",
  "bankId": "9d84b03a-28d1-4898-a69c-38824239e2b1",
  "clientId": "c2d1d1e3-3340-4170-980e-e9269bbbc551",
  "externalReference": "7654321",
  "trackingId": "20250317FINCHCOLL8K3PQRS",
  "description": "Cobro servicio mensual",
  "amount": "150.00",
  "currency": "MXN",
  "category": "CREDIT_TRANS",
  "subCategory": "SPEI_CREDIT",
  "transactionStatus": "INITIALIZED",
  "audit": {
    "createdAt": "2025-03-17 09:30:00.000000-06:00",
    "updatedAt": "2025-03-17 09:30:00.000000-06:00",
    "deletedAt": "None",
    "blockedAt": "None"
  }
}

Transaction Status Lifecycle

Status Description
INITIALIZED Collection request created and registered. Awaiting payer confirmation.
PENDING Collection authorized, awaiting SPEI credit from the payer's bank.
PROCESSING SPEI credit received, funds being settled to your concentrator account.
LIQUIDATED Funds successfully received and settled in your concentrator account.
FAILED Collection could not be completed. Check the error details for more information.

Idempotency & Errors

Include a Idempotency-Key (UUID v5) header with every request. If you retry the same request with the same key and body within 24 hours, FluX will return the cached result instead of creating a duplicate.

Code HTTP Description
invalid_clabe400The payer CLABE is invalid or unreachable via SPEI.
invalid_amount400The amount is invalid (zero, negative, or exceeds decimals limit).
invalid_description400Description contains invalid characters or exceeds 40 characters.
amount_exceeds_limit400The collection amount exceeds the configured daily or per-transaction limit.
client_not_found404The provided client_id does not exist or is inactive.
payer_bank_rejected502The payer's bank rejected the collection request.

Cobros en MéxicoCollections in Mexico

Recibe pagos de tus clientes a través de SPEI. Cada vez que alguien transfiere a tu cuenta concentradora, fluX One te notifica automáticamente con los detalles del pago para reconciliación instantánea.Receive payments from your customers via SPEI. Every time someone transfers to your concentrator account, fluX One automatically notifies you with payment details for instant reconciliation.

AutomáticoAutomatic
ReconciliaciónReconciliation
CEP
Comprobante OficialOfficial Receipt
InstantáneoInstant
NotificaciónNotification

Ideal ParaIdeal For

E-commerceE-commerce
Recibe pagos de compras en línea con confirmación instantánea para despacho inmediato.Receive online purchase payments with instant confirmation for immediate dispatch.
SuscripcionesSubscriptions
Cobra suscripciones mensuales y recibe el pago al instante con reconciliación automática.Collect monthly subscriptions and receive payment instantly with automatic reconciliation.
MarketplaceMarketplace
Gestiona cobros de compradores y dispersa a vendedores de forma programática.Manage collections from buyers and disburse to sellers programmatically.
Recargas y Pagos de ServiciosTop-ups & Bill Payments
Procesa recargas telefónicas y pagos de servicios con acreditación inmediata.Process phone top-ups and service payments with immediate crediting.

Penny Validation México

The Penny Validation API enables account ownership verification by sending a minimal payment ($0.01 MXN) to a beneficiary account. This process generates a CEP (Comprobante Electrónico de Pago) that provides verified account holder information and creates an official payment receipt through BANXICO.

Postman Collection

v1

Download the ready-to-use Postman collection with all Penny Validation endpoints, test scripts, and example responses.

Descargar ColecciónDownload Collection

Core Features

Account Verification

Confirm the actual account holder matches your intended recipient before sending funds.

Official Documentation

Get an easy-to-use URL to obtain XML or PDF receipts for compliance directly from BANXICO.

Fraud Prevention

Automate payments, reduce errors and prevent fraudulent transactions before they happen.

Important Considerations

  • Processing Time: CEP generation depends on the beneficiary's bank and may vary significantly.
  • Supported Accounts: Currently supports CLABE debit accounts only.
  • Data Delivery: CEP results are delivered via a dedicated CEP webhook for Penny Validation.
  • Transient State: After creation, INITIALIZED may appear briefly treat it as equivalent to PENDING.
  • RFC Optional: You may register instruments with rfc = "ND".
Cliente Client Tu Aplicación Your Application
fluX API  SPEI  CEP
1
POST /api/v1/partners/transactions/penny-validations

El cliente envía una solicitud de validación de centavo con destination_clabe y client_id.

Client sends penny validation request with destination_clabe and client_id.

Validación Iniciada Validation Initiated 200 OK

fluX procesa el centavo ($0.01 MXN) vía SPEI y retorna status: INITIALIZED. Comienza la recuperación del CEP en segundo plano.

fluX processes the $0.01 MXN penny via SPEI and returns status: INITIALIZED. CEP retrieval begins in the background.

2
3
POST /your-webhook-url (Webhook)

fluX entrega el resultado de la validación CEP en tu webhook con el nombre y RFC del beneficiario verificado y el cepUrl (promedio: ~90 segundos).

fluX delivers the CEP result via webhook with verified beneficiary_name, beneficiary_rfc, and cepUrl (average delivery: ~90 seconds).

Create Penny Validation

POST /api/v1/partners/transactions/penny_validation Initiate account ownership verification

Request Parameters

Field Type Req. Description
client_id string Yes Your unique client identifier. Provided during onboarding.
source_instrument_id string Yes Instrument ID linked to your concentrator account (funding source).
destination_clabe string Yes The 18-digit CLABE of the beneficiary account. Must be valid and SPEI-reachable debit account.
description string Yes Payment concept (max 40 chars). Only letters, numbers, spaces and ñ/ allowed.
external_reference string Yes Numeric string, maximum 7 digits. Stored as-is.
Code Example
curl -X POST https://flux.praxisglobe.com/api/v1/partners/transactions/penny_validation \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "X-Idempotency-Key: unique-pv-key-12345" \
  -d '{
    "client_id": "09b1c156-73c7-62e1-9a3e-bf705f8f3cbe",
    "source_instrument_id": "709448c3-7cbf-454d-a87e-feb23801269a",
    "destination_clabe": "734180000069183455",
    "description": "Validacion de cuenta",
    "external_reference": "1234567"
  }'
const axios = require('axios');

axios.post('https://flux.praxisglobe.com/api/v1/partners/transactions/penny_validation', {
  client_id: '09b1c156-73c7-62e1-9a3e-bf705f8f3cbe',
  source_instrument_id: '709448c3-7cbf-454d-a87e-feb23801269a',
  destination_clabe: '734180000069183455',
  description: 'Validacion de cuenta',
  external_reference: '1234567'
}, {
  headers: {
    'Authorization': 'Bearer <ACCESS_TOKEN>',
    'Accept': 'application/json',
    'Content-Type': 'application/json',
    'X-Idempotency-Key': 'unique-pv-key-12345'
  }
})
.then(res => console.log(res.data))
.catch(err => console.error(err));
import requests

payload = {
  "client_id": "09b1c156-73c7-62e1-9a3e-bf705f8f3cbe",
  "source_instrument_id": "709448c3-7cbf-454d-a87e-feb23801269a",
  "destination_clabe": "734180000069183455",
  "description": "Validacion de cuenta",
  "external_reference": "1234567"
}
headers = {
  'Authorization': 'Bearer <ACCESS_TOKEN>',
  'Accept': 'application/json',
  'Content-Type': 'application/json',
  'X-Idempotency-Key': 'unique-pv-key-12345'
}

res = requests.post('https://flux.praxisglobe.com/api/v1/partners/transactions/penny_validation', json=payload, headers=headers)
print(res.json())
import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;

RestTemplate restTemplate = new RestTemplate();
String url = "https://flux.praxisglobe.com/api/v1/partners/transactions/penny_validation";

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "Bearer <ACCESS_TOKEN>");
headers.set("X-Idempotency-Key", "unique-pv-key-12345");

Map<String, Object> body = new HashMap<>();
body.put("client_id", "09b1c156-73c7-62e1-9a3e-bf705f8f3cbe");
body.put("source_instrument_id", "709448c3-7cbf-454d-a87e-feb23801269a");
body.put("destination_clabe", "734180000069183455");
body.put("description", "Validacion de cuenta");
body.put("external_reference", "1234567");

HttpEntity<Map> entity = new HttpEntity<>(body, headers);
ResponseEntity<String> res = restTemplate.postForEntity(url, entity, String.class);
System.out.println(res.getBody());
Response (200 OK)
{
  "id": "1eb4b5ac-71f6-4203-aded-4fcb7fd21637",
  "bankId": "14b402f6-5dd1-4cd8-ac54-d12c5647d137",
  "clientId": "09b1c156-73c7-62e1-9a3e-bf705f8f3cbe",
  "externalReference": "1234567",
  "trackingId": "20250820FINCHXXXXQ6RPX4",
  "description": "Validacion de cuenta",
  "amount": "0.01",
  "currency": "MXN",
  "category": "DEBIT_TRANS",
  "subCategory": "SPEI_DEBIT",
  "transactionStatus": "INITIALIZED",
  "audit": {
    "createdAt": "2025-08-19 13:03:36.194761-06:00",
    "updatedAt": "2025-08-19 13:03:36.194761-06:00",
    "deletedAt": "None",
    "blockedAt": "None"
  },
  "metadata": {
    "dataCep": {
      "cepUrl": "https://www.banxico.org.mx/cep/go?i=90734&s=20250401&d=...",
      "validationId": "f4ebe9af-6c93-4218-8dcb-74cb7456f3cd",
      "status": "PENDING",
      "createdAt": "2025-08-19 13:03:36.732586-06:00"
    }
  }
}

Webhook & Completed Payload

After approximately 90 seconds (average for most banks), the CEP webhook will deliver the verified identity information. You can also poll the transaction endpoint manually to get updated metadata.

CEP Webhook Payload Completed
{
  "client_id": "09b1c156-73c7-62e1-9a3e-bf705f8f3cbe",
  "payload": {
    "id_msg": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "msg_name": "CEP",
    "msg_date": "2025-08-15",
    "body": {
      "id": "1eb4b5ac-71f6-4203-aded-4fcb7fd21637",
      "tracking_key": "20250815XXXXXX123456789",
      "external_reference": "1234567",
      "payment_concept": "Validacion de cuenta",
      "beneficiary_account": "734180000069183455",
      "beneficiary_name": "Daniela Paola Santelices Chavez",
      "beneficiary_rfc": "SACD900815XXX",
      "status": "COMPLETED",
      "processed_at": "2025-08-15 16:42:39.327313-06:00"
    }
  },
  "webhook_type": "CEP"
}
Transaction Response Completed (200 OK)
{
  "id": "1eb4b5ac-71f6-4203-aded-4fcb7fd21637",
  "bankId": "14b402f6-5dd1-4cd8-ac54-d12c5647d137",
  "clientId": "09b1c156-73c7-62e1-9a3e-bf705f8f3cbe",
  "externalReference": "1234567",
  "trackingId": "20250820FINCHXXXXQ6RPX4",
  "description": "Validacion de cuenta",
  "amount": "0.01",
  "currency": "MXN",
  "category": "DEBIT_TRANS",
  "subCategory": "SPEI_DEBIT",
  "transactionStatus": "LIQUIDATED",
  "audit": {
    "createdAt": "2025-01-01 00:00:00.000000-00:00",
    "updatedAt": "2025-01-01 00:00:00.000000-00:00"
  },
  "sourceInstrument": {
    "id": "UUID_4",
    "instrumentAlias": "InternalAccount",
    "instrumentStatus": "ACTIVE",
    "instrumentDetail": {
      "accountNumber": "ACCOUNT_001",
      "clabeNumber": "CLABE_001",
      "holderName": "ANCV"
    },
    "rfc": "ND"
  },
  "destinationInstrument": {
    "id": "UUID_6",
    "instrumentAlias": "CLABE",
    "instrumentDetail": {
      "accountNumber": "ACCOUNT_002",
      "clabeNumber": "734180000069183455",
      "holderName": "Daniela Paola Santelices Chavez"
    },
    "rfc": "SACD900815XXX"
  }
}

CEP Status Lifecycle

INITIALIZED
Transient initial state right after creation. Flips to PENDING in seconds.
PENDING
Waiting for CEP retrieval and confirmation from BANXICO.
DELAYED
CEP is taking longer than expected. Background retries continue.
COMPLETED
/
FAILED
CEP available and identity validated, or permanently failed after retries.
Status Description
INITIALIZED Transient initial state right after creation. Typically flips to PENDING within seconds.
PENDING Waiting for CEP retrieval and confirmation from BANXICO.
DELAYED CEP is taking longer than expected. Background retries continue automatically.
COMPLETED CEP available and validated. Beneficiary identity information is ready.
FAILED CEP unavailable or permanently failed after all retry attempts.
Note: Treat INITIALIZED the same as PENDING in your client logic and UI. Do not build distinct flows based on the transient INITIALIZED state.

Delivery & Retry Policy

Total attempts: 17 over approximately 3 hours 3 minutes.

Phase 1 Attempts 13

Every 90 seconds. Status remains PENDING.

Phase 2 Attempts 46

Every 5 minutes. Status turns to DELAYED.

Phase 3 Attempts 717

Every 15 minutes. Transitions to FAILED at attempt 17.

# Delay Elapsed Status
1 0:00 0:00 PENDING
2 1:30 1:30 PENDING
3 1:30 3:00 PENDING
4 5:00 8:00 DELAYED
5-6 5:00 13:00 - 18:00 DELAYED
7-16 15:00 33:00 - 2:48:00 DELAYED
17 15:00 3:03:00 FAILED

Error Codes

Code HTTP Description
invalid_clabe 400 The destination CLABE is invalid, unreachable, or not a debit account.
invalid_description 400 Description contains invalid characters or exceeds 40 characters.
invalid_external_reference 400 External reference exceeds 7 digits or contains non-numeric characters.
duplicate_idempotency_key 409 A penny validation with this idempotency key already exists.
client_not_found 404 The provided client_id does not exist or is inactive.
insufficient_funds 400 Your account balance is insufficient for the $0.01 MXN penny transaction.
internal_server_error 500 An internal server error occurred.

Idempotency Tip

Always include the X-Idempotency-Key header with a unique value (e.g. a UUID) for every penny validation request. This allows you to safely retry failed requests without creating duplicate transactions. If a duplicate key is detected, a 409 Conflict will be returned with the original transaction data.

Possible Errors

Standard HTTP status codes are used to indicate the success or failure of API requests.

Code Description
400 Bad Request. Invalid data or malformed payload. Check the error response for details.
401 Unauthorized. Missing or invalid Bearer token. Verify your API credentials.
422 Unprocessable Entity. A validation error occurred on specific fields.
500 Internal Server Error. Something went wrong on our end.

Validación de Cuentas BancariasBank Account Validation

Antes de enviar un pago, verifica que la cuenta destino es real, activa y alcanzable. fluX One envía un micro-depósito (centavos) a la cuenta para confirmar su existencia. Esto reduce drásticamente los rechazos y errores.Before sending a payment, verify that the destination account is real, active, and reachable. fluX One sends a micro-deposit (pennies) to the account to confirm its existence. This drastically reduces rejections and errors.

95%
Reducción de RechazosRejection Reduction
< 15s
Tiempo de ValidaciónValidation Time
$0.01
Monto del Micro-depósitoMicro-deposit Amount
  • Verifica la titularidad antes de dispersar grandes montos.Verify ownership before disbursing large amounts.
  • Reduce costos operativos al eliminar transferencias fallidas.Reduce operational costs by eliminating failed transfers.
  • Compatible con cuentas CLABE de cualquier banco mexicano.Compatible with CLABE accounts from any Mexican bank.
  • Respuesta inmediata: sabes si la cuenta es válida antes de comprometer fondos.Immediate response: know if the account is valid before committing funds.

Webhooks México

Webhooks allow your application to receive real-time notifications when events occur in your fluX account. Instead of polling the API, fluX pushes event data to your server as it happens keeping your system in sync with minimal latency.

Postman Collection Webhooks

v1

Download the Postman collection with webhook event simulations for testing your handler.

Descargar ColecciónDownload Collection

How Webhooks Work

1. Configuration

Listening URL: You must provide a public HTTPS URL for your webhook endpoint.

2. Retries

Retries: If your server responds with a code other than 201 Created, fluX will retry delivery 2 more times at 5-second intervals.

3. Security

Security: Every POST includes an X-Secret-key header to validate the authenticity of the webhook.

Cliente Client Tu Servidor Your Server
fluX Event Engine
1
POST /api/v1/partners/webhooks

Registras tu URL HTTPS de webhook especificando los tipos de eventos (ej. PAYIN) y una clave secreta a través de la API.

Register your HTTPS endpoint with the event type (PAYIN) and a secret key via the API.

Evento de Pago Recibido (SPEI) Payment Event Triggered (SPEI) EVENT

Se recibe un pago SPEI entrante en una de las cuentas CLABE vinculadas a tus clientes en la plataforma de fluX.

An incoming SPEI payment is received into a beneficiary account linked to your client.

2
3
POST /your-webhook-url

fluX envía una petición HTTP POST a tu servidor con el payload del evento y la cabecera de autenticación X-Secret-Key.

fluX sends an HTTP POST with the transaction payload and X-Secret-Key header to your URL.

Aceptar o Rechazar Accept or Reject 201 / 400

Tu servidor responde 201 Created para aceptar el pago. Si respondes 400, fluX reversa (reembolsa) el SPEI automáticamente.

Return 201 Created to accept. Return 400 to reject this triggers an automatic reversal (refund) of the transaction.

4

Available Events

Event Description
PAYIN Incoming money reception (SPEI Credit). Triggered when funds are received into a beneficiary account linked to your client.

Register Webhook

POST /api/v1/partners/webhooks/register Register your HTTPS endpoint

Request Headers

Header Value
Authorization Bearer <ACCESS_TOKEN>
Content-Type application/json
Accept application/json

Body Parameters

Field Type Req. Description
client_id string Yes Your unique client identifier. Provided during onboarding.
url string Yes Your public HTTPS endpoint where fluX will POST webhook events.
event string Yes The event type to subscribe to. Currently supported: "PAYIN".
secret string Yes A secret string used for signature validation. fluX will send this in the X-Secret-key header.
Code Example
curl -i -X POST \
  https://flux.praxisglobe.com/api/v1/partners/webhooks/register \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer <ACCESS_TOKEN>' \
  -d '{
    "client_id": "834f8a44-245f-460d-83ed-f731c38e967a",
    "url": "https://your-domain.com/webhooks/receptor",
    "event": "PAYIN",
    "secret": "your_secret_for_signature_validation"
  }'
const axios = require('axios');

axios.post('https://flux.praxisglobe.com/api/v1/partners/webhooks/register', {
  client_id: '834f8a44-245f-460d-83ed-f731c38e967a',
  url: 'https://your-domain.com/webhooks/receptor',
  event: 'PAYIN',
  secret: 'your_secret_for_signature_validation'
}, {
  headers: {
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'Authorization': 'Bearer <ACCESS_TOKEN>'
  }
})
.then(res => console.log(res.data))
.catch(err => console.error(err));
import requests

payload = {
  "client_id": "834f8a44-245f-460d-83ed-f731c38e967a",
  "url": "https://your-domain.com/webhooks/receptor",
  "event": "PAYIN",
  "secret": "your_secret_for_signature_validation"
}
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer <ACCESS_TOKEN>'
}

res = requests.post('https://flux.praxisglobe.com/api/v1/partners/webhooks/register', json=payload, headers=headers)
print(res.json())
import org.springframework.http.*;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;

RestTemplate restTemplate = new RestTemplate();
String url = "https://flux.praxisglobe.com/api/v1/partners/webhooks/register";

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "Bearer <ACCESS_TOKEN>");

Map<String, Object> body = new HashMap<>();
body.put("client_id", "834f8a44-245f-460d-83ed-f731c38e967a");
body.put("url", "https://your-domain.com/webhooks/receptor");
body.put("event", "PAYIN");
body.put("secret", "your_secret_for_signature_validation");

HttpEntity<Map> entity = new HttpEntity<>(body, headers);
ResponseEntity<String> res = restTemplate.postForEntity(url, entity, String.class);
System.out.println(res.getBody());

Update Webhook

PUT /api/v1/partners/webhooks/{webhook_id} Update an existing webhook registration

Update the URL, secret, or status of an existing webhook registration.

Body Parameters

Field Type Req. Description
url string No New HTTPS URL for receiving webhook events.
secret string No New secret for signature validation.
status string No Webhook status. Set to 'inactive' to pause delivery, or 'active' to resume.
cURL Example
curl -i -X PUT \
  https://flux.praxisglobe.com/api/v1/partners/webhooks/<WEBHOOK_UUID> \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <ACCESS_TOKEN>' \
  -d '{
    "url": "https://new-url.com/webhook",
    "secret": "your_new_secret",
    "status": "inactive"
  }'

PAYIN Event Payload & Delivery

When a SPEI credit is received, fluX sends the following JSON payload to your registered webhook URL via an HTTP POST request. The X-Secret-key header is included for validation.

PAYIN Payload (application/json)
{
  "id": "0196da9a-8947-703e-9a3b-bf8c7d9f6059",
  "beneficiary_account": "734180123045603216",
  "beneficiary_name": "John Smith",
  "beneficiary_rfc": "XYZ123456789",
  "payer_account": "137180210044008609",
  "payer_name": "Juan Perez",
  "payer_rfc": "XYZ987654321",
  "payer_institution": "40002",
  "amount": "123.00",
  "transaction_date": "2025-04-02 10:14:05",
  "tracking_key": "50118609TBRNZ00I07219647",
  "payment_concept": "Payment for invoice 4567",
  "numeric_reference": "2504021",
  "sub_category": "SPEI_CREDIT",
  "registered_at": "2025-04-02T10:14:05.915184-06:00",
  "owner_id": "24f1e5d5-4045-4b1a-a0c4-5e6c6b1d44ef"
}
HTTP POST Request Delivery
curl -X POST https://your-domain.com/webhooks/receptor \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'X-Secret-key: <YOUR_WEBHOOK_SECRET>' \
  -d '{
    "id": "0196da9a-8947-703e-9a3b-bf8c7d9f6059",
    "beneficiary_account": "734180123045603216",
    "beneficiary_name": "John Smith",
    "beneficiary_rfc": "XYZ123456789",
    "payer_account": "137180210044008609",
    "payer_name": "Juan Perez",
    "payer_rfc": "XYZ987654321",
    "payer_institution": "40002",
    "amount": "123.00",
    "transaction_date": "2025-04-02 10:14:05",
    "tracking_key": "50118609TBRNZ00I07219647",
    "payment_concept": "Payment for invoice 4567",
    "numeric_reference": "2504021",
    "sub_category": "SPEI_CREDIT",
    "registered_at": "2025-04-02T10:14:05.915184-06:00",
    "owner_id": "24f1e5d5-4045-4b1a-a0c4-5e6c6b1d44ef"
  }'

Expected Responses & Security

201 Transaction Accepted

Return HTTP/1.1 201 Created to confirm that the incoming transaction was received and accepted by your system.

400 Transaction Rejected

Return HTTP/1.1 400 Bad Request to reject the transaction. This triggers an automatic reversal (refund) of the funds back to the payer.

Important: If you reject a transaction by returning 400, the funds will be automatically reversed (refunded) to the original payer. Make sure your rejection logic is intentional.

Security X-Secret-key Validation

Every webhook delivery includes an X-Secret-key header containing the secret you provided during registration. Always compare this header with your stored secret before processing the event.

1. Extract the X-Secret-key header from the incoming request.
2. Compare it with the secret you registered during webhook setup.
3. If they match, process the event. If not, return 401 Unauthorized.
Node.js (Express) Webhook Handler
const express = require('express');
const app = express();
app.use(express.json());

const WEBHOOK_SECRET = process.env.FLUX_WEBHOOK_SECRET;

app.post('/webhooks/receptor', (req, res) => {
  // 1. Validate X-Secret-key header
  const secretKey = req.headers['x-secret-key'];

  if (secretKey !== WEBHOOK_SECRET) {
    console.error('Invalid secret key');
    return res.status(401).json({ error: 'Unauthorized' });
  }

  // 2. Process the PAYIN event
  const payload = req.body;
  console.log(`Received PAYIN: ${payload.id}`);
  console.log(`Amount: ${payload.amount} MXN`);
  console.log(`Payer: ${payload.payer_name}`);
  console.log(`Tracking Key: ${payload.tracking_key}`);

  // 3. Save to your database
  // await db.transactions.create(payload);

  // 4. Respond with 201 to accept the transaction
  res.status(201).json({ received: true });
});

app.listen(3000, () => {
  console.log('Webhook handler listening on port 3000');
});

Retry Policy & Best Practices

If your endpoint does not return a 201 Created status, fluX will retry the delivery up to 2 more times at 5-second intervals.

Attempt Delay Description
1st Immediate Initial delivery attempt.
2nd 5 seconds First retry after initial failure.
3rd 5 seconds Final retry attempt. After this, the event delivery is marked as failed.

Best Practices

Respond with 201

Return a 201 Created status. Returning 400 will trigger an automatic reversal of the transaction.

Validate X-Secret-key

Always compare the X-Secret-key header with your registered secret before processing.

Handle Duplicates

Use the transaction ID to deduplicate events. The same event may be delivered more than once during retries.

Use HTTPS

Your webhook endpoint must use HTTPS. HTTP endpoints will be rejected during registration.

Possible Errors

Code Description
400 Bad Request. Validation error in the webhook payload.
401 Unauthorized. Missing or invalid Bearer token.
404 Not Found / Conflict. The webhook ID does not exist, or the URL is already registered.
500 Internal Server Error. Occurred while creating or updating the webhook.

Notificaciones en Tiempo RealReal-Time Notifications

Tu sistema recibe alertas automáticas cada vez que ocurre un evento importante: un pago se completa, una cobranza se acredita o una operación falla. Sin necesidad de consultar manualmente.Your system receives automatic alerts every time an important event occurs: a payment completes, a collection is credited, or an operation fails. No need to check manually.

EventoEvent
Pago completadoPayment completed
NotificaciónNotification
InstantáneaInstant
Tu SistemaYour System
ActúaTakes action
  • Reconciliación automática sin intervención humana.Automatic reconciliation without human intervention.
  • Reintentos automáticos si tu servidor no responde (hasta 3 intentos).Automatic retries if your server doesn't respond (up to 3 attempts).
  • Seguridad: cada notificación incluye una firma criptográfica para validar su autenticidad.Security: each notification includes a cryptographic signature to validate its authenticity.
  • Soporte para múltiples tipos de evento: pagos, cobros, validaciones, QR.Support for multiple event types: payments, collections, validations, QR.

Getting Started

The FluX Colombia API unlocks seamless access to the Bre-B instant payment system. Use a single, modern RESTful interface to process real-time payouts in COP, deploy interoperable QR codes, and receive event notificationsáll backed by an immutable blockchain journal layer.

Base URL

https://flux.praxisglobe.com/api/v1

Protocol

HTTPS / TLS 1.3

Format

JSON

Platform Capabilities

Everything you need to move money securely in Colombia across the national instant payment rails.

Payouts (Bre-B)

Send instant payouts to any Colombian bank account via the Bre-B system. Near real-time settlement.

QR Codes

Generate static or dynamic QR codes to accept instant payments from customers using compatible banking apps.

Webhooks

Receive real-time notifications about the outcome of payments (completed or failed) directly to your server.

Blockchain Journal

Every transaction generates a verifiable hash on FluX's distributed ledger for unparalleled auditability.

Architectural Principles

Bre-B Instant Payments

Direct integration with Banco de la República's clearing system for immediate Colombian funds transfer.

Secure by Default

TLS encryption, JWT authentication, and idempotency keys protect every API request.

RESTful JSON API

Standard HTTP methods, predictable resource URLs, and native JSON payloads.

Idempotent Operations

Safely retry requests in case of network failures without risking double-charges.

Webhook-First Eventing

Get real-time push notifications when payment status changes, backed by an automatic retry policy.

Blockchain Journal

A distributed ledger layer ensures the integrity and irrefutability of the entire payment footprint.

Colombia Quickstart

Complete your first Bre-B API request in under 10 minutes.

1

Get Your Credentials

During onboarding, FluX provides your access credentials. These are unique to your account for the Colombian environment.

2

Authenticate

Obtain a JWT token by sending your credentials to the login endpoint. Include this Bearer token in all subsequent requests.

curl -X POST https://flux.praxisglobe.com/api/v1/partners/login \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "user@example.com",
    "password": "password123"
  }'
3

Make Your First API Call

Use your JWT token in the Authorization header to call any endpoint. Here's an example creating a standard Bre-B payout:

curl -X POST \
  https://flux.praxisglobe.com/api/v1/payments \
  -H "Authorization: Bearer <YOUR_JWT>" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: <UUID_V5>" \
  -d '{
    "amount": { "value": 50000, "currency": "COP" },
    "destination_account": {
      "account_number": "12345678901",
      "account_type": "SAVINGS",
      "holder_name": "Nombre Beneficiario",
      "holder_document": { "type": "CC", "number": "10203040" },
      "bank_code": "001"
    },
    "description": "Pago Bre-B",
    "external_reference": "ref-001"
  }'
4

Handle the Response

All accepted requests return a 202 status indicating the payment is PROCESSING over Bre-B. The response includes a blockchain journal hash.

{
  "id": "pay_1a2b3c4d5e6f",
  "status": "PROCESSING",
  "created_at": "2025-10-08T14:30:00Z",
  "transaction_journal_hash": "0xabcde12345..."
}

Colombia Conventions

Convention Details
Base URLhttps://flux.praxisglobe.com/api/v1
AuthenticationBearer JWT token in the Authorization header
IdempotencyUUID strings via the Idempotency-Key header on state-changing requests like POST.
Amounts & CurrenciesCOP amounts are generally required as integers, e.g., 50000. currency field must be "COP".
Destination AccountsCombined from account_number, account_type, and bank_code.
Bank IDsStandardized 3-digit strings (e.g. "001" for Bancolombia)
IDsUUID v4 or prefixed unique strings (e.g., pay_123456)
DatesISO 8601 formatting (e.g., 2025-10-08T14:30:00Z)

Environments

Production
LIVE

Real transaction execution over the Bre-B system. Subject to standard API rate limits.

https://flux.praxisglobe.com/api/v1

fluX One en ColombiafluX One in Colombia

fluX One conecta tu negocio con Bre-B, el sistema de pagos instantáneos del Banco de la República de Colombia. Procesa pagos en pesos colombianos (COP) con liquidación en tiempo real, despliega QR interoperables y recibe notificaciones automáticas — todo con la misma integración que ya tienes para México.fluX One connects your business with Bre-B, the instant payment system from Colombia's Banco de la República. Process payments in Colombian pesos (COP) with real-time settlement, deploy interoperable QR codes, and receive automatic notifications — all with the same integration you already have for Mexico.

COP
MonedaCurrency
Bre-B
Riel de PagoPayment Rail
InstantáneoInstant
LiquidaciónSettlement
Dispersiones Bre-BBre-B Payouts
Envía pagos a cuentas de ahorro o corrientes en cualquier banco colombiano.Send payments to savings or checking accounts at any Colombian bank.
QR InteroperablesInteroperable QR
Genera códigos QR estándar EMVCo para cobrar desde cualquier app bancaria colombiana.Generate EMVCo standard QR codes to collect from any Colombian banking app.
Llaves ReferenciadasReferenced Keys
Alias como @FLX_TUNEGOCIO para que tus clientes te paguen sin memorizar cuentas bancarias.Aliases like @FLX_YOURBUSINESS so your customers pay you without memorizing bank accounts.
WebhooksWebhooks
Notificaciones automáticas cuando un pago se completa o falla. Misma lógica que México.Automatic notifications when a payment completes or fails. Same logic as Mexico.

Payouts

Send payments to any Colombian bank account via Bre-B (Banco de la República's instant payment system). Payments are processed in real time and each transaction is recorded on FluX's immutable Transaction Journal (blockchain).

Postman Collection CO Payouts

v1

Download the Postman collection with Payouts endpoints for Colombia.

Descargar ColecciónDownload Collection

Use Cases

Loan Disbursements

Disburse approved loans directly to borrower accounts via Bre-B.

Payroll

Process payroll payments to employee SAVINGS/CHECKING accounts.

Vendor Payments

Pay suppliers and vendors with real-time settlement.

Refunds

Issue refunds back to customer accounts in real time.

Create a Payment

Initiate an instant payment via Bre-B to any Colombian bank account.

POST https://flux.praxisglobe.com/api/v1/payments

Request Parameters

Field Type Description
amount.value Req.numberAmount in COP (integer, e.g. 50000).
amount.currency Req.stringISO 4217 currency code. Must be "COP".
destination_account.account_number Req.stringBeneficiary bank account number.
destination_account.account_type Req.stringAccount type: "SAVINGS" or "CHECKING".
destination_account.holder_name Req.stringFull name of the account holder.
destination_account.holder_document.type Req.stringDocument type: "CC", "CE", "NIT", "PP".
destination_account.holder_document.number Req.stringDocument number of the account holder.
destination_account.bank_code Req.stringBank code (e.g. 001 for Bancolombia).
description Req.stringPayment description/concept.
external_reference Req.stringYour unique reference for this payment.
cURL Example
curl -i -X POST \
  https://flux.praxisglobe.com/api/v1/payments \
  -H 'Authorization: Bearer <ACCESS_TOKEN>' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: unique-request-id-12345' \
  -d '{
    "amount": { "value": 50000, "currency": "COP" },
    "destination_account": {
      "account_number": "12345678901",
      "account_type": "SAVINGS",
      "holder_name": "Nombre del Beneficiario",
      "holder_document": { "type": "CC", "number": "1020304050" },
      "bank_code": "001"
    },
    "description": "Pago de crédito #A-54321",
    "external_reference": "ref_cliente_xyz_001"
  }'

Response

202 Accepted application/json
{
  "id": "pay_1a2b3c4d5e6f",
  "status": "PROCESSING",
  "created_at": "2025-10-08T14:30:00Z",
  "transaction_journal_hash": "0xabcde12345..."
}

Get Payment Status

Retrieve the current status and details of an existing payment.

GET https://flux.praxisglobe.com/api/v1/payments/{payment_id}
200 OK application/json
{
  "id": "pay_1a2b3c4d5e6f",
  "status": "COMPLETED",
  "created_at": "2025-10-08T14:30:00Z",
  "completed_at": "2025-10-08T14:30:03Z",
  "amount": { "value": 50000, "currency": "COP" },
  "description": "Pago de crédito #A-54321",
  "external_reference": "ref_cliente_xyz_001",
  "transaction_journal_hash": "0xabcde12345..."
}

Transaction Status Lifecycle

Status Description
PROCESSING Payment accepted, being processed through Bre-B.
COMPLETED Funds successfully delivered to the beneficiary.
FAILED Payment could not be completed. Check error details.

Transaction Journal Blockchain Auditability

Every accepted transaction generates a cryptographic record on FluX's internal permissioned blockchain. The transaction_journal_hash in the response provides an immutable proof of the transaction, ensuring maximum integrity and auditability.

Possible Errors

Code Description
400Bad Request. Invalid data or malformed payload. Check the error response for details.
401Unauthorized. Missing or invalid Bearer token. Verify your API credentials.
422Unprocessable Entity. A validation error occurred on specific fields.
500Internal Server Error. Something went wrong on our end.

Dispersión de Pagos en ColombiaPayouts in Colombia

Envía pagos a cuentas de ahorro o corrientes en cualquier entidad financiera colombiana a través del sistema Bre-B. Liquidación casi inmediata con confirmación automática.Send payments to savings or checking accounts at any Colombian financial institution through the Bre-B system. Near-instant settlement with automatic confirmation.

InstantáneoInstant
LiquidaciónSettlement
COP
MonedaCurrency
TodosAll
Bancos ColombianosColombian Banks

Casos de UsoUse Cases

DesembolsosDisbursements
Desembolsa préstamos aprobados directamente a cuentas colombianas en tiempo real.Disburse approved loans directly to Colombian accounts in real time.
Nómina ColombiaColombia Payroll
Paga a empleados y contratistas en Colombia con la misma integración que usas para México.Pay employees and contractors in Colombia with the same integration you use for Mexico.
ProveedoresSuppliers
Paga a proveedores colombianos con liquidación inmediata vía Bre-B.Pay Colombian suppliers with immediate settlement via Bre-B.
ReembolsosRefunds
Devuelve dinero a clientes colombianos al instante.Return money to Colombian customers instantly.

Collections (Pay-ins)

Accept instant payments in Colombia via Bre-B (Pay-ins). You have two mechanisms to collect money effortlessly from your customers: sharing your Referenced Keys (Llaves Referenciadas) or generating EMVCo standard QR Codes.

1. Referenced Keys (Llaves Referenciadas)

Referenced Keys are aliases registered to your FluX account. Instead of memorizing long account numbers, you simply provide an alias to your customers. When they initiate a transfer via their banking app to your key, FluX will automatically credit your account and send you a webhook notification.

Alphanumeric Key

Must start with @FLX

Ex: @FLX_EMPRESA123

Alias Format

Letters and numbers only after prefix

Ex: @FLXPAYMENTS2025

Receiving the Funds

No API request is needed on your end to "create" a Referenced Key transaction. Once your customer completes the payment, FluX instantly pushes a payment.completed webhook to your server containing the transaction details.

Create a Key

Register a new Referenced Key linked to your Bre-B account via API. This alias can then be shared with payers.

POST https://flux.praxisglobe.com/api/v1/accounts/{account_id}/keys

Request Parameters

FieldTypeDescription
alias Req.stringA friendly name for your Key.
key_config Req.stringConfiguration of the key. Must be 'open_input'.
open_input Req.stringYour personalized key. Must be alphanumeric and always start with '@FLX' (e.g., @FLXMyBusiness123).
cURL Example
curl -i -X POST \
  https://flux.praxisglobe.com/api/v1/accounts/acc_12345/keys \
  -H 'Authorization: Bearer <ACCESS_TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{
  "alias": "My first FluX Key",
  "key_config": "open_input",
  "open_input": "@FLXMyBusiness123"
}'

Response

200 OK application/json
{
  "id": "key_TQjvIO8UFf1bv81",
  "key_value": "@FLXMyBusiness123",
  "source_id": "acc_12345",
  "alias": "My first FluX Key",
  "connectivity": {
    "status": "processing",
    "description": ""
  },
  "previous_action": {
    "action_requested": "create",
    "action_code": "",
    "action_description": ""
  },
  "created_at": "2025-11-28T21:32:08Z",
  "updated_at": "2025-11-28T21:32:08Z"
}

2. QR Codes

Generate EMVCo standard QR codes for in-person or online checkout flows. FluX supports both static (reusable) and dynamic (single-use) QR codes.

Postman Collection CO QR Codes

v1

Download the Postman collection with QR Code generation endpoints.

Descargar ColecciónDownload Collection

Static QR

Reusable QR code linked to an account. Optionally includes a fixed amount. Ideal for point-of-sale or recurring collections.

Dynamic QR

Single-use QR tied to a specific transaction amount. Expires after payment. Ideal for e-commerce checkouts and precise billing.

Generate Static QR

Generates a reusable QR linking directly to your Referenced Key.

POST https://flux.praxisglobe.com/api/v1/qr/static

Request Parameters

FieldTypeDescription
correlationId Req.stringUUID to identify this QR generation request.
keyString Req.stringAccount key (phone number, email, or alphanumeric string).
keyType Req.string"PHONE_NUMBER", "EMAIL", "ACCOUNT_NUMBER", or "ALPHANUMERIC".
payment.reference Req.stringPayment reference for identification.
payment.currency Req.stringISO 4217 code. Must be "COP".
payment.amountnumberOptional fixed amount. If omitted, payer enters amount.
qrCodeData.imgWidthnumberWidth of the generated QR image in pixels (default 250).
cURL Example
curl -i -X POST \
  https://flux.praxisglobe.com/api/v1/qr/static \
  -H 'Authorization: Bearer <ACCESS_TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{
  "correlationId": "123e4567-e89b-12d3-a456-426614174000",
  "keyString": "3001234567",
  "keyType": "PHONE_NUMBER",
  "payment": {
    "reference": "orden-9876",
    "currency": "COP",
    "amount": 25075.00
  },
  "qrCodeData": { "imgWidth": 250 }
}'

Response

200 OK application/json
{
  "correlationId": "123e4567-e89b-12d3-a456-426614174000",
  "qrCode": {
    "emv": "000201010212...",
    "imgContent": "base64string=="
  }
}

Generate Dynamic QR

Generate a single-use QR code that requests an exact amount.

POST https://flux.praxisglobe.com/api/v1/qr/dynamic

Request Parameters

FieldTypeDescription
correlationId Req.stringUUID to identify this QR generation request.
payment.currency Req.stringISO 4217 code. Must be "COP".
payment.amount Req.numberExact amount for this single-use QR.
qrCodeData.imgWidthnumberWidth of the generated QR image in pixels.
Request Body
{
  "correlationId": "unique-dynamic-id-654321",
  "payment": {
    "currency": "COP",
    "amount": 5000.00
  },
  "qrCodeData": { "imgWidth": 250 }
}

Response

200 OK application/json
{
  "correlationId": "unique-dynamic-id-654321",
  "payment": { "status": "ACTIVE" },
  "qrCode": {
    "emv": "000201010212...",
    "imgContent": "base64string=="
  }
}

Query QR Code Status

Retrieve the payment status associated with a QR code. Useful if webhooks are delayed.

GET https://flux.praxisglobe.com/api/v1/qr/{correlationId}

Response

200 OK application/json
{
  "correlationId": "3a7d5245-1fed-4eba-af0c-5f150ef18a38",
  "creditor": {
    "name": "JUAN PEREZ",
    "participantId": "1",
    "nit": "191680120"
  },
  "payment": {
    "transactionAmount": 5000.00,
    "transactionCurrency": "COP"
  },
  "qrCodeType": "DYNAMIC",
  "status": "SUCCESS"
}

Displaying the QR Image

The imgContent field contains the QR code as a base64-encoded image. You can render it directly in an HTML <img> tag using src="data:image/png;base64,...".

Possible Errors

Code Description
400Bad Request. Invalid data or malformed payload. Check the error response for details.
401Unauthorized. Missing or invalid Bearer token. Verify your API credentials.
422Unprocessable Entity. A validation error occurred on specific fields.
500Internal Server Error. Something went wrong on our end.

Cobros en ColombiaCollections in Colombia

Recibe pagos de clientes colombianos a través de dos mecanismos modernos y sin fricción: Llaves Referenciadas (alias como @FLX_TUNEGOCIO) y Códigos QR interoperables con estándar EMVCo.Receive payments from Colombian customers through two modern, frictionless mechanisms: Referenced Keys (aliases like @FLX_YOURBUSINESS) and interoperable QR Codes with EMVCo standard.

Llaves ReferenciadasReferenced Keys
Un alias fácil de recordar (ejemplo: @FLX_EMPRESA123) que tus clientes escriben en su app bancaria para transferirte. Sin CLABE, sin errores.An easy-to-remember alias (e.g.: @FLX_COMPANY123) that your customers type in their banking app to transfer to you. No CLABE, no errors.
QR EstáticosStatic QR
Un código QR fijo para tu negocio. El cliente lo escanea, ingresa el monto y paga. Ideal para puntos de venta físicos.A fixed QR code for your business. The customer scans it, enters the amount, and pays. Ideal for physical points of sale.
QR DinámicosDynamic QR
Un QR único por transacción con monto y referencia pre-cargados. Perfecto para e-commerce y facturación.A unique QR per transaction with pre-loaded amount and reference. Perfect for e-commerce and invoicing.
Notificación AutomáticaAutomatic Notification
Cuando tu cliente paga, fluX te notifica al instante con todos los detalles para reconciliación automática.When your customer pays, fluX notifies you instantly with all details for automatic reconciliation.

Webhooks

Receive real-time notifications when payment events occur in your FluX Colombia account. FluX pushes event data to your server when payments complete or fail keeping your system in sync.

Postman Collection CO Webhooks

v1

Simulate webhook events for testing your Colombia handler.

Descargar ColecciónDownload Collection

How Webhooks Work

Configuration

  • 1. Listening URL: Provide a public HTTPS endpoint for receiving events.
  • 2. Retries: If your server responds with a non-2xx code, FluX retries 2 more times at 5-second intervals.
  • 3. Security: Every POST includes an X-Secret-key header for authenticity validation.
1

Register Webhook

Register your HTTPS endpoint with the event type and secret via the API.

2

Payment Event Occurs

A payment completes or fails in the Bre-B network.

3

FluX Sends Notification

FluX POSTs the event payload with X-Secret-key header to your URL.

4

Your Server Responds

Return 200 OK to confirm receipt. Non-2xx triggers retries.

Available Events

Event Description
payment.completedA payment has been completed successfully. Funds were delivered to the beneficiary.
payment.failedA payment has failed. The payload includes the failure reason.

Register Webhook

Register your endpoint to start receiving payment event notifications.

POST https://flux.praxisglobe.com/api/v1/partners/webhooks/register

Request Parameters

FieldTypeDescription
client_id Req.stringYour unique client identifier.
url Req.stringYour public HTTPS endpoint for receiving events.
event Req.stringEvent to subscribe: "payment.completed", "payment.failed".
secret Req.stringSecret for X-Secret-key header validation.

Update Webhook

Update the URL, secret, or status of an existing webhook.

PUT https://flux.praxisglobe.com/api/v1/partners/webhooks/{webhook_id}

Request Parameters

FieldTypeDescription
urlstringNew HTTPS URL for receiving webhook events.
secretstringNew secret for validation.
statusstring"active" or "inactive".

Event Payloads

FluX sends the following JSON payloads to your webhook URL. The X-Secret-key header is included for validation.

payment.completed

payment.completed payload
{
  "id": "pay_1a2b3c4d5e6f",
  "event": "payment.completed",
  "status": "COMPLETED",
  "created_at": "2025-10-08T14:30:00Z",
  "completed_at": "2025-10-08T14:30:03Z",
  "amount": { "value": 50000, "currency": "COP" },
  "destination_account": {
    "account_number": "12345678901",
    "bank_code": "001",
    "holder_name": "Nombre del Beneficiario"
  },
  "description": "Pago de crédito #A-54321",
  "external_reference": "ref_cliente_xyz_001",
  "transaction_journal_hash": "0xabcde12345..."
}

payment.failed

payment.failed payload
{
  "id": "pay_9z8y7x6w5v4u",
  "event": "payment.failed",
  "status": "FAILED",
  "created_at": "2025-10-08T14:30:00Z",
  "failed_at": "2025-10-08T14:30:05Z",
  "amount": { "value": 50000, "currency": "COP" },
  "destination_account": {
    "account_number": "12345678901",
    "bank_code": "001",
    "holder_name": "Nombre del Beneficiario"
  },
  "description": "Pago de crédito #A-54321",
  "external_reference": "ref_cliente_xyz_001",
  "failure_reason": "ACCOUNT_NOT_FOUND"
}

Security X-Secret-key Validation

Secret Key Verification

Every delivery includes an X-Secret-key header. Compare it with your registered secret before processing.

webhook-handler-co.js (Node.js)
const express = require('express');
const app = express();
app.use(express.json());

const WEBHOOK_SECRET = process.env.FLUX_WEBHOOK_SECRET;

app.post('/webhooks/flux-co', (req, res) => {
  // 1. Validate X-Secret-key header
  const secretKey = req.headers['x-secret-key'];
  if (secretKey !== WEBHOOK_SECRET) {
    console.error('Invalid secret key');
    return res.status(401).json({ error: 'Unauthorized' });
  }

  // 2. Process the event
  const { event, id, status, external_reference } = req.body;

  switch (event) {
    case 'payment.completed':
      console.log(`S& Payment ${id} completed - ref: ${external_reference}`);
      // Update your database, notify customer, etc.
      break;

    case 'payment.failed':
      const { failure_reason } = req.body;
      console.log(`R Payment ${id} failed: ${failure_reason}`);
      // Handle retries or notify operations team
      break;

    default:
      console.log(`Unknown event: ${event}`);
  }

  // 3. Acknowledge receipt
  res.status(200).json({ received: true });
});

app.listen(3000, () => {
  console.log('CO Webhook handler listening on port 3000');
});

Retry Policy

If your endpoint doesn't return a 2xx status, FluX retries up to 2 more times at 5-second intervals.

Attempt Delay Description
1stImmediateInitial delivery attempt.
2nd5 secondsFirst retry after failure.
3rd5 secondsFinal retry. After this, delivery is marked as failed.

Best Practices

Respond with 200

Return 200 OK to acknowledge receipt. Non-2xx responses trigger retries.

Validate X-Secret-key

Always compare the X-Secret-key header with your registered secret.

Handle Duplicates

Use the payment ID and event type to deduplicate. Same event may arrive multiple times.

Use HTTPS

Your webhook URL must use HTTPS. HTTP endpoints are rejected.

Idempotent Processing

Processing the same event twice should have no side effects.

Monitor Failures

Implement alerting for persistent webhook delivery failures.

Possible Errors

Code Description
400Bad Request. Validation error in the webhook payload.
401Unauthorized. Missing or invalid Bearer token.
404Not Found / Conflict. The webhook ID does not exist, or the URL is already registered.
500Internal Server Error. Occurred while creating or updating the webhook.

Notificaciones ColombiaColombia Notifications

El mismo sistema de notificaciones instantáneas de México, adaptado a los eventos de Bre-B en Colombia. Tu sistema se mantiene sincronizado con cada operación sin consultar manualmente.The same instant notification system from Mexico, adapted to Bre-B events in Colombia. Your system stays synchronized with every operation without manual checking.

  • Notificación instantánea cuando un pago Bre-B se completa o falla.Instant notification when a Bre-B payment completes or fails.
  • Alertas cuando un cliente paga vía QR o Llave Referenciada.Alerts when a customer pays via QR or Referenced Key.
  • Reintentos automáticos con firma de seguridad.Automatic retries with security signature.
  • Mismo formato y estructura que México — un solo código para ambos países.Same format and structure as Mexico — one codebase for both countries.

¿Necesitas operar en ambos países?Need to operate in both countries?

Con una sola integración accedes a SPEI (México) y Bre-B (Colombia). Mismo código, misma lógica, dos mercados.With a single integration you access SPEI (Mexico) and Bre-B (Colombia). Same code, same logic, two markets.

Hablar con VentasTalk to Sales
POST /partners/login

Autenticar Sesión

Authenticate Session

Intercambia tus credenciales de cliente corporativo por un token JWT temporal para acceder a todos los endpoints protegidos.

Exchange your corporate client credentials for a temporary JWT token to access all protected endpoints.

Cuerpo de la Solicitud (Body Params)

Request Body Parameters

email string Required
El correo electrónico de tu cuenta corporativa registrado.
The email address registered for your corporate account.
Example: "user@example.com"
password string Required
La contraseña asociada a tu cuenta corporativa.
The password associated with your corporate account.
Example: "password123"

Llamada de Ejemplo

Sample Request

curl -X POST https://flux.praxisglobe.com/api/v1/partners/login \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "user@example.com",
    "password": "password123"
  }'

Respuesta del Servidor

Response

{
  "token": "eyJhbGciOiJIUzI1NiIsIn...",
  "expires_in": 21600
}
POST /partners/transactions/payouts

Crear Payout (México)

Create Payout (Mexico)

Inicia un pago electrónico inmediato de fondos hacia una cuenta CLABE en México utilizando la red SPEI.

Initiate an immediate electronic payout of funds to a CLABE bank account in Mexico via the SPEI network.

Parámetros del Payload

Payload Parameters

client_id string Required
El identificador único de tu cuenta cliente corporativa.
The unique identifier of your corporate client account.
Example: "cli_992123"
destination_clabe string (18 digits) Required
Clave Bancaria Estandarizada de 18 dígitos del beneficiario.
The standardized 18-digit CLABE account number of the beneficiary.
Example: "734180000069183455"
transaction_request.amount string Required
Monto decimal expresado en cadena de texto (e.g. "1250.00"). Nunca uses enteros centavos.
Decimal amount represented as a string (e.g. "1250.00"). Never send integer cents.
Example: "1250.00"
transaction_request.currency string Required
Moneda local de procesamiento. Debe ser "MXN".
Local currency for processing. Must be "MXN".
Example: "MXN"

Llamada de Ejemplo

Sample Request

curl -X POST https://flux.praxisglobe.com/api/v1/partners/transactions/payouts \
  -H "Authorization: Bearer <YOUR_JWT>" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: <UUID>" \
  -d '{
    "client_id": "cli_992123",
    "source_instrument_id": "inst_8819",
    "destination_clabe": "734180000069183455",
    "transaction_request": {
      "external_reference": "ref_mx_001",
      "description": "Pago Proveedores",
      "amount": "1250.00",
      "currency": "MXN"
    }
  }'

Respuesta del Servidor

Response

{
  "id": "16811ee8-1ef9-4dd4-8d84-9c2df89cf302",
  "trackingId": "20250306FINCHVLIKQ5SKUM",
  "amount": "1250.00",
  "currency": "MXN",
  "transactionStatus": "INITIALIZED"
}
POST /partners/transactions/penny-validations

Penny Validation (México)

Inicia la validación en tiempo real de una cuenta CLABE enviando una micro-transferencia de un centavo y recuperando el CEP firmado.

Initiate the real-time validation of a CLABE bank account by sending a micro-transfer of one penny and retrieving the signed CEP.

Parámetros del Payload

Payload Parameters

destination_clabe string Required
Clave CLABE de 18 dígitos que se desea validar.
The 18-digit CLABE bank account to validate.
Example: "734180000069183455"

Llamada de Ejemplo

Sample Request

curl -X POST https://flux.praxisglobe.com/api/v1/partners/transactions/penny-validations \
  -H "Authorization: Bearer <YOUR_JWT>" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": "cli_992123",
    "destination_clabe": "734180000069183455"
  }'

Respuesta del Servidor

Response

{
  "validation_id": "val_1e2d3c4b5a6f",
  "status": "PENDING",
  "micro_amount": "0.01",
  "currency": "MXN"
}
POST /partners/webhooks

Configurar Webhook (México)

Registra o actualiza la URL de retorno en tu servidor para recibir las notificaciones asíncronas de la red SPEI.

Register or update the callback URL on your server to receive asynchronous notifications from the SPEI network.

Parámetros del Payload

Payload Parameters

url string (url format) Required
La URL pública segura de tu backend que procesará las notificaciones de eventos de SPEI.
The secure public URL of your backend that will process SPEI event notifications.
Example: "https://yourdomain.com/callbacks/flux"

Llamada de Ejemplo

Sample Request

curl -X POST https://flux.praxisglobe.com/api/v1/partners/webhooks \
  -H "Authorization: Bearer <YOUR_JWT>" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://yourdomain.com/callbacks/flux",
    "secret_key": "mysecretkey_generated"
  }'

Respuesta del Servidor

Response

{
  "status": "ACTIVE",
  "webhook_id": "wh_1a2b3c4d5e",
  "url": "https://yourdomain.com/callbacks/flux"
}
POST /payments

Crear Payout (Colombia)

Create Payout (Colombia)

Inicia un pago electrónico inmediato a cualquier banco en Colombia a través del sistema interbancario Bre-B.

Initiate an immediate electronic payment to any bank in Colombia through the Bre-B interbank system.

Parámetros del Payload

Payload Parameters

amount.value integer Required
Monto expresado en centavos de COP (e.g. 50000 para representar $50,000.00 COP).
Amount represented in COP cents (e.g. 50000 for $50,000.00 COP).
Example: 50000
amount.currency string Required
Moneda de procesamiento. Debe ser "COP".
Currency of processing. Must be "COP".
Example: "COP"
destination_account.account_number string Required
Número de cuenta destino del beneficiario en Colombia.
The destination bank account number of the beneficiary in Colombia.
Example: "12345678901"

Llamada de Ejemplo

Sample Request

curl -X POST https://flux.praxisglobe.com/api/v1/payments \
  -H "Authorization: Bearer <YOUR_JWT>" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: <UUID>" \
  -d '{
    "amount": { "value": 50000, "currency": "COP" },
    "destination_account": {
      "account_number": "12345678901",
      "account_type": "SAVINGS",
      "holder_name": "Nombre del Beneficiario",
      "holder_document": { "type": "CC", "number": "1020304050" },
      "bank_code": "001"
    },
    "description": "Pago de prueba",
    "external_reference": "ref_co_001"
  }'

Respuesta del Servidor

Response

{
  "id": "pay_1a2b3c4d5e6f",
  "status": "PROCESSING",
  "created_at": "2025-10-08T14:30:00Z",
  "transaction_journal_hash": "0xabcde12345..."
}
POST /keys

Registrar Llave (Alias Bre-B)

Register Key (Alias Bre-B)

Registra una llave de identificación rápida vinculada a tu cuenta bancaria para permitir cobros inmediatos interbancarios sin compartir datos sensibles.

Register a quick identification key linked to your bank account to allow immediate interbank collections without sharing sensitive data.

Parámetros del Payload

Payload Parameters

key_type string Required
Tipo de la llave alias de recaudo. Valores soportados: PHONE, EMAIL, ALIAS.
Type of the collection alias key. Supported values: PHONE, EMAIL, ALIAS.
Example: "EMAIL"
key_value string Required
El valor específico para la llave alias.
The specific value for the alias key.
Example: "pagos@flux.praxisglobe.com"

Llamada de Ejemplo

Sample Request

curl -X POST https://flux.praxisglobe.com/api/v1/keys \
  -H "Authorization: Bearer <YOUR_JWT>" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "key_type": "EMAIL",
    "key_value": "pagos@flux.praxisglobe.com",
    "account_id": "acc_co_0991223"
  }'

Respuesta del Servidor

Response

{
  "key_id": "key_abc123",
  "status": "REGISTERED",
  "key_value": "pagos@flux.praxisglobe.com"
}
POST /qr-codes

Generar Código QR (Bre-B)

Generate QR Code (Bre-B)

Genera una cadena de datos EMVCo y una imagen QR para permitir a tus clientes escanear y pagar en tiempo real.

Generate an EMVCo data string and QR image to let your clients scan and pay in real time.

Parámetros del Payload

Payload Parameters

amount.value integer Required
Monto a recaudar en centavos de COP (e.g. 100000 para $100,000 COP).
Amount to collect in COP cents (e.g. 100000 for $100,000 COP).
Example: 100000

Llamada de Ejemplo

Sample Request

curl -X POST https://flux.praxisglobe.com/api/v1/qr-codes \
  -H "Authorization: Bearer <YOUR_JWT>" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": { "value": 100000, "currency": "COP" },
    "payment_reference": "factura_9918",
    "expiration_minutes": 30
  }'

Respuesta del Servidor

Response

{
  "qr_id": "qr_0991ab",
  "emvco_payload": "00020101021226500010a...",
  "qr_image_url": "https://flux.praxisglobe.com/v1/qr/qr_0991ab.png"
}