---
updatedAt: 2026-09-07T12:19:22.000Z
agentTools:
  projectIndex: https://docs.wirexapp.com/llms.txt
---

# Activity History

Query and filter transaction history.

## Before You Start

Read the following guides before proceeding:

| Guide                                         | Why                                        |
| --------------------------------------------- | ------------------------------------------ |
| [Getting Started](https://docs.wirexapp.com/docs/retail-getting-started) | Platform overview and setup                |
| [Api Basics](https://docs.wirexapp.com/docs/retail-api-basics)           | Required headers and request configuration |
| [Authentication](https://docs.wirexapp.com/docs/retail-authentication)   | How to obtain access tokens                |
| [Onboarding](https://docs.wirexapp.com/docs/retail-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 three versions — [v1](#get-activity-feed-v1), [v2 (recommended for a single-chain integration)](#get-activity-feed-v2), and [v3 (recommended once a user holds activity on more than one chain)](#get-activity-feed-v3), each documented in full below. v1 and v2 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`). v3 returns the same shape as v2, read across every chain the user holds activity on rather than only the chain the request is made on, with each entry additionally reporting its own `chain_id`.

Every amount in the feed — `source_amount`, `destination_amount`, `fee_amount`, and each operation's
`operation_amount` / `transaction_amount` / `resulting_balance` — carries an `amount_precise` string (an
exact base-unit value) and a `decimals` count alongside the existing float `amount`, on v1, v2, and v3
alike. `amount_precise` is absent only where an amount is an aggregate this API could not reproduce
exactly, in which case the float remains the only value.

> **Deprecated:** `GET /api/v1/transactions/card` is deprecated. Use the [v2 activity feed](#get-activity-feed-v2) 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

| 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)                       |

* `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

```json
{
  "data": [
    {
      "id": "beedaf4f-d0de-48ee-8bdf-c6c624af90ef",
      "user_address": "0x465Da298F22977628d5F85471db9648C54D88C62",
      "chain_id": 8453,
      "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,
        "amount_precise": "50000000000000000000",
        "decimals": 18,
        "currency": "EUR"
      },
      "destination_amount": {
        "amount": 50,
        "amount_precise": "50000000000000000000",
        "decimals": 18,
        "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,
            "amount_precise": "50000000000000000000",
            "decimals": 18,
            "token_symbol": "WEUR",
            "token_address": "0x5c55F314624718019A326F16a62A05D6C6d8C8A2"
          },
          "transaction_amount": {
            "amount": 50,
            "amount_precise": "50000000000000000000",
            "decimals": 18,
            "currency": "EUR"
          },
          "resulting_balance": {
            "amount": 1631.07,
            "amount_precise": "1631070000000000000000",
            "decimals": 18,
            "token_symbol": "WEUR",
            "token_address": "0x5c55F314624718019A326F16a62A05D6C6d8C8A2"
          },
          "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](#subject-types).

| Field                                         | Description                                                                                                                             |
| --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| `data[].id`                                   | Activity id — this is the transaction id; use it with [Get a Single Activity](#get-a-single-activity-v2)                                |
| `data[].type`                                 | Activity type (see [Activity Types](#activity-types))                                                                                   |
| `data[].status`                               | `Pending`, `Completed`, or `Failed`                                                                                                     |
| `data[].status_reason`                        | Machine-readable reason for the current status (optional)                                                                               |
| `data[].chain_id`                             | EIP-155 chain this entry was recorded on. Only [v3](#get-activity-feed-v3) can return entries from more than one chain in a single feed |
| `data[].direction`                            | `Inbound`, `Outbound`, or `Internal`                                                                                                    |
| `data[].source` / `destination`               | The parties involved (see [Subject Types](#subject-types))                                                                              |
| `data[].source_amount` / `destination_amount` | Amounts charged / received, each with `amount_precise` (base units) and `decimals` alongside the float `amount`                         |
| `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](#operations))                                                            |
| `data[].activity_steps`                       | Processing stages (see [Activity Steps](#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-Wallet` | 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`:

```json
{
  "id": "beedaf4f-d0de-48ee-8bdf-c6c624af90ef",
  "user_address": "0x465Da298F22977628d5F85471db9648C54D88C62",
  "chain_id": 8453,
  "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,
    "amount_precise": "50000000000000000000",
    "decimals": 18,
    "currency": "EUR"
  },
  "destination_amount": {
    "amount": 50,
    "amount_precise": "50000000000000000000",
    "decimals": 18,
    "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,
        "amount_precise": "50000000000000000000",
        "decimals": 18,
        "token_symbol": "WEUR",
        "token_address": "0x5c55F314624718019A326F16a62A05D6C6d8C8A2"
      },
      "transaction_amount": {
        "amount": 50,
        "amount_precise": "50000000000000000000",
        "decimals": 18,
        "currency": "EUR"
      },
      "resulting_balance": {
        "amount": 1631.07,
        "amount_precise": "1631070000000000000000",
        "decimals": 18,
        "token_symbol": "WEUR",
        "token_address": "0x5c55F314624718019A326F16a62A05D6C6d8C8A2"
      },
      "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                                                                                    |
| `chain_id`                             | EIP-155 chain this entry was recorded on                                                                        |
| `type`                                 | Activity type (see [Activity Types](#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](#subject-types))                                                      |
| `source_amount` / `destination_amount` | Amounts charged / received, each with `amount_precise` (base units) and `decimals` alongside the float `amount` |
| `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](#operations))              |
| `activity_steps`                       | Processing stages, each with a status and timestamps (see [Activity Steps](#activity-steps))                    |
| `created_at`                           | ISO 8601 creation timestamp                                                                                     |

***

## Search Activities (v2)

Full-text search over the authenticated owner's activities. Use it for a search box; use the feed's
filters for structured narrowing.

```
GET /api/v2/activity/search
```

### Query Parameters

| Parameter     | Type    | Required | Description                                                             |
| ------------- | ------- | -------- | ----------------------------------------------------------------------- |
| `predicate`   | string  | Yes      | Search term. 1–128 characters, matching `^[A-Za-z0-9 \-_.@:/+]{1,128}$` |
| `page_number` | integer | No       | Page to return                                                          |
| `page_size`   | integer | No       | Results per page. Defaults to 25, maximum 50                            |

The allowed character set is deliberately narrow — quotes, backslashes, backticks, semicolons,
brackets, pipes and control characters are all refused. Strip them client-side rather than
forwarding raw user input and handling the 400.

The response is the same `ActivityFeedResponse` shape as `GET /api/v2/activity/feed`, documented
above. Results are scoped to the authenticated owner; there is no cross-user search.

### Errors

| Error Details                             | Description                                                                             |
| ----------------------------------------- | --------------------------------------------------------------------------------------- |
| `predicate: Predicate is required`        | Empty or whitespace-only term                                                           |
| `predicate: Invalid format for predicate` | Disallowed character or over 128 characters. `allowed` and `max` details carry the rule |

***

## Get Activity Feed (v3)

Same response shape as [v2](#get-activity-feed-v2) — including `chain_id`, the `*_precise` amount fields,
and `operations[].resulting_balance` — read across **every chain the user holds activity on**, regardless of
the chain the request is made on. Recommended once a user can hold a card whose funding wallet lives on a
chain other than the one the request is made on, such as a [Bridge-rail card](https://docs.wirexapp.com/docs/retail-card-issuance#bridge-rail-issuance-v3).

```
GET /api/v3/activity/feed
```

Takes the same `page_number`, `page_size`, `sort`, `types`, and `subject` query parameters as v2, with the
same mutual exclusivity between `types` and `subject`. A response spanning several chains carries entries
whose `chain_id` differs from each other and from the session's `X-Chain-Id` — nothing else in an entry says
which chain it belongs to, so read `chain_id` rather than assuming the session's.

### Get a Single Activity (v3)

```
GET /api/v3/activity/single/{id}
```

Same request and response shape as [Get a Single Activity (v2)](#get-a-single-activity-v2), read regardless
of which chain the activity was recorded on.

***

## Search Activities (v3)

```
GET /api/v3/activity/search
```

Same `predicate` / `page_number` / `page_size` parameters and the same response shape as
[Search Activities (v2)](#search-activities-v2), searching across every chain the user holds activity on.

***

## Get Activity Feed (v1)

The earlier version of the activity feed. New integrations should use [v2](#get-activity-feed-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](#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)                       |

* `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)](#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).

```json
{
  "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](#get-activity-feed-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-activity-feed-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)                                                                                                                            |
| `resulting_balance`  | Balance of the operation's asset immediately after the operation applied, denominated in the same asset as `operation_amount`. Absent when the operation has no crypto leg |
| `rate`               | Rate effective for the operation                                                                                                                                           |
| `status`             | Operation status — `Pending`, `Completed`, or `Failed` in v2/v3; `null` in v1                                                                                              |
| `status_reason`      | Reason for the operation status — present in v2/v3 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

| 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`

The payload carries the same fields as [Get a Single Activity (v2)](#get-a-single-activity-v2), including
`chain_id`, the `*_precise` amount fields, and `operations[].resulting_balance`.

```json
{
  "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:**

```json
{
  "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:**

```json
{
  "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"
    }
  ]
}
```