> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tender.cash/llms.txt
> Use this file to discover all available pages before exploring further.

# List Wallet Transactions

> Retrieve the deposits and outbound transfers of a subwallet

> [!NOTE]
>
> **Auth method: Signed (HMAC)** — this endpoint requires the full set of signed
> headers: `x-access-id`, `x-request-id`, `x-timestamp`, and an HMAC-SHA256
> `authorization` signature. See [Authentication](/api-reference/authentication.md#signed-hmac-authentication).

Returns one wallet's deposits (`inbound`) and transfers (`outbound`) merged into a single list,
newest first. Pagination fields are **nested inside `data`**, next to the inner `data` array.

> [!WARNING]
>
> Amounts use different units. Inbound `amount` is in the token's smallest unit (for example
> `50000000` for 50 USDT, which has 6 decimals; the deposit webhook carries `decimals`). Outbound
> `amount` is in human-readable units, as you sent it to
> [Transfer Funds](/api-reference/endpoint/subwallets/transfer.md).

## Example

```javascript Node.js theme={null}
const res = await fetch(`${BASE}/wallet/acme-user-8821/transactions?page=1&limit=20`, {
  headers: makeHeaders(),
});

const { data } = await res.json();
const { data: txs, total, pages, page, limit } = data;
for (const tx of txs) {
  if (tx.transaction_type === 'inbound') {
    // deposit: tx.amount is in base units
  } else {
    // transfer: tx.status is pending | confirmed | failed
  }
}
```

```python Python theme={null}
res = requests.get(
    f"{BASE}/wallet/acme-user-8821/transactions",
    headers=make_headers(),
    params={"page": 1, "limit": 20},
)
page = res.json()["data"]
txs, total = page["data"], page["total"]
```

## Headers

**authorization** `string` *required*

Base64-encoded HMAC-SHA256 signature of `{"timeStamp":"<x-timestamp>","requestId":"<x-request-id>","accessId":"<x-access-id>"}`, signed with your access secret. The request body is not part of the signature.

**Example:** `"pV3n0o8kq0lK2mJ8bZ1yq3Yt6hR0cXK9u4mVJ2l9sE0="`

**x-timestamp** `string` *required*

ISO 8601 timestamp; must be within 5 minutes of server time

**Example:** `"2026-10-15T09:45:53.000Z"`

**x-request-id** `string` *required*

A unique UUID v4 per request

**Example:** `"550e8400-e29b-41d4-a716-446655440000"`

**x-access-id** `string` *required*

Your API access ID

**Example:** `"your-access-id-here"`

## Path Parameters

**walletReference** `string` *required*

The wallet's reference.

**Example:** `"acme-user-8821"`

## Query Parameters

**page** `integer`

Page number, starting at `1`. Defaults to `1`.

**Example:** `1`

**limit** `integer`

Transactions per page, from `1` to `100`. Defaults to `20`.

**Example:** `20`

## Response

**status** `string` *required*

**Example:** `"success"`

**message** `string` *required*

**Example:** `"success"`

**data** `object` *required*

**data properties**

**data** `array`

Transactions on this page, newest first. An unknown wallet reference, or one that belongs to
another merchant, returns an empty array.

**inbound transaction**

**transaction\_type** `string`

`"inbound"`

**txHash** `string`

**Example:** `"0x5e8d..."`

**walletReference** `string`

**Example:** `"acme-user-8821"`

**addressReference** `string | null`

**Example:** `"acme-user-8821-slot-2"`

**symbol** `string`

**Example:** `"USDT"`

**amount** `string`

Amount in the token's smallest unit.

**Example:** `"50000000"`

**address** `string`

The receiving address.

**Example:** `"0x1a2b3c..."`

**network** `string`

Network of the receiving address, as stored on the address (for example `EVM`).

**Example:** `"EVM"`

**chainId** `string`

The chain the deposit arrived on.

**Example:** `"ethereum"`

**confirmed** `boolean`

Whether the deposit had reached its required confirmations when last reported.

**Example:** `true`

**blockNumber** `integer`

**Example:** `21034567`

**createdAt** `string`

**Example:** `"2026-10-15T09:00:00.000Z"`

**outbound transaction**

**transaction\_type** `string`

`"outbound"`

**txHash** `string`

