Transaction Level Reporting

You can use the Transactions List Endpoint to fetch a list of all transactions made to your Ivy accounts. It’s perfect for building internal reconciliations, generating statements, or tracking activity on your account with full transparency. Think of it like scrolling through your bank transaction history. Each transaction entry includes:
  • Whether the transaction was debit or credit side
  • The amount and currency
  • Who sent or received the funds represented as debtor and creditor
  • The account balance before and balance after
  • The bank statement reference
  • The timestamp of the transaction

Request Entries

This endpoint uses cursor-based pagination with startAfter. This helps you pull large datasets reliably, even as new transactions are created.
FieldTypeRequiredDescription
fromnumberStart of your query window (inclusive), as a UNIX timestamp (seconds).
tonumberEnd of your query window (exclusive), as a UNIX timestamp.
startAfterstringCursor for pagination. Use the entryId of the last result from the previous call.
For example, to retrieve all of yesterday’s activity:
  1. Set from and to to match the UTC timestamps for that day.
  2. Keep calling the endpoint with startAfter set to nextCursor value from response, until hasNext is false.

** Example Request **

POST /api/service/transaction/list
{
  "from": 1720656000,
  "to": 1720742400
}

Transaction Data

The response includes a list of transactions, each showing a single credit or debit on one of your accounts. Each entry reflects an financial movement.
FieldTypeDescription
idstringTransaction id.
amountstringAmount moved (decimal, represented as a string).
currencystringISO 4217 currency code (e.g. “EUR”).
sidestringDirection of the movement from your account’s perspective. Either “credit” or “debit”
creditor / debtorFinancialAddressCounterparty address (IBAN, SCAN, etc.), as a financial address object.
balance.beforestringYour account balance before this transaction.
balance.afterstringYour account balance after this transaction.
bankStatementReferencestringA reference string you can display or match with external statements.
transactionDatenumberUNIX timestamp of when the funds arrived/left and the transaction was recorded.
paging.hasMorebooleanWhether more data is available — use with startAfter to paginate.
paging.nextCursorstringUse the value in startAfter to get the next set of transactions.

Example Response

{
  "data": [
    {
      "id": "txn_12345...",
      "amount": "500.00",
      "currency": "EUR",
      "side": "credit",
      "creditor": {
        "type": "iban",
        "iban": {
          "iban": "DE89370400440532013000",
          "accountHolderName": "Demo Company Ltd"
        }
      },
      "debtor": {
        "type": "iban",
        "iban": {
          "iban": "ES9121000418450200051332",
          "accountHolderName": "John Doe"
        }
      },
      "balance": {
        "before": "1500.00",
        "after": "2000.00"
      },
      "bankStatementReference": "REF-INV-8972",
      "transactionDate": 1720700000
    }
    // more entries...
  ],
  "paging": {
    "hasMore": true,
    "nextCursor": "example.cursor.value"
  }
}

Notes & Best Practices

Point-in-Time Balances

You can use the balance.before and balance.after fields to reconstruct your account balance at any point in time. For example:
  • To get the balance as of midnight yesterday, fetch the first entry after that time and read balance.before.
  • To build a balance chart, just pull entries over time and stitch together the balance.after values.
If you want the current balance, use the /balance/retrieve endpoint instead. It’s more efficient for real-time queries.

Understanding Transaction Date

  • transactionDate: When a transaction is recorded on the Ivy ledger. For credits this means the funds settled, for debits it means the payout was initiated.
  • effectiveAt (coming soon): Will represent when funds are actually available for use by the merchant.