Activity History

Query and filter transaction history.

Before You Start

Read the following guides before proceeding:

GuideWhy
Getting StartedPlatform overview and setup
Api BasicsRequired headers and request configuration
AuthenticationHow to obtain access tokens
OnboardingUser and wallet registration

Overview

The activity feed provides paginated access to all user activities. Activities can be filtered by type (e.g., only card transactions) or by subject (e.g., all transactions for a specific card). Each activity groups its underlying on-chain operations in an operations[] array.

The feed has two versions — v2 (recommended) and v1, each documented in full below. They diverge only in the operations array: v2 returns every operation of a transaction with its status, while v1 returns only completed operations (with status set to null).

Deprecated: GET /api/v1/transactions/card is deprecated. Use the v2 activity feed with ?types=CardTransaction to retrieve card transactions.


Get Activity Feed (v2)

Recommended. Retrieve user activities with optional filtering. v2 returns every related operation of a transaction, each with its own status/status_reason.

Endpoint

GET /api/v2/activity/feed

Query Parameters

ParameterTypeRequiredDescription
page_numberintegerNoPage number, 0-based (default: 0)
page_sizeintegerNoResults per page (default: 25, max: 50)
sortstringNoname (default) or usage
typesstring[]NoFilter by activity type(s). Pass as repeated params (types=CardTransaction&types=Sepa). Case-insensitive.
subjectstringNoFilter by subject — a card ID, wallet address, or account reference (UUID or address)
  • types and subject are mutually exclusive — send one or the other, not both.
  • To filter by several types, repeat the types parameter — one value per occurrence. For example, to get card transactions and SEPA transfers: ?types=CardTransaction&types=Sepa.

Response

{
  "data": [
    {
      "id": "beedaf4f-d0de-48ee-8bdf-c6c624af90ef",
      "user_address": "0x465Da298F22977628d5F85471db9648C54D88C62",
      "source": {
        "type": "SepaBankAccount",
        "bank_account": {
          "iban": "MT22CFTE19870000000090010248742",
          "bic": "CFTEMTM1",
          "owner_name": "Alex Grey",
          "is_business": false
        }
      },
      "destination": {
        "type": "Wallet",
        "wallet": {
          "address": "0x032ec5FAFF69cB98EE11A480C5d1990458C6473C"
        }
      },
      "status": "Completed",
      "status_reason": "credit_done",
      "source_amount": {
        "amount": 50,
        "currency": "EUR"
      },
      "destination_amount": {
        "amount": 50,
        "token_symbol": "WEUR",
        "token_address": "0x5c55F314624718019A326F16a62A05D6C6d8C8A2"
      },
      "rate": {
        "ticker": "EUR/WEUR",
        "rate": 1
      },
      "type": "Sepa",
      "reference": "NJOZWZXIUGWVETREJUJO",
      "direction": "Inbound",
      "operations": [
        {
          "hash": "0x0f06c300e33f6a53dc634ab17e7f8de085d01468d985ef8bcdc87a9f83da0a34",
          "operation_amount": {
            "amount": 50,
            "token_symbol": "WEUR",
            "token_address": "0x5c55F314624718019A326F16a62A05D6C6d8C8A2"
          },
          "transaction_amount": {
            "amount": 50,
            "currency": "EUR"
          },
          "rate": {
            "ticker": "EUR/WEUR",
            "rate": 1
          },
          "status": "Completed",
          "operation_id": "beedaf4f-d0de-48ee-8bdf-c6c624af90ef"
        }
      ],
      "created_at": "2026-07-01T10:02:49.000Z",
      "activity_steps": [
        {
          "type": "Initiated",
          "status": "Completed",
          "created_at": "2026-07-01T10:03:00.000Z",
          "completed_at": "2026-07-01T10:03:00.000Z"
        },
        {
          "type": "BankIn",
          "status": "Completed",
          "created_at": "2026-07-01T10:03:00.000Z",
          "completed_at": "2026-07-01T10:03:00.000Z"
        },
        {
          "type": "Review",
          "status": "Completed",
          "created_at": "2026-07-01T10:03:00.000Z",
          "completed_at": "2026-07-01T10:03:00.000Z"
        },
        {
          "type": "CryptoIn",
          "status": "Completed",
          "created_at": "2026-07-01T10:03:00.000Z",
          "completed_at": "2026-07-01T10:03:00.000Z"
        },
        {
          "type": "Completed",
          "status": "Completed",
          "created_at": "2026-07-01T10:03:00.000Z",
          "completed_at": "2026-07-01T10:03:00.000Z"
        }
      ]
    }
  ]
}

