Money In confirmation
This guide will help you with the setup to receive notifications everytime you get a money in transaction
Register for Money In notifications
In order to get a notification, first, you have to register the endpoint where you expect the webhook.
Endpoint POST /v1/webhooks
Request
Path parameters: none Query Parameters: none
Request Body:
{
"client_id":"{{clientId}}",
"url":"https://example.com/money-in-webhook",
"token": "secretToken0123",
"webhook_type": "MONEY_IN"
}
Response
Status Code: 200 OK
Response Body:
{
"id": "0c2d358f-0626-4c4e-b40b-9ab7c9dffe71",
"clientId": "c2d1d1e3-3340-4170-980e-e9269bbbc551",
"url": "https://example.com/webhook2",
"token": "secretToken0123",
"webhookType": "MONEY_IN",
"webhookStatus": "ACTIVE",
"createdAt": "2025-05-19 15:52:51.593012-06:00",
"updatedAt": "2025-05-19 15:52:51.593012-06:00",
"deletedAt": "None",
"blockedAt": "None",
"deletedBy": "None",
"blockedBy": "None"
}
Webhook notification
Once you register your endpoint for our webhook, you will get a request every time a money in arrive. The request will be a POST with a payload like this:
{
"id_msg": "a7a126e8-fa74-411c-ad2b-b000f277bb0d",
"msg_name": "MONEY_IN",
"msg_date": "2025-04-02",
"body": {
"id": "0196da9a-8947-703e-9a3b-bf8c7d9f6059",
"beneficiary_account": "646180529600044117",
"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": "20250402",
"tracking_key": "50118609TBRNZ00I07219647",
"payment_concept": "Payment for invoice 4567",
"numeric_reference": "2504021"
}
}
You can accept or reject a money in directly in the money in webhook, or later with a refund.
Accept a Money In
Respond to a Money in webhook with an HTTP 201 and we will consider that you accepted the money in.
Reject a Money In
Respond to a Money in webhook with an HTTP 422 and the money in will be automatically refunded. Aditionally, you can send a reason for the rejection in the Response
{
"refundReason": "Invalid Amount"
}
Refund a Money In
There will be some times were you accept a money in, but for any reason, you have to refund it. You can do it with the refund endpoint
Endpoint POST /v1/clients/{{clientId}}/transactions/{{transactionId}}/refund
Request
Path parameters:
- clientId:
c2d1d1e3-3340-4170-980e-e9269bbbc551
- transactionId:
e43171ad-af3b-40e3-913c-24cc386bf5ff
This is send in the money in webhook Query Parameters: none
Request Body:
{
"description": "Lorem ipsum",
"amount": "9.99"
}
Response
Status Code: 200 OK
Response Body:
{
"id": "e43171ad-af3b-40e3-913c-24cc386bf5ff",
"bankId": "1953a92c-11e5-4315-b406-b89dd6b699b4",
"clientId": "c2d1d1e3-3340-4170-980e-e9269bbbc551",
"externalReference": "2505201",
"trackingId": "20250520FINCHARNJK5NHQG",
"description": "Lorem ipsum",
"amount": "9.99",
"currency": "MXN",
"category": "DEBIT_TRANS",
"subCategory": "SPEI_DEBIT",
"transactionStatus": "LIQUIDATED",
"audit": {
"createdAt": "2025-05-20 10:57:44.220281-06:00",
"updatedAt": "2025-05-20 10:57:44.220281-06:00",
"deletedAt": "None",
"blockedAt": "None"
},
"originalTransactionId": "a1392ef1-75f2-457a-8203-d4fd4b435559"
}
Take note that the /refund
endpoint return a transaction data, this is because we need to create a new SPEI transaction to return the money to the original sourcing account.
In this case, you will have 2 transaction, the original with transactionStatus REFUNDED
and the return, with transactionStatus LIQUIDATED
.
Consult a transaction
You can consult the details of a transaction with a call to:
Endpoint GET /v1/clients/{{clientId}}/transactions/{{transactionId}}
Request
Path parameters:
- clientId:
c2d1d1e3-3340-4170-980e-e9269bbbc551
- transactionId:
e43171ad-af3b-40e3-913c-24cc386bf5ff
This is send in the money in webhook Query Parameters: none
Response
Status Code: 200 OK
Response Body:
{
"id": "e43171ad-af3b-40e3-913c-24cc386bf5ff",
"bankId": "1953a92c-11e5-4315-b406-b89dd6b699b4",
"clientId": "c2d1d1e3-3340-4170-980e-e9269bbbc551",
"externalReference": "2505201",
"trackingId": "20250520FINCHARNJK5NHQG",
"description": "Lorem ipsum",
"amount": "9.99",
"currency": "MXN",
"category": "DEBIT_TRANS",
"subCategory": "SPEI_DEBIT",
"transactionStatus": "LIQUIDATED",
"audit": {
"createdAt": "2025-05-20 10:57:44.220281-06:00",
"updatedAt": "2025-05-20 10:57:44.220281-06:00",
"deletedAt": "None",
"blockedAt": "None"
},
"jsonReference": "{'transaction_date': '2025-05-20 10:14:05', 'payer_institution': '40012', 'beneficiary_institution': '90734', 'tracking_key': '20250520FINCHBQ1XEUUSP02', 'amount': '9.99', 'payment_type': '1', 'payer_name': 'Client MX', 'payer_account': '014910606138059212', 'payer_rfc': 'ND', 'destination_instrument_id': '709448c3-7cbf-454d-a87e-feb23801269a', 'destination_account_id': '24a726ac-180d-48df-82bc-711f2788a46f', 'payer_account_type': '40', 'payment_concept': 'Fondeo Redocly CS MoneyIn', 'numeric_reference': '2505201', 'beneficiary_account_type': '40', 'beneficiary_account': '734180000001000004', 'beneficiary_rfc': 'XXXA010101000', 'beneficiary_name': 'Finch Principal', 'client_id': 'c2d1d1e3-3340-4170-980e-e9269bbbc551', 'vat': '', 'package_folio': '4', 'spei_folio': '000005', 'indirect_payer_institution_name': '', 'indirect_payer_institution_account': '', 'indirect_payer_institution_rfc': ''}",
"sourceInstrument": {
"id": "709448c3-7cbf-454d-a87e-feb23801269a",
"bankId": "9d84b03a-28d1-4898-a69c-38824239e2b1",
"clientId": "c2d1d1e3-3340-4170-980e-e9269bbbc551",
"ownerId": "24a726ac-180d-48df-82bc-711f2788a46f",
"instrumentAlias": "InternalAccount",
"instrumentStatus": "ACTIVE",
"instrumentType": "SENDER_RECEIVER",
"instrumentDetail": {
"accountNumber": "000001000004",
"clabeNumber": "734180000001000004",
"holderName": "Test my Test"
},
"rfc": "ND"
},
"destinationInstrument": {
"id": "9486251b-6706-4aa1-b844-8531de595244",
"bankId": "1953a92c-11e5-4315-b406-b89dd6b699b4",
"clientId": "c2d1d1e3-3340-4170-980e-e9269bbbc551",
"ownerId": "24a726ac-180d-48df-82bc-711f2788a46f",
"instrumentAlias": "Client MX",
"instrumentStatus": "ACTIVE",
"instrumentType": "SENDER_RECEIVER",
"instrumentDetail": {
"accountNumber": "06138059212",
"clabeNumber": "014910606138059212",
"holderName": "Client MX"
},
"rfc": "ND"
}
}