> ## Documentation Index
> Fetch the complete documentation index at: https://direct-api.reap.global/llms.txt
> Use this file to discover all available pages before exploring further.

# List Treasury transactions

> Required API-key scope: `treasury_transactions:read`.

Lists every movement on a balance (deposits, withdrawals, payments, repayments and adjustments), newest first. `from`/`to` filter on inclusive UTC calendar days. Match your transfers on `transactionHash` (crypto) or `referenceId` (bank), and expect a short delay before a `COMPLETED` deposit raises your card credit limit. See [Treasury transactions](/concepts/treasury/transactions).



## OpenAPI

````yaml /openapi/2026-07-13.json get /2026-07-13/treasury/transactions
openapi: 3.1.0
info:
  title: Reap Business Account API
  description: >

    # Introduction


    The Reap Business Account API lets you manage cards, spend and Treasury

    funding for your Business Account from your own systems. Every endpoint is

    authenticated with an API key sent in the `x-api-key` header and versioned

    with a date in the URL (`/2026-07-13/...`).


    Guides, concepts and the full setup reference live on the docs site:

    [direct-api.reap.global](https://direct-api.reap.global).



    ## Errors


    All errors share a single JSON envelope:


    ```json

    {
      "statusCode": 400,
      "type": "INVALID_REQUEST_ERROR",
      "code": "SPEND_CAP_TOO_LOW",
      "message": "Spend cap cannot be lower than the amount already spent on this card.",
      "param": "spendCap",
      "requestId": "01H..."
    }

    ```


    - `statusCode`: HTTP status, duplicated in the body.

    - `type`: coarse category, **always present**. Branch on this for
    retry/re-auth decisions.

    - `code`: stable, machine-readable identifier. Present only for
    programmatically-actionable errors.

    - `message`: human-readable explanation, safe to surface to users.

    - `param`: offending field for validation errors (optional).

    - `details`: structured extra context such as validation issues or required
    API-key scopes (optional).

    - `requestId`: correlation id; include it when contacting support
    (optional).


    The specific error codes each endpoint can return are documented on that

    endpoint's responses below.


    ### Error types


    | Type | Description |

    | --- | --- |

    | `INVALID_REQUEST_ERROR` | The request was rejected due to invalid input, a
    missing resource, or a business-rule violation (HTTP 400/404/409/422). |

    | `AUTHENTICATION_ERROR` | Authentication is missing or invalid (HTTP 401).
    |

    | `PERMISSION_ERROR` | The caller is authenticated but not permitted to
    perform the action (HTTP 403). |

    | `RATE_LIMIT_ERROR` | Too many requests; retry after a delay (HTTP 429). |

    | `API_ERROR` | An unexpected error occurred on our side (HTTP 5xx). |

    | `UPSTREAM_ERROR` | An upstream service returned an error (HTTP 502/503). |
  version: '2026-07-13'
  contact: {}
servers:
  - url: https://api.global.direct.reap.global
security: []
tags: []
paths:
  /2026-07-13/treasury/transactions:
    get:
      tags:
        - Treasury
      summary: List Treasury transactions
      description: >-
        Required API-key scope: `treasury_transactions:read`.


        Lists every movement on a balance (deposits, withdrawals, payments,
        repayments and adjustments), newest first. `from`/`to` filter on
        inclusive UTC calendar days. Match your transfers on `transactionHash`
        (crypto) or `referenceId` (bank), and expect a short delay before a
        `COMPLETED` deposit raises your card credit limit. See [Treasury
        transactions](/concepts/treasury/transactions).
      operationId: listTreasuryTransactions
      parameters:
        - name: page
          required: false
          in: query
          description: >-
            Which page of results to return, starting at 1 (the default). Use it
            with `meta.totalPages` to go through all results.
          x-nestjs_zod-parent-additional-properties: false
          schema:
            minimum: 1
            maximum: 9007199254740991
            default: 1
            type: integer
        - name: limit
          required: false
          in: query
          description: >-
            How many items to return per page. It must be between 1 and 100
            (default 20).
          x-nestjs_zod-parent-additional-properties: false
          schema:
            minimum: 1
            maximum: 100
            default: 20
            type: integer
        - name: product
          required: true
          in: query
          description: The balance to list movements for.
          x-nestjs_zod-parent-additional-properties: false
          schema:
            type: string
            enum:
              - CARD
              - PAYMENTS
              - OPTIMIZE
              - GENERAL
        - name: type
          required: false
          in: query
          description: >-
            Filter by movement type: `DEPOSIT`, `WITHDRAW`, `PAYMENT`,
            `REPAYMENT` or `ADJUSTMENT`.
          x-nestjs_zod-parent-additional-properties: false
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
              enum:
                - DEPOSIT
                - WITHDRAW
                - PAYMENT
                - REPAYMENT
                - ADJUSTMENT
        - name: status
          required: false
          in: query
          description: >-
            Filter the underlying Treasury state: PENDING or COMPLETED. Optimize
            swaps can still have a pending or failed display status.
          x-nestjs_zod-parent-additional-properties: false
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
              enum:
                - PENDING
                - COMPLETED
        - name: from
          required: false
          in: query
          description: First UTC calendar day to include, for example `2026-10-01`.
          x-nestjs_zod-parent-additional-properties: false
          schema:
            type: string
            format: date
            pattern: >-
              ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
        - name: to
          required: false
          in: query
          description: Last UTC calendar day to include.
          x-nestjs_zod-parent-additional-properties: false
          schema:
            type: string
            format: date
            pattern: >-
              ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TreasuryTransactions'
              examples:
                history:
                  summary: Completed crypto deposit
                  value:
                    items:
                      - id: ttx_1
                        product: CARD
                        type: DEPOSIT
                        status: COMPLETED
                        direction: CREDIT
                        amount:
                          amount: '1000.000001'
                          currency: USDC
                        fee: null
                        creditedAmount:
                          amount: '7810.00000781'
                          currency: HKD
                        conversionRate: '7.81'
                        method:
                          type: CRYPTO
                          network: ETHEREUM
                        transactionHash: '0xabc'
                        referenceId: null
                        createdAt: '2026-10-01T03:00:00.000Z'
                        completedAt: '2026-10-01T03:05:00.000Z'
                    meta:
                      totalItems: 1
                      itemCount: 1
                      itemsPerPage: 20
                      totalPages: 1
                      currentPage: 1
        '400':
          description: '`BAD_REQUEST`'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                BAD_REQUEST:
                  summary: BAD_REQUEST
                  value:
                    statusCode: 400
                    type: INVALID_REQUEST_ERROR
                    message: Bad request.
        '401':
          description: '`UNAUTHORIZED`, `AUTH_CREDENTIAL_MISSING`, `API_KEY_INVALID`'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                UNAUTHORIZED:
                  summary: UNAUTHORIZED
                  value:
                    statusCode: 401
                    type: AUTHENTICATION_ERROR
                    message: Authentication required.
                AUTH_CREDENTIAL_MISSING:
                  summary: AUTH_CREDENTIAL_MISSING
                  value:
                    statusCode: 401
                    type: AUTHENTICATION_ERROR
                    code: AUTH_CREDENTIAL_MISSING
                    message: Authentication is required.
                API_KEY_INVALID:
                  summary: API_KEY_INVALID
                  value:
                    statusCode: 401
                    type: AUTHENTICATION_ERROR
                    code: API_KEY_INVALID
                    message: API key is invalid.
        '403':
          description: '`TREASURY_NOT_AVAILABLE`'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                FORBIDDEN:
                  summary: FORBIDDEN
                  value:
                    statusCode: 403
                    type: PERMISSION_ERROR
                    message: You do not have permission to perform this action.
                API_KEY_IP_NOT_ALLOWED:
                  summary: API_KEY_IP_NOT_ALLOWED
                  value:
                    statusCode: 403
                    type: PERMISSION_ERROR
                    code: API_KEY_IP_NOT_ALLOWED
                    message: Request IP is not allowed for this API key.
                AUTH_INSUFFICIENT_PERMISSIONS:
                  summary: AUTH_INSUFFICIENT_PERMISSIONS
                  value:
                    statusCode: 403
                    type: PERMISSION_ERROR
                    code: AUTH_INSUFFICIENT_PERMISSIONS
                    message: Insufficient permissions.
                    details:
                      requiredScopes:
                        - <required-scope>
                AUTH_METHOD_NOT_ALLOWED:
                  summary: AUTH_METHOD_NOT_ALLOWED
                  value:
                    statusCode: 403
                    type: PERMISSION_ERROR
                    code: AUTH_METHOD_NOT_ALLOWED
                    message: >-
                      This endpoint does not accept the credential type
                      provided.
                TREASURY_NOT_AVAILABLE:
                  summary: TREASURY_NOT_AVAILABLE
                  value:
                    statusCode: 403
                    type: PERMISSION_ERROR
                    code: TREASURY_NOT_AVAILABLE
                    message: Treasury is not available for this business.
        '429':
          description: '`API_KEY_RATE_LIMITED`'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                API_KEY_RATE_LIMITED:
                  summary: API_KEY_RATE_LIMITED
                  value:
                    statusCode: 429
                    type: RATE_LIMIT_ERROR
                    code: API_KEY_RATE_LIMITED
                    message: API key rate limit exceeded.
        '500':
          description: '`INTERNAL_ERROR`'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                INTERNAL_ERROR:
                  summary: INTERNAL_ERROR
                  value:
                    statusCode: 500
                    type: API_ERROR
                    message: An unexpected error occurred.
      security:
        - apiKey: []
components:
  schemas:
    TreasuryTransactions:
      type: object
      properties:
        items:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                description: The transaction's ID, for example `ttx_...`.
              product:
                type: string
                enum:
                  - CARD
                  - PAYMENTS
                  - OPTIMIZE
                  - GENERAL
                description: >-
                  The Reap balance this funding or transaction applies to:
                  `CARD` (the card account), `PAYMENTS`, `OPTIMIZE` or
                  `GENERAL`.
              type:
                type: string
                enum:
                  - DEPOSIT
                  - WITHDRAW
                  - PAYMENT
                  - REPAYMENT
                  - ADJUSTMENT
                description: >-
                  The kind of movement: `DEPOSIT`, `WITHDRAW`, `PAYMENT`,
                  `REPAYMENT` or `ADJUSTMENT`.
              status:
                type: string
                enum:
                  - PENDING
                  - REQUESTED
                  - APPROVED
                  - COMPLETED
                  - REJECTED
                  - FAILED
                  - INVALID
                  - NONE
                description: >-
                  The transaction state. `COMPLETED` is settled. For `CARD`
                  deposits, rejected transfers are removed from the history and
                  never appear as `REJECTED` or `FAILED`; `REJECTED`, `FAILED`,
                  `REQUESTED`, `APPROVED`, `INVALID` and `NONE` can appear on
                  other products and are not accepted by the `status` filter,
                  which takes `PENDING` or `COMPLETED` only.
              direction:
                type: string
                enum:
                  - CREDIT
                  - DEBIT
                description: '`CREDIT` is funds in, `DEBIT` is funds out.'
              amount:
                type: object
                properties:
                  amount:
                    type: string
                    description: Decimal string, preserving the asset precision.
                  currency:
                    type: string
                required:
                  - amount
                  - currency
                description: The movement amount.
              fee:
                anyOf:
                  - type: object
                    properties:
                      amount:
                        type: string
                        description: Decimal string, preserving the asset precision.
                      currency:
                        type: string
                    required:
                      - amount
                      - currency
                  - type: 'null'
                description: Null when Treasury does not expose a separate fee.
              creditedAmount:
                anyOf:
                  - type: object
                    properties:
                      amount:
                        type: string
                        description: Decimal string, preserving the asset precision.
                      currency:
                        type: string
                    required:
                      - amount
                      - currency
                  - type: 'null'
                description: The amount credited after conversion or fees.
              conversionRate:
                anyOf:
                  - type: string
                  - type: 'null'
                description: The applied conversion rate, when applicable.
              method:
                anyOf:
                  - type: object
                    properties:
                      type:
                        type: string
                        enum:
                          - CRYPTO
                          - BANK_TRANSFER
                      network:
                        anyOf:
                          - type: string
                          - type: 'null'
                        description: Null when Treasury does not return the bank rail.
                    required:
                      - type
                      - network
                  - type: 'null'
              transactionHash:
                anyOf:
                  - type: string
                  - type: 'null'
                description: The on-chain transaction hash for crypto deposits.
              referenceId:
                anyOf:
                  - type: string
                  - type: 'null'
                description: The `IBM-XXXXXX` Reference ID for bank deposits.
              createdAt:
                type: string
                format: date-time
                pattern: >-
                  ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                description: When the transaction was recorded, in UTC.
              completedAt:
                anyOf:
                  - type: string
                    format: date-time
                    pattern: >-
                      ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                  - type: 'null'
                description: When the transaction settled, in UTC.
            required:
              - id
              - product
              - type
              - status
              - direction
              - amount
              - fee
              - creditedAmount
              - conversionRate
              - method
              - transactionHash
              - referenceId
              - createdAt
              - completedAt
        meta:
          type: object
          properties:
            totalItems:
              type: number
              description: How many items match your filters, across all pages.
            itemCount:
              type: number
              description: How many items are on this page.
            itemsPerPage:
              type: number
              description: The page size you asked for with `limit`.
            totalPages:
              type: number
              description: >-
                How many pages there are in total. Keep requesting the next
                `page` until you reach this number.
            currentPage:
              type: number
              description: The page number you're looking at, starting at 1.
          required:
            - totalItems
            - itemCount
            - itemsPerPage
            - totalPages
            - currentPage
      required:
        - items
        - meta
    ErrorResponse:
      type: object
      properties:
        statusCode:
          type: integer
          minimum: 100
          maximum: 599
          description: The HTTP status code, repeated in the body for convenience.
        type:
          type: string
          enum:
            - INVALID_REQUEST_ERROR
            - AUTHENTICATION_ERROR
            - PERMISSION_ERROR
            - RATE_LIMIT_ERROR
            - API_ERROR
            - UPSTREAM_ERROR
          description: >-
            The broad kind of error, for example `RATE_LIMIT_ERROR`. It's always
            present: use it to decide whether to retry, re-authenticate or fix
            the request.
        code:
          description: >-
            A stable, machine-readable error code, for example
            `CARD_CREATION_REQUIRES_DEPOSIT`. It's present when there's a
            specific action you can take, and each endpoint lists the codes it
            can return.
          type: string
        message:
          type: string
          description: >-
            A plain-English explanation of the error that's safe to show to your
            users.
        param:
          description: >-
            The request field that caused a validation error, for example
            `spendCap`.
          type: string
        details:
          description: >-
            Extra structured information, such as the list of validation issues
            or the API-key scopes your key is missing.
        requestId:
          description: >-
            A unique ID for this request. Include it when you contact Reap
            Support so the team can find it.
          type: string
      required:
        - statusCode
        - type
        - message
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: Enter your API key

````

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