The source and destination shapes depend on the activity type — a card purchase, for example, has a Cards source and a Merchant destination. See Subject Types.

FieldDescription
data[].idActivity id — this is the transaction id; use it with Get a Single Activity
data[].typeActivity type (see Activity Types)
data[].statusPending, Completed, or Failed
data[].status_reasonMachine-readable reason for the current status (optional)
data[].directionInbound, Outbound, or Internal
data[].source / destinationThe parties involved (see Subject Types)
data[].source_amount / destination_amountAmounts charged / received
data[].rateAverage rate applied to the activity (optional)
data[].referenceReference/memo for the activity (optional)
data[].operationsThe individual operations of the transaction (see Operations)
data[].activity_stepsProcessing stages (see Activity Steps)

Get a Single Activity (v2)

Retrieve the complete record for one transaction by its id (the id the feed returns for each item).

Request

GET /api/v2/activity/single/{id}

There is no request body. Send the standard headers:

HeaderValue
AuthorizationBearer <access_token>
X-User-AddressThe user's wallet (EOA) address
X-Chain-IdChain id — 84532 (sandbox) or 8453 (production)
Path parameterDescription
{id}The activity id returned by the feed. This is the transaction id.

Response

200 OK with the activity object directly (not wrapped in a data array). Each entry in operations[] carries its own status:

{
  "id": "beedaf4f-d0de-48ee-8bdf-c6c624af90ef",
  "user_address": "0x465Da298F22977628d5F85471db9648C54D88C62",
  "source": {
    "type": "SepaBankAccount",
    "bank_account": {
      "iban": "MT22CFTE19870000000090010248742",
      "bic": "CFTEMTM1",
      "owner_name": "Alex Grey",
      "is_business": false
    }
  },
  "destination": {
    "type": "Wallet",
    "wallet": {
      "address": "0x032ec5FAFF69cB98EE11A480C5d1990458C6473C"
    }
  },
  "status": "Completed",
  "status_reason": "credit_done",
  "source_amount": {
    "amount": 50,
    "currency": "EUR"
  },
  "destination_amount": {
    "amount": 50,
    "token_symbol": "WEUR",
    "token_address": "0x5c55F314624718019A326F16a62A05D6C6d8C8A2"
  },
  "rate": {
    "ticker": "EUR/WEUR",
    "rate": 1
  },
  "type": "Sepa",
  "reference": "NJOZWZXIUGWVETREJUJO",
  "direction": "Inbound",
  "operations": [
    {
      "hash": "0x0f06c300e33f6a53dc634ab17e7f8de085d01468d985ef8bcdc87a9f83da0a34",
      "operation_amount": {
        "amount": 50,
        "token_symbol": "WEUR",
        "token_address": "0x5c55F314624718019A326F16a62A05D6C6d8C8A2"
      },
      "transaction_amount": {
        "amount": 50,
        "currency": "EUR"
      },
      "rate": {
        "ticker": "EUR/WEUR",
        "rate": 1
      },
      "status": "Completed",
      "operation_id": "beedaf4f-d0de-48ee-8bdf-c6c624af90ef"
    }
  ],
  "created_at": "2026-07-01T10:02:49.000Z",
  "activity_steps": [
    {
      "type": "Initiated",
      "status": "Completed",
      "created_at": "2026-07-01T10:03:00.000Z",
      "completed_at": "2026-07-01T10:03:00.000Z"
    },
    {
      "type": "BankIn",
      "status": "Completed",
      "created_at": "2026-07-01T10:03:00.000Z",
      "completed_at": "2026-07-01T10:03:00.000Z"
    },
    {
      "type": "Review",
      "status": "Completed",
      "created_at": "2026-07-01T10:03:00.000Z",
      "completed_at": "2026-07-01T10:03:00.000Z"
    },
    {
      "type": "CryptoIn",
      "status": "Completed",
      "created_at": "2026-07-01T10:03:00.000Z",
      "completed_at": "2026-07-01T10:03:00.000Z"
    },
    {
      "type": "Completed",
      "status": "Completed",
      "created_at": "2026-07-01T10:03:00.000Z",
      "completed_at": "2026-07-01T10:03:00.000Z"
    }
  ]
}
FieldDescription
idActivity id (the transaction id)
user_addressOwner's wallet (EOA) address
typeActivity type (see Activity Types)
statusPending, Completed, or Failed
status_reasonMachine-readable reason for the status (optional)
directionInbound, Outbound, or Internal
source / destinationThe parties involved (see Subject Types)
source_amount / destination_amountAmounts charged / received
rateAverage rate applied to the activity (optional)
referenceReference/memo (optional)
operationsOn-chain operations of the transaction, each with its own status (see Operations)
activity_stepsProcessing stages, each with a status and timestamps (see Activity Steps)
created_atISO 8601 creation timestamp