On-chain hash. Empty string for a gasless transfer whose hash isn't known yet.

**Example:** `"7c1e9a..."`

**walletReference** `string`

**Example:** `"acme-user-8821"`

**addressReference** `string | null`

**Example:** `"acme-user-8821-slot-2"`

**symbol** `string | null`

**Example:** `"USDT"`

**amount** `string | null`

Amount in human-readable units.

**Example:** `"50"`

**sender** `string | null`

**Example:** `"TLq9..."`

**receiver** `string | null`

**Example:** `"TABCef..."`

**network** `string`

Network type of the transfer, returned as-is (for example `tron`). Compare
case-insensitively.

**Example:** `"tron"`

**status** `string`

`pending`, `confirmed` or `failed`.

**Example:** `"confirmed"`

**paymentReference** `string`

The `payment_reference` you sent with the transfer.

**Example:** `"payout-9922"`

**blockNumber** `integer | null`

**Example:** `66123456`

**createdAt** `string`

**Example:** `"2026-10-15T09:05:00.000Z"`

**total** `integer`

Total number of transactions across all pages.

**Example:** `2`

**pages** `integer`

**Example:** `1`

**page** `integer`

**Example:** `1`

**limit** `integer`

**Example:** `20`

### Example response

```json theme={null}
{
  "status": "success",
  "message": "success",
  "data": {
    "data": [
      {
        "transaction_type": "outbound",
        "txHash": "7c1e9a...",
        "walletReference": "acme-user-8821",
        "addressReference": "acme-user-8821-slot-2",
        "symbol": "USDT",
        "amount": "50",
        "sender": "TLq9...",
        "receiver": "TABCef...",
        "network": "tron",
        "status": "confirmed",
        "paymentReference": "payout-9922",
        "blockNumber": 66123456,
        "createdAt": "2026-10-15T09:05:00.000Z"
      },
      {
        "transaction_type": "inbound",
        "txHash": "5e8d...",
        "walletReference": "acme-user-8821",
        "addressReference": "acme-user-8821-slot-2",
        "symbol": "USDT",
        "amount": "50000000",
        "address": "TLq9...",
        "network": "TRON",
        "chainId": "tron",
        "confirmed": true,
        "blockNumber": 66120001,
        "createdAt": "2026-10-15T09:00:00.000Z"
      }
    ],
    "total": 2,
    "pages": 1,
    "page": 1,
    "limit": 20
  }
}
```


## OpenAPI

````yaml GET /v1/api/wallet/{walletReference}/transactions
openapi: 3.1.0
info:
  title: Tender API
  description: Tender Developer API for cryptocurrency payments and agent management
  version: 2.0.0
  contact:
    name: Tender Support
    url: https://tender.cash
servers:
  - url: https://secureapi.tender.cash
    description: Production Server
  - url: https://sandbox-api.tender.cash
    description: Sandbox Server
security:
  - SignedAuth: []
tags:
  - name: Agents
    description: Manage agents and sub-businesses
  - name: Transactions
    description: Payment and transaction operations
  - name: System
    description: System information and configuration
  - name: Webhooks
    description: Webhook management and logs
  - name: On-ramp
    description: Fiat-to-crypto on-ramp operations
  - name: Payouts
    description: Send crypto from merchant balance to a wallet address or payout account
  - name: Subwallets
    description: Provision and manage crypto wallet infrastructure for your end-users
  - name: Conversions
    description: Swap crypto between coins and chains, or convert to a payout account
