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

# List Travel Rule Transfers

> List your Travel Rule transfers with their status, rail, counterparty VASP names, wallets and memos, filtered by direction, status, rail or counterparty.



List Travel Rule Transfers API Prompt
        Copy prompt to clipboard



      
      

\<pre>

\`List my application's Travel Rule transfers.

Endpoint:
GET https://verification.didit.me/v3/travel-rule/transfers/

Authentication:
Use the x-api-key header with my Didit API key.

Query parameters (all optional; direction, status, rail and kind are case-sensitive and take comma-separated values to select several, while currency, start_date, end_date and counterparty take one value each):
\- direction - INBOUND, OUTBOUND (case-sensitive).
\- status - any transfer status, for example AWAITING_COUNTERPARTY or COUNTERPARTY_VASP_NOT_FOUND.
\- rail - INTERNAL, TRP, GTR, TRUST, VERIFYVASP, SYGNA, EMAIL, TEST_VASP.
\- kind - withdrawal (outbound), message (an inbound transfer a rail created from a counterparty's message: a TRP inquiry, the INTERNAL inbound leg, or a GTR, VerifyVASP or Sygna Bridge message), deposit (any other inbound transfer).
\- currency - the transaction's currency, case-insensitive.
\- start_date, end_date - YYYY-MM-DD, inclusive, on the transfer's creation day in UTC.
\- counterparty - the id of a directory entry or Didit network member from GET /v3/travel-rule/vasps/.
\- limit (default 50), offset.

What to read from each row:
\- id (the transfer), transaction_id, txn_id, txn_date, kind, direction, status, rail, asset, amount, deadline_at, created_at.
\- reason - why a COUNTERPARTY_VASP_NOT_FOUND or COUNTERPARTY_VASP_NOT_REACHABLE transfer is stuck, for example email_undeliverable or directory_match_no_route; empty for any other status.
\- originator_vasp, beneficiary_vasp - VASP names: my own legal name on my side; on the other side the directory entry, the Didit network member, the TRP sender, the Didit Test VASP in sandbox, or the name the transfer declared. Empty when none is known.
\- originator_wallet, beneficiary_wallet, originator_memo, beneficiary_memo, originator_wallet_type, beneficiary_wallet_type (vasp | self_hosted | own).
\- matched_transaction_id - the other side of a deposit matched by hand.
Rows never carry person data. For a transfer's full detail, read the transaction with GET /v3/transactions/{transaction_id}/.

Failure modes:
\- 400 - a filter value is not valid, for example {"direction": ["Unknown value(s): inbound."]}, {"start_date": ["Use the YYYY-MM-DD format."]} or {"counterparty": ["Use a valid id."]}.

Full guide: /transaction-monitoring/travel-rule.`

\</pre>



      
      

Paste into



## OpenAPI

````yaml GET /v3/travel-rule/transfers/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: Identity verification API. Authenticate with x-api-key header.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/travel-rule/transfers/:
    get:
      tags:
        - Travel Rule
      summary: List Travel Rule transfers
      description: >-
        Your application's Travel Rule transfers, newest first, paginated with
        `limit` (default 50) and `offset`. Rows carry VASP names, wallets and
        memos only, never person data. Comma-separated values select several. An
        unknown value answers 400 naming the parameter, for example
        `{"direction": ["Unknown value(s): inbound."]}`.
      operationId: listTravelRuleTransfers
      parameters:
        - name: direction
          in: query
          required: false
          schema:
            type: string
          description: INBOUND, OUTBOUND, or both comma-separated. Case-sensitive.
        - name: status
          in: query
          required: false
          schema:
            type: string
          description: One or more transfer statuses, comma-separated.
        - name: rail
          in: query
          required: false
          schema:
            type: string
          description: >-
            One or more of INTERNAL, TRP, GTR, TRUST, VERIFYVASP, SYGNA, EMAIL,
            TEST_VASP, comma-separated.
        - name: kind
          in: query
          required: false
          schema:
            type: string
          description: withdrawal, deposit or message, comma-separated.
        - name: currency
          in: query
          required: false
          schema:
            type: string
          description: The transaction's currency, case-insensitive.
        - name: start_date
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Transfers created on or after this day (UTC), YYYY-MM-DD.
        - name: end_date
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Transfers created on or before this day (UTC), YYYY-MM-DD.
        - name: counterparty
          in: query
          required: false
          schema:
            type: string
            format: uuid
          description: >-
            The `id` of a directory entry or Didit network member from GET
            /v3/travel-rule/vasps/: your transfers with that counterparty. A
            value that is not a valid id answers 400.
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            minimum: 1
          description: Page size, default 50.
        - name: offset
          in: query
          required: false
          schema:
            type: integer
            minimum: 0
          description: Rows to skip.
      responses:
        '200':
          description: A page of transfers.
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                  next:
                    type: string
                    nullable: true
                  previous:
                    type: string
                    nullable: true
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/TravelRuleTransferRow'
              example:
                count: 1
                next: null
                previous: null
                results:
                  - id: 5b0f6c2e-2a4d-4f0e-9a41-0c3f9a7e1d22
                    transaction_id: a3c1e8f4-7b62-4d1a-8e0b-2f9d6c4b7a10
                    txn_id: wd-2026-10-19-0042
                    txn_date: '2026-10-19T08:41:12Z'
                    kind: withdrawal
                    direction: OUTBOUND
                    status: AWAITING_COUNTERPARTY
                    rail: TRP
                    asset: ETH
                    amount: '1.25'
                    originator_vasp: Origin CASP SL
                    beneficiary_vasp: Example Counterparty VASP
                    originator_wallet: '0x77ccff0cc624a53cd8b8d8703ced826710211ec7'
                    beneficiary_wallet: '0xede2d7e4f5b097e6391ab6bbcf2f47a53f4778cb'
                    originator_memo: ''
                    beneficiary_memo: ''
                    originator_wallet_type: vasp
                    beneficiary_wallet_type: vasp
                    matched_transaction_id: null
                    deadline_at: '2026-10-21T08:41:13Z'
                    created_at: '2026-10-19T08:41:13Z'
        '400':
          description: A filter value is not valid.
          content:
            application/json:
              example:
                start_date:
                  - Use the YYYY-MM-DD format.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            'https://verification.didit.me/v3/travel-rule/transfers/?direction=OUTBOUND&status=AWAITING_COUNTERPARTY'
            \
              -H 'x-api-key: YOUR_API_KEY'