Get Activity Feed (v1)

The earlier version of the activity feed. New integrations should use v2; v1 remains available for existing integrations. It returns activities in a data array and accepts the query parameters below. The behavioural difference from v2 is confined to the operations array (see Operations in v1).

Endpoint

GET /api/v1/activity/feed

Query Parameters

ParameterTypeRequiredDescription
page_numberintegerNoPage number, 0-based (default: 0)
page_sizeintegerNoResults per page (default: 25, max: 50)
sortstringNoname (default) or usage
typesstring[]NoFilter by activity type(s). Pass as repeated params (types=CardTransaction&types=Sepa). Case-insensitive.
subjectstringNoFilter by subject — a card ID, wallet address, or account reference (UUID or address)
  • types and subject are mutually exclusive — send one or the other, not both.
  • To filter by several types, repeat the types parameter — one value per occurrence. For example, to get card transactions and SEPA transfers: ?types=CardTransaction&types=Sepa. A single comma-separated value (?types=CardTransaction,Sepa) is not supported and returns 400.
  • To fetch one transaction, use Get a Single Activity (v1).

Response

Returns a data array of activity items. In v1, each item's operations[] includes only completed operations, and every operation's status is returned as null (status_reason is not included on an operation).

{
  "data": [
    {
      "id": "beedaf4f-d0de-48ee-8bdf-c6c624af90ef",
      "user_address": "0x465Da298F22977628d5F85471db9648C54D88C62",
      "source": {
        "type": "SepaBankAccount",
        "bank_account": {
          "iban": "MT22CFTE19870000000090010248742",
          "bic": "CFTEMTM1",
          "owner_name": "Alex Grey",
          "is_business": false
        }
      },
      "destination": {
        "type": "Wallet",
        "wallet": {
          "address": "0x032ec5FAFF69cB98EE11A480C5d1990458C6473C"
        }
      },
      "status": "Completed",
      "status_reason": "credit_done",
      "source_amount": {
        "amount": 50,
        "currency": "EUR"
      },
      "destination_amount": {
        "amount": 50,
        "token_symbol": "WEUR",
        "token_address": "0x5c55F314624718019A326F16a62A05D6C6d8C8A2"
      },
      "rate": {
        "ticker": "EUR/WEUR",
        "rate": 1
      },
      "type": "Sepa",
      "reference": "NJOZWZXIUGWVETREJUJO",
      "direction": "Inbound",
      "operations": [
        {
          "hash": "0x0f06c300e33f6a53dc634ab17e7f8de085d01468d985ef8bcdc87a9f83da0a34",
          "operation_amount": {
            "amount": 50,
            "token_symbol": "WEUR",
            "token_address": "0x5c55F314624718019A326F16a62A05D6C6d8C8A2"
          },
          "transaction_amount": {
            "amount": 50,
            "currency": "EUR"
          },
          "rate": {
            "ticker": "EUR/WEUR",
            "rate": 1
          },
          "status": null,
          "operation_id": "beedaf4f-d0de-48ee-8bdf-c6c624af90ef"
        }
      ],
      "created_at": "2026-07-01T10:02:49.000Z",
      "activity_steps": [
        {
          "type": "Initiated",
          "status": "Completed",
          "created_at": "2026-07-01T10:03:00.000Z",
          "completed_at": "2026-07-01T10:03:00.000Z"
        },
        {
          "type": "BankIn",
          "status": "Completed",
          "created_at": "2026-07-01T10:03:00.000Z",
          "completed_at": "2026-07-01T10:03:00.000Z"
        },
        {
          "type": "Review",
          "status": "Completed",
          "created_at": "2026-07-01T10:03:00.000Z",
          "completed_at": "2026-07-01T10:03:00.000Z"
        },
        {
          "type": "CryptoIn",
          "status": "Completed",
          "created_at": "2026-07-01T10:03:00.000Z",
          "completed_at": "2026-07-01T10:03:00.000Z"
        },
        {
          "type": "Completed",
          "status": "Completed",
          "created_at": "2026-07-01T10:03:00.000Z",
          "completed_at": "2026-07-01T10:03:00.000Z"
        }
      ]
    }
  ]
}

