Skip to main content
Event Name: fund_received
This event is emitted when a funding has been processed successfully and the funds have been credited to the user’s account after confirming that the transaction has been completed successfully.

Event Payload

The webhook payload contains the following structure:
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "event": "fund_received",
  "timestamp": "2025-06-19T17:04:13.123Z",
  "data": {
    "method": "card",
    "source": {
      "bankAccountNumber": "ES9121000418450200051332",
      "bankRoutingType": "IBAN",
      "cardBin": "411111",
      "cardLastFour": "1111",
      "internalAccountId": "550e8400-e29b-41d4-a716-446655440002",
      "transferId": "550e8400-e29b-41d4-a716-446655440003",
      "description": "Payment description"
    },
    "received": {
      "amount": 10000,
      "currency": "EUR"
    },
    "fee": {
      "amount": 250,
      "currency": "EUR"
    },
    "settled": {
      "amount": 9750,
      "currency": "EUR"
    },
    "quote": {
      "rate": 1.0,
      "provider": "ECB",
      "timestamp": "2025-06-19T17:00:00Z",
      "validUntil": "2025-06-19T17:30:00Z",
      "spread": 0.0015
    },
    "fundingId": "550e8400-e29b-41d4-a716-446655440000",
    "accountId": "550e8400-e29b-41d4-a716-446655440001",
    "reference": "PAGO-12345"
  }
}

Field Description

id
string
required
Unique event identifier (UUID)
event
string
required
Event type - always fund_received for this webhook
timestamp
string
required
Event timestamp in ISO 8601 format
data
object
required
Contains the event data
data.method
string
required
Payment method used (card, bank_transfer, internal_transfer)
data.source
object
required
Payment origin information
data.source.bankAccountNumber
string
Complete bank account number (e.g., IBAN)
data.source.bankRoutingType
string
Bank routing type (e.g., “IBAN”, “SORT CODE”)
data.source.cardBin
string
First 6-8 digits of the payment card
data.source.cardLastFour
string
Last 4 digits of the payment card
data.source.internalAccountId
string
Internal account ID (UUID, for internal transfers)
data.source.transferId
string
Transfer reference ID (UUID)
data.source.description
string
Payment description
data.received
object
required
Information about the amount received before fees
data.received.amount
integer
required
Received amount in the smallest currency unit (e.g., cents for EUR)
data.received.currency
string
required
Currency of received amount (ISO 4217 code: EUR, USD, etc.)
data.fee
object
required
Information about applied fees
data.fee.amount
integer
required
Fee amount in the smallest currency unit
data.fee.currency
string
required
Fee currency (ISO 4217 code)
data.settled
object
required
Information about the net credited amount
data.settled.amount
integer
required
Net credited amount in the smallest currency unit
data.settled.currency
string
required
Currency of credited amount (ISO 4217 code)
data.quote
object
Exchange rate information (if conversion occurred)
data.quote.rate
number
Applied exchange rate (decimal)
data.quote.provider
string
Exchange rate provider (e.g., “ECB”, “OpenExchangeRates”)
data.quote.timestamp
string
Exchange rate timestamp (ISO 8601)
data.quote.validUntil
string
Exchange rate validity timestamp (ISO 8601)
data.quote.spread
number
Exchange rate spread (decimal, e.g., 0.0015 for 0.15%)
data.fundingId
string
required
Unique funding operation ID (UUID)
data.accountId
string
required
ID of the receiving account (UUID)
data.reference
string
required
Reference of the payment (provided during creation)

Expected Responses

Success Response

HTTP 200 OKThe webhook was processed successfully.

Client Error

HTTP 4xx StatusClient-side error. Will not be retried.

Server Error

HTTP 5xx StatusServer-side error. Will be retried with exponential backoff.

Implementation Example

app.post('/webhooks/ralio', (req, res) => {
  const { event, data } = req.body;
  
  if (event === 'fund_received') {
    const { fundingId, accountId, received, fee, settled } = data;
    
    // Process successful funding
    console.log(`Funding ${fundingId} received successfully`);
    console.log(`Account: ${accountId}`);
    console.log(`Received: ${received.amount} ${received.currency}`);
    console.log(`Fee: ${fee.amount} ${fee.currency}`);
    console.log(`Settled: ${settled.amount} ${settled.currency}`);
    
    // Update your internal systems
    await updateFundingStatus(fundingId, 'COMPLETED');
    await creditAccountBalance(accountId, settled.amount, settled.currency);
    
    // Respond with success
    res.status(200).json({ received: true });
  }
});