paths:
  /v1/api/wallet/{walletReference}/transactions:
    get:
      tags:
        - Subwallets
      summary: List Wallet Transactions
      description: >-
        List a wallet's deposits (inbound) and transfers (outbound), newest
        first. Pagination fields are nested inside data. Inbound amount is in
        base units; outbound amount is in human units.
      operationId: listSubWalletTransactions
      parameters:
        - name: walletReference
          in: path
          required: true
          description: The wallet's reference.
          schema:
            type: string
          example: acme-user-8821
        - name: authorization
          in: header
          required: true
          description: >-
            Base64-encoded HMAC-SHA256 signature of
            {"timeStamp":"<x-timestamp>","requestId":"<x-request-id>","accessId":"<x-access-id>"},
            signed with your access secret. The request body is not part of the
            signature.
          schema:
            type: string
          example: pV3n0o8kq0lK2mJ8bZ1yq3Yt6hR0cXK9u4mVJ2l9sE0=
        - name: x-timestamp
          in: header
          required: true
          description: ISO 8601 timestamp; must be within 5 minutes of server time
          schema:
            type: string
            format: date-time
          example: '2026-10-15T09:45:53.000Z'
        - name: x-request-id
          in: header
          required: true
          description: A unique UUID v4 per request
          schema:
            type: string
            format: uuid
          example: 550e8400-e29b-41d4-a716-446655440000
        - name: x-access-id
          in: header
          required: true
          schema:
            type: string
          example: your-access-id-here
        - name: page
          in: query
          required: false
          description: Page number, starting at 1. Defaults to 1.
          schema:
            type: integer
            default: 1
            minimum: 1
        - name: limit
          in: query
          required: false
          description: Items per page, 1-100. Defaults to 20.
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 20
      responses:
        '200':
          description: Transactions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubwalletListTransactionsResponse'
        '401':
          description: Missing or invalid signature
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubwalletErrorResponse'
              example:
                status: error
                message: INVALID_REQUEST_SIGNATURE
                data: null
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubwalletErrorResponse'
              example:
                status: error
                message: Too many requests. Max 120 per 60s.
                data: null
      security:
        - SignedAuth: []
components:
  schemas:
    SubwalletListTransactionsResponse:
      type: object
      required:
        - status
        - message
        - data
      properties:
        status:
          type: string
          example: success
        message:
          type: string
          example: success
        data:
          type: object
          properties:
            data:
              type: array
              items:
                oneOf:
                  - $ref: '#/components/schemas/SubwalletInboundTransaction'
                  - $ref: '#/components/schemas/SubwalletOutboundTransaction'
                discriminator:
                  propertyName: transaction_type
            total:
              type: integer
              example: 2
            pages:
              type: integer
              example: 1
            page:
              type: integer
              example: 1
            limit:
              type: integer
              example: 20
    SubwalletErrorResponse:
      type: object
      required:
        - status
        - message
      properties:
        status:
          type: string
          example: error
        message:
          type: string
        data:
          nullable: true
          description: Usually null or an empty object.
    SubwalletInboundTransaction:
      type: object
      properties:
        transaction_type:
          type: string
          enum:
            - inbound
        txHash:
          type: string
        walletReference:
          type: string
        addressReference:
          type: string
          nullable: true
        symbol:
          type: string
          example: USDT
        amount:
          type: string
          description: Amount in the token's smallest unit.
          example: '50000000'
        address:
          type: string
        network:
          type: string
          example: EVM
        chainId:
          type: string
          example: ethereum
        confirmed:
          type: boolean
        blockNumber:
          type: integer
        createdAt:
          type: string
          format: date-time
    SubwalletOutboundTransaction:
      type: object
      properties:
        transaction_type:
          type: string
          enum:
            - outbound
        txHash:
          type: string
          description: Empty string for a gasless transfer whose hash isn't known yet.
        walletReference:
          type: string
        addressReference:
          type: string
          nullable: true
        symbol:
          type: string
          nullable: true
          example: USDT
        amount:
          type: string
          nullable: true
          description: Amount in human-readable units.
          example: '50'
        sender:
          type: string
          nullable: true
        receiver:
          type: string
          nullable: true
        network:
          type: string
          description: Network type, returned as-is.
          example: tron
        status:
          type: string
          enum:
            - pending
            - confirmed
            - failed
        paymentReference:
          type: string
          example: payout-9922
        blockNumber:
          type: integer
          nullable: true
        createdAt:
          type: string
          format: date-time
  securitySchemes:
    SignedAuth:
      type: apiKey
      in: header
      name: authorization
      description: >-
        Signed (HMAC) authentication. Required headers: x-access-id,
        x-request-id (UUID v4), x-timestamp (ISO 8601, must be within 5 minutes
        of server time), and authorization: the Base64 HMAC-SHA256 of the JSON
        string
        {"timeStamp":"<x-timestamp>","requestId":"<x-request-id>","accessId":"<x-access-id>"}
        (keys in that order, no whitespace) using your access secret. The
        request body, method and path are not signed. The API key must be linked
        to an outlet.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.