The operation's status comes back as null; in v2 this operation carries "status": "Completed".

Operations in v1

  • Includes only operations whose status is Completed.
  • Sets every operation's status to null and does not include status_reason on an operation.

To get the full operation breakdown — authorization, refund, and reversal, each with its own status — use v2.

Get a Single Activity (v1)

Fetch one transaction by its activity id:

GET /api/v1/activity/single/{id}
Path parameterDescription
{id}The activity id from the feed (this is the transaction's id)

Returns one activity item, following the v1 operation rules above: only completed operations, each with status set to null.


Operations

Each activity item carries an operations[] array — the individual on-chain operations that make up that one transaction. A single transaction can expose several operations in one activity item (e.g. an authorization, its refund, and a reversal).

FieldDescription
operation_idUnique identifier of the operation (UUID)
hashOn-chain transaction hash of the operation
operation_amountAmount in crypto (negative when debited from the user)
transaction_amountAmount in fiat currency (negative when debited)
rateRate effective for the operation
statusOperation status — Pending, Completed, or Failed in v2; null in v1
status_reasonReason for the operation status — present in v2 when applicable, absent in v1

In v2, every related operation is returned, each with a populated status. In v1, only Completed operations are returned and each operation's status comes back as null.


Activity Types

TypeDirectionDescription
CryptoBothOn-chain crypto transfer
DepositInboundDeposit into the user's wallet
WithdrawalOutboundWithdrawal from the user's wallet
ExchangeInternalToken exchange within wallet
CardTransactionBothCard transaction (purchase or refund)
ExternalCardTransactionBothTransaction on an external card
CardTransferOutboundPush to card transfer
CardFeesPaymentOutboundCard-related fee payment
SepaBothSEPA bank transfer
AchPushBothACH push transfer
AchPullBothACH pull transfer
FasterPaymentBothUK Faster Payments transfer
SwiftBothSWIFT international transfer
YieldClaimInboundYield/reward claim

Activity Directions

DirectionDescription
InboundFunds received into user's wallet
OutboundFunds sent from user's wallet
InternalMovement within user's accounts (e.g., exchange)

Activity Statuses

StatusDescription
PendingTransaction in progress
CompletedTransaction successfully finished
FailedTransaction failed (see status_reason)

Activity Steps

Multi-step transactions include an activity_steps array showing progression through each processing stage.

Step TypeDescription
InitiatedTransaction started
CryptoInTokens credited to user wallet
CryptoOutTokens debited from user wallet
BankInFiat received from bank
BankOutFiat sent to bank
CardInFiat received from card network
CardOutFiat sent to card network
ReviewManual or compliance review
ReversalTransaction reversed
SyntheticWrapTokens wrapped to synthetic tokens
SyntheticUnwrapTokens unwrapped from synthetic tokens
CompletedTransaction finalized

Each step has its own status and timestamps for tracking progression.


Subject Types

Activities reference source and destination subjects that identify the parties involved.

Subject TypeDescriptionFields
WalletUser walletaddress
ExternalWalletExternal crypto addressaddress
CardsUser's cardid, pan_last, payment_system
ExternalCardExternal card (push to card)id, pan_last, payment_system
MerchantCard merchantid, name, category, full_address
SepaBankAccountSEPA bank accountiban, bic, owner_name
AchBankAccountACH bank accountaccount_number, routing_number, owner_name
FasterPaymentBankAccountUK bank accountaccount_number, sort_code, owner_name
SwiftBankAccountSWIFT bank accountiban, bic, owner_name

Filter Examples

Filter by Type

Get only card transactions:

GET /api/v2/activity/feed?types=CardTransaction

Get card and SEPA transactions — repeat the types param (do not comma-join):

GET /api/v2/activity/feed?types=CardTransaction&types=Sepa

Filter by Subject

subject returns every activity that involves one entity. It accepts either a UUID (a card ID or account reference) or a wallet address — pass one value, in whichever form fits the entity you're filtering by.

By a card ID (UUID) — returns that card's activities:

GET /api/v2/activity/feed?subject=00000000-0000-0000-0000-000000000001

By a wallet address — returns that wallet's activities:

GET /api/v2/activity/feed?subject=0xA7E41d5680dE394EaA2ed417169DFf56840Fb3EE

Fetch One Transaction

The feed cannot be filtered by transaction ID. To retrieve a single transaction, use its activity id:

GET /api/v2/activity/single/a1b2c3d4-e5f6-7890-1234-567890abcdef

Activity Webhook

Activities are also delivered via webhook as they occur.

Endpoint: POST {base_url}/v2/webhooks/activities

{
  "id": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
  "user_address": "0xA7E41d5680dE394EaA2ed417169DFf56840Fb3EE",
  "type": "Sepa",
  "direction": "Inbound",
  "status": "Completed",
  "source": {
    "type": "SepaBankAccount",
    "bank_account": {
      "iban": "DE89370400440532013000",
      "bic": "COBADEFFXXX",
      "owner_name": "Alex Grey",
      "is_business": false
    }
  },
  "destination": {
    "type": "Wallet",
    "wallet": {
      "address": "0xA7E41d5680dE394EaA2ed417169DFf56840Fb3EE"
    }
  },
  "source_amount": {
    "amount": 1000.00,
    "currency": "EUR"
  },
  "destination_amount": {
    "amount": 1000.00,
    "token_symbol": "WEUR",
    "token_address": "0x..."
  },
  "created_at": "2024-01-15T10:30:00Z",
  "activity_steps": [...]
}

Error Handling

Error ReasonIssueDescription
ErrorInvalidFieldmutually_exclusiveBoth types and subject provided
ErrorInvalidFieldmax_exceededpage_size is greater than 50
ErrorInvalidFieldmutually_exclusiveBoth types and subject provided

Error Response Format

Invalid subject format:

{
  "error_reason": "ErrorInvalidField",
  "error_description": "Invalid format for subject",
  "error_category": {
    "category": "CategoryValidationFailure",
    "http_status_code": 400
  },
  "error_details": [
    {
      "key": "field",
      "details": "subject"
    },
    {
      "key": "issue",
      "details": "invalid_format"
    }
  ]
}

Mutually exclusive parameters:

{
  "error_reason": "ErrorInvalidField",
  "error_description": "Fields are mutually exclusive",
  "error_category": {
    "category": "CategoryValidationFailure",
    "http_status_code": 400
  },
  "error_details": [
    {
      "key": "fields",
      "details": "types,subject"
    },
    {
      "key": "issue",
      "details": "mutually_exclusive"
    }
  ]
}