Activity History
Query and filter transaction history.
Before You Start
Read the following guides before proceeding:
| Guide | Why |
|---|---|
| Getting Started | Platform overview and setup |
| Api Basics | Required headers and request configuration |
| Authentication | How to obtain access tokens |
| Onboarding | User 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/cardis deprecated. Use the v2 activity feed with?types=CardTransactionto 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
| Parameter | Type | Required | Description |
|---|---|---|---|
page_number | integer | No | Page number, 0-based (default: 0) |
page_size | integer | No | Results per page (default: 25, max: 50) |
sort | string | No | name (default) or usage |
types | string[] | No | Filter by activity type(s). Pass as repeated params (types=CardTransaction&types=Sepa). Case-insensitive. |
subject | string | No | Filter by subject — a card ID, wallet address, or account reference (UUID or address) |
typesandsubjectare mutually exclusive — send one or the other, not both.- To filter by several types, repeat the
typesparameter — 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.
| Field | Description |
|---|---|
data[].id | Activity id — this is the transaction id; use it with Get a Single Activity |
data[].type | Activity type (see Activity Types) |
data[].status | Pending, Completed, or Failed |
data[].status_reason | Machine-readable reason for the current status (optional) |
data[].direction | Inbound, Outbound, or Internal |
data[].source / destination | The parties involved (see Subject Types) |
data[].source_amount / destination_amount | Amounts charged / received |
data[].rate | Average rate applied to the activity (optional) |
data[].reference | Reference/memo for the activity (optional) |
data[].operations | The individual operations of the transaction (see Operations) |
data[].activity_steps | Processing 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:
| Header | Value |
|---|---|
Authorization | Bearer <access_token> |
X-User-Address | The user's wallet (EOA) address |
X-Chain-Id | Chain id — 84532 (sandbox) or 8453 (production) |
| Path parameter | Description |
|---|---|
{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"
}
]
}| Field | Description |
|---|---|
id | Activity id (the transaction id) |
user_address | Owner's wallet (EOA) address |
type | Activity type (see Activity Types) |
status | Pending, Completed, or Failed |
status_reason | Machine-readable reason for the status (optional) |
direction | Inbound, Outbound, or Internal |
source / destination | The parties involved (see Subject Types) |
source_amount / destination_amount | Amounts charged / received |
rate | Average rate applied to the activity (optional) |
reference | Reference/memo (optional) |
operations | On-chain operations of the transaction, each with its own status (see Operations) |
activity_steps | Processing stages, each with a status and timestamps (see Activity Steps) |
created_at | ISO 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
| Parameter | Type | Required | Description |
|---|---|---|---|
page_number | integer | No | Page number, 0-based (default: 0) |
page_size | integer | No | Results per page (default: 25, max: 50) |
sort | string | No | name (default) or usage |
types | string[] | No | Filter by activity type(s). Pass as repeated params (types=CardTransaction&types=Sepa). Case-insensitive. |
subject | string | No | Filter by subject — a card ID, wallet address, or account reference (UUID or address) |
typesandsubjectare mutually exclusive — send one or the other, not both.- To filter by several types, repeat the
typesparameter — 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 returns400. - 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
statustonulland does not includestatus_reasonon 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 parameter | Description |
|---|---|
{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).
| Field | Description |
|---|---|
operation_id | Unique identifier of the operation (UUID) |
hash | On-chain transaction hash of the operation |
operation_amount | Amount in crypto (negative when debited from the user) |
transaction_amount | Amount in fiat currency (negative when debited) |
rate | Rate effective for the operation |
status | Operation status — Pending, Completed, or Failed in v2; null in v1 |
status_reason | Reason 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, onlyCompletedoperations are returned and each operation'sstatuscomes back asnull.
Activity Types
| Type | Direction | Description |
|---|---|---|
Crypto | Both | On-chain crypto transfer |
Deposit | Inbound | Deposit into the user's wallet |
Withdrawal | Outbound | Withdrawal from the user's wallet |
Exchange | Internal | Token exchange within wallet |
CardTransaction | Both | Card transaction (purchase or refund) |
ExternalCardTransaction | Both | Transaction on an external card |
CardTransfer | Outbound | Push to card transfer |
CardFeesPayment | Outbound | Card-related fee payment |
Sepa | Both | SEPA bank transfer |
AchPush | Both | ACH push transfer |
AchPull | Both | ACH pull transfer |
FasterPayment | Both | UK Faster Payments transfer |
Swift | Both | SWIFT international transfer |
YieldClaim | Inbound | Yield/reward claim |
Activity Directions
| Direction | Description |
|---|---|
Inbound | Funds received into user's wallet |
Outbound | Funds sent from user's wallet |
Internal | Movement within user's accounts (e.g., exchange) |
Activity Statuses
| Status | Description |
|---|---|
Pending | Transaction in progress |
Completed | Transaction successfully finished |
Failed | Transaction failed (see status_reason) |
Activity Steps
Multi-step transactions include an activity_steps array showing progression through each processing stage.
| Step Type | Description |
|---|---|
Initiated | Transaction started |
CryptoIn | Tokens credited to user wallet |
CryptoOut | Tokens debited from user wallet |
BankIn | Fiat received from bank |
BankOut | Fiat sent to bank |
CardIn | Fiat received from card network |
CardOut | Fiat sent to card network |
Review | Manual or compliance review |
Reversal | Transaction reversed |
SyntheticWrap | Tokens wrapped to synthetic tokens |
SyntheticUnwrap | Tokens unwrapped from synthetic tokens |
Completed | Transaction 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 Type | Description | Fields |
|---|---|---|
Wallet | User wallet | address |
ExternalWallet | External crypto address | address |
Cards | User's card | id, pan_last, payment_system |
ExternalCard | External card (push to card) | id, pan_last, payment_system |
Merchant | Card merchant | id, name, category, full_address |
SepaBankAccount | SEPA bank account | iban, bic, owner_name |
AchBankAccount | ACH bank account | account_number, routing_number, owner_name |
FasterPaymentBankAccount | UK bank account | account_number, sort_code, owner_name |
SwiftBankAccount | SWIFT bank account | iban, 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 Reason | Issue | Description |
|---|---|---|
ErrorInvalidField | mutually_exclusive | Both types and subject provided |
ErrorInvalidField | max_exceeded | page_size is greater than 50 |
ErrorInvalidField | mutually_exclusive | Both 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"
}
]
}