components:
  schemas:
    TravelRuleTransferRow:
      type: object
      description: >-
        One Travel Rule transfer as the transfers list shows it: VASP names,
        wallets and memos only, never the originator or beneficiary person data.
      properties:
        id:
          type: string
          format: uuid
          description: The transfer's id.
        transaction_id:
          type: string
          format: uuid
          description: The Didit transaction the transfer belongs to.
        txn_id:
          type: string
          nullable: true
          description: >-
            Your own id for the transaction. Transfers Didit books for you, such
            as a Didit Test VASP inbound transfer, carry a generated one.
        txn_date:
          type: string
          format: date-time
        kind:
          type: string
          enum:
            - withdrawal
            - deposit
            - message
          description: >-
            withdrawal: outbound. message: an inbound transfer a rail created
            from a counterparty's message (a TRP inquiry, the INTERNAL inbound
            leg, or a GTR, VerifyVASP or Sygna Bridge message). deposit: any
            other inbound transfer.
        direction:
          type: string
          enum:
            - INBOUND
            - OUTBOUND
        status:
          type: string
          enum:
            - AWAITING_COUNTERPARTY
            - ON_HOLD
            - COMPLETED
            - FINISHED
            - CANCELLED
            - EXPIRED
            - COUNTERPARTY_MISMATCHED_DATA
            - COUNTERPARTY_VASP_NOT_FOUND
            - COUNTERPARTY_VASP_NOT_REACHABLE
            - UNCONFIRMED_OWNERSHIP
            - COUNTERPARTY_VASP_GENERAL_DECLINE
            - NOT_ENOUGH_COUNTERPARTY_DATA
            - NOT_APPLICABLE
        reason:
          type: string
          description: >-
            Why a `COUNTERPARTY_VASP_NOT_FOUND` or
            `COUNTERPARTY_VASP_NOT_REACHABLE` transfer is stuck, the same value
            as the transfer's own `reason`, so the list tells a bounced
            compliance email from a counterparty with no route without opening
            each transfer. `""` for any other status. See [Why a transfer is
            stuck](/transaction-monitoring/travel-rule#why-a-transfer-is-stuck).
        rail:
          type: string
          nullable: true
          enum:
            - INTERNAL
            - TRP
            - GTR
            - TRUST
            - VERIFYVASP
            - SYGNA
            - EMAIL
            - TEST_VASP
            - null
        asset:
          type: string
          description: The transaction's currency.
        amount:
          type: string
          description: The amount as a plain decimal, for example "1.25".
        originator_vasp:
          type: string
          description: >-
            Outbound: your VASP's legal name. Inbound: the counterparty's name,
            from its directory entry, the Didit network member, the TRP sender,
            the Didit Test VASP, or the name the transfer declared. Empty when
            none is known.
        beneficiary_vasp:
          type: string
          description: >-
            Outbound: the counterparty's name, worked out the same way. Inbound:
            your VASP's legal name.
        originator_wallet:
          type: string
        beneficiary_wallet:
          type: string
        originator_memo:
          type: string
          description: Memo or destination tag, empty on chains without one.
        beneficiary_memo:
          type: string
        originator_wallet_type:
          type: string
          enum:
            - vasp
            - self_hosted
            - own
          description: >-
            vasp, self_hosted (declared unhosted) or own (a wallet your address
            book records as yours). Your own side is always vasp.
        beneficiary_wallet_type:
          type: string
          enum:
            - vasp
            - self_hosted
            - own
        matched_transaction_id:
          type: string
          format: uuid
          nullable: true
          description: >-
            The other side of a deposit you matched to an announced transfer by
            hand.
        deadline_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            When the transfer expires if it is still waiting on its
            counterparty. Set on every transfer you create with `POST
            /v3/transactions/` that needs an exchange, outbound or inbound. Null
            below the threshold, on a Lightning payment the Travel Rule does not
            apply to, and on inbound transfers Didit creates when a counterparty
            reaches you (an inbound TRP inquiry, a network message or the
            INTERNAL inbound leg).
        created_at:
          type: string
          format: date-time
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Your application's API key, from Developers -> API keys in the Business
        Console. The primary key has full access. A named key can be scoped:
        none, read or write per resource, limited to some workflows or to
        approved sessions, to a list of IP addresses, and to an expiry date. 401
        means the key is missing, wrong, revoked or expired; 403 means the key
        has no access to this resource or action, or the request came from an
        address outside its IP list; 404 on a session route means the session is
        outside the key's workflows or statuses. A key without media access
        receives image, video and PDF URLs as null, and a key without sessions
        write receives session links and tokens as null. See
        https://docs.didit.me/console/api-keys.

````

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