> ## 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.

# Get Travel Rule Networks API

> Read each Travel Rule network's real state for your application: your own membership, Didit's membership, or why a network cannot send yet.

Get Travel Rule Networks API Prompt
Copy prompt to clipboard

<pre>
  \`Read, for my application, the real state of every Travel Rule network, the due-diligence questionnaire and my participants.

  Endpoint:
  GET [https://verification.didit.me/v3/travel-rule/networks/](https://verification.didit.me/v3/travel-rule/networks/)

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

  What to read from the response:

  * platform\_networks\_enabled - whether network access through Didit's membership is open. While false, questionnaire saves, submissions and network requests answer 403.
  * networks - keyed by gtr/trust/verifyvasp/sygna: {rail, mode, state, reason, platform_available, connected, participant, vasps_reachable, routed_30d}.
  * state: own\_membership | live\_through\_didit | off | didit\_onboarding | questionnaire\_needed | questionnaire\_in\_review | request\_access | request\_sent | unavailable | error.
  * reason: the machine-readable detail, for example didit\_membership\_not\_live, own\_membership\_only (TRUST) or provisioning\_failed.
  * participant: my own participant on that network (status, participant\_code, last\_error), or null.
  * questionnaire - status (draft | submitted | changes\_requested | approved | rejected), answers and Didit's review\_note.
  * participants - every participant I have, with its status history.

  Reading creates nothing. Full guide: /transaction-monitoring/travel-rule.\`
</pre>

Paste into

## Network states

A network sends for your application in one of two ways:

* **Your own membership** (`state: own_membership`): a membership you connected in **Marketplace**. It always takes precedence.
* **Didit's membership** (`state: live_through_didit`): Didit carries your application as its own participant on GTR or Sygna, with the participant code the network gave you. Messages never carry Didit's own code, and what the network sends to your participant code reaches your application.

Reaching a network through Didit's membership takes three steps: submit the [network questionnaire](https://docs.didit.me/management-api/travel-rule/submit-network-questionnaire.md), have Didit approve it, then [request the network](https://docs.didit.me/management-api/travel-rule/request-network.md). TRUST and VerifyVASP are reachable only through your own membership: TRUST admits members per VASP, and a VerifyVASP Enclave serves one VASP id, so you run your own.

While Didit's own membership of a network is not live, its `state` is `didit_onboarding` and nothing can send on it through Didit. `state` is configuration status, not a live health or delivery check.


## OpenAPI

````yaml GET /v3/travel-rule/networks/
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/networks/:
    get:
      tags:
        - Travel Rule
      summary: Get Travel Rule networks
      description: >-
        Read, for this application, every network's true state: whether it sends
        through your own membership or through Didit's, and why it cannot yet.
        Also returns the due-diligence questionnaire and your participants.
        Reading creates nothing.
      operationId: getTravelRuleNetworks
      responses:
        '200':
          description: Network states, questionnaire and participants.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleNetworksOverview'
              examples:
                Before the questionnaire:
                  value:
                    platform_networks_enabled: false
                    questionnaire:
                      status: draft
                      answers: {}
                      submitted_at: null
                      reviewed_at: null
                      review_note: ''
                      history: []
                      updated_at: null
                    participants: []
                    networks:
                      gtr:
                        rail: GTR
                        mode: unavailable
                        state: didit_onboarding
                        reason: didit_membership_not_live
                        platform_available: false
                        connected: false
                        participant: null
                        vasps_reachable: 0
                        routed_30d: 0
                      trust:
                        rail: TRUST
                        mode: unavailable
                        state: unavailable
                        reason: own_membership_only
                        platform_available: false
                        connected: false
                        participant: null
                        vasps_reachable: 0
                        routed_30d: 0
                      verifyvasp:
                        rail: VERIFYVASP
                        mode: unavailable
                        state: didit_onboarding
                        reason: didit_membership_not_live
                        platform_available: false
                        connected: false
                        participant: null
                        vasps_reachable: 0
                        routed_30d: 0
                      sygna:
                        rail: SYGNA
                        mode: unavailable
                        state: didit_onboarding
                        reason: didit_membership_not_live
                        platform_available: false
                        connected: false
                        participant: null
                        vasps_reachable: 0
                        routed_30d: 0
        '401':
          description: Missing or invalid API key.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X GET https://verification.didit.me/v3/travel-rule/networks/ \
              -H 'x-api-key: YOUR_API_KEY'
components:
  schemas:
    TravelRuleNetworksOverview:
      type: object
      properties:
        platform_networks_enabled:
          type: boolean
          description: >-
            Whether network access through Didit's membership is open. While
            false, questionnaire saves, submissions and network requests answer
            403.
        questionnaire:
          $ref: '#/components/schemas/TravelRuleNetworkQuestionnaire'
        participants:
          type: array
          items:
            $ref: '#/components/schemas/TravelRuleNetworkParticipant'
        networks:
          type: object
          readOnly: true
          description: >-
            Per network, how this application would send and why it cannot. No
            network, including GTR, is included by default: a network is
            reachable through your own connected membership, or through Didit's
            membership once Didit's membership of that network is live and your
            own participant on it is active. Not a live health or delivery
            check.
          properties:
            gtr:
              $ref: '#/components/schemas/TravelRuleNetworkState'
            trust:
              $ref: '#/components/schemas/TravelRuleNetworkState'
            verifyvasp:
              $ref: '#/components/schemas/TravelRuleNetworkState'
            sygna:
              $ref: '#/components/schemas/TravelRuleNetworkState'
    TravelRuleNetworkQuestionnaire:
      type: object
      properties:
        status:
          type: string
          enum:
            - draft
            - submitted
            - changes_requested
            - approved
            - rejected
          description: >-
            Answers can be saved while draft or changes_requested; submitted,
            approved and rejected are Didit's to move.
        answers:
          $ref: '#/components/schemas/TravelRuleNetworkQuestionnaireAnswers'
        submitted_at:
          type: string
          format: date-time
          nullable: true
        reviewed_at:
          type: string
          format: date-time
          nullable: true
        review_note:
          type: string
          description: Didit's note on its last decision, for example what to change.
        history:
          type: array
          readOnly: true
          description: Every status change, oldest first.
          items:
            type: object
            properties:
              at:
                type: string
                format: date-time
              from:
                type: string
              to:
                type: string
              note:
                type: string
                description: Review note or the network's answer, when there is one.
        updated_at:
          type: string
          format: date-time
          nullable: true
    TravelRuleNetworkParticipant:
      type: object
      description: This application's own participant on one network.
      properties:
        network:
          type: string
          enum:
            - gtr
            - trust
            - verifyvasp
            - sygna
        rail:
          type: string
          enum:
            - GTR
            - TRUST
            - VERIFYVASP
            - SYGNA
        mode:
          type: string
          enum:
            - platform
            - own
        status:
          type: string
          enum:
            - not_requested
            - questionnaire_pending
            - submitted_to_network
            - active
            - suspended
            - rejected
          description: >-
            not_requested: never requested, or the network refused the first
            request (see last_error); questionnaire_pending: waiting for the
            due-diligence questionnaire to be approved; submitted_to_network:
            handed to the network's onboarding; active: the network gave this
            application its own participant code; suspended / rejected: Didit
            suspended or rejected it.
        participant_code:
          type: string
        requested_at:
          type: string
          format: date-time
          nullable: true
        submitted_at:
          type: string
          format: date-time
          nullable: true
        activated_at:
          type: string
          format: date-time
          nullable: true
        suspended_at:
          type: string
          format: date-time
          nullable: true
        last_error:
          type: string
          description: >-
            The network's answer when it refused the registration; empty
            otherwise.
        history:
          type: array
          readOnly: true
          description: Every status change, oldest first.
          items:
            type: object
            properties:
              at:
                type: string
                format: date-time
              from:
                type: string
              to:
                type: string
              note:
                type: string
                description: Review note or the network's answer, when there is one.
    TravelRuleNetworkState:
      type: object
      description: >-
        How Travel Rule messages on one network would be sent for this
        application, and why they cannot be. Configuration status, not a live
        health or delivery check.
      properties:
        rail:
          type: string
          enum:
            - GTR
            - TRUST
            - VERIFYVASP
            - SYGNA
        mode:
          type: string
          enum:
            - own
            - didit
            - 'off'
            - unavailable
          description: >-
            own: the application's connected membership is used; didit: Didit's
            membership carries the application as its own active participant;
            off: platform routing disabled in disabled_networks with no own
            membership; unavailable: nothing can send on this network yet (see
            state and reason).
        state:
          type: string
          enum:
            - own_membership
            - live_through_didit
            - 'off'
            - didit_onboarding
            - questionnaire_needed
            - questionnaire_in_review
            - request_access
            - request_sent
            - unavailable
            - error
          description: >-
            own_membership: your connected membership sends; live_through_didit:
            your own participant on Didit's membership sends; off: you switched
            platform routing off; didit_onboarding: Didit's own membership of
            this network is not live yet, so it cannot carry anyone;
            questionnaire_needed / questionnaire_in_review: the due-diligence
            questionnaire must be submitted or is with Didit; request_access:
            the questionnaire is approved, request the network; request_sent:
            your participant is being onboarded; unavailable: see reason; error:
            see reason.
        reason:
          type: string
          enum:
            - own_membership_connected
            - platform_network_switched_off
            - own_membership_only
            - sandbox_application
            - didit_membership_not_live
            - participant_suspended
            - participant_rejected
            - questionnaire_not_submitted
            - questionnaire_submitted
            - questionnaire_changes_requested
            - questionnaire_rejected
            - participant_not_requested
            - participant_active
            - participant_key_missing
            - participant_key_unresolved
            - provisioning_failed
            - questionnaire_pending
            - submitted_to_network
          description: >-
            Machine-readable detail of state. own_membership_only: Didit does
            not carry applications on this network (TRUST), connect your own
            membership; sandbox_application: sandbox transfers never reach a
            network; provisioning_failed: the network refused the registration,
            the participant's last_error says why and requesting the network
            again retries.
        platform_available:
          type: boolean
          description: >-
            Whether Didit's own membership of this network is configured; not a
            live health check.
        connected:
          type: boolean
          description: >-
            Whether a connected customer membership exists. Credentials are
            validated locally; network validation occurs on a live exchange.
        participant:
          $ref: '#/components/schemas/TravelRuleNetworkParticipantSummary'
        vasps_reachable:
          type: integer
          description: Directory VASPs reachable on this network.
        routed_30d:
          type: integer
          description: >-
            This application's transfers carried on this network in the last 30
            days.
    TravelRuleNetworkQuestionnaireAnswers:
      type: object
      description: >-
        Didit's network due-diligence questionnaire. Saves are partial: a save
        keeps every answer it does not name. Submitting requires every field
        except lei and data_protection_contact_email, and the three attestations
        true.
      properties:
        legal_name:
          type: string
          maxLength: 255
        registration_number:
          type: string
          maxLength: 255
        incorporation_country:
          type: string
          minLength: 2
          maxLength: 2
          description: ISO 3166-1 alpha-2 country code.
        registered_address:
          type: string
          maxLength: 1000
        website:
          type: string
          format: uri
          maxLength: 500
        lei:
          type: string
          maxLength: 20
          description: Optional. A valid ISO 17442 LEI when given.
        licences:
          type: array
          minItems: 1
          items:
            type: object
            required:
              - regulator
              - jurisdiction
              - licence_type
              - licence_number
            properties:
              regulator:
                type: string
                maxLength: 255
              jurisdiction:
                type: string
                minLength: 2
                maxLength: 2
                description: ISO 3166-1 alpha-2 country code.
              licence_type:
                type: string
                maxLength: 255
              licence_number:
                type: string
                maxLength: 255
          description: Every licence or registration the VASP holds.
        operating_jurisdictions:
          type: array
          minItems: 1
          maxItems: 250
          items:
            type: string
            minLength: 2
            maxLength: 2
            description: ISO 3166-1 alpha-2 country code.
        compliance_officer_name:
          type: string
          maxLength: 255
        compliance_officer_email:
          type: string
          format: email
        aml_ctf_policy_attested:
          type: boolean
          description: Must be true to submit.
        sanctions_screening_attested:
          type: boolean
          description: Must be true to submit.
        data_protection_attested:
          type: boolean
          description: Must be true to submit.
        data_protection_contact_email:
          type: string
          format: email
          description: Optional.
        expected_monthly_transfers:
          type: integer
          minimum: 0
        expected_monthly_volume_usd:
          type: string
          format: decimal
          description: >-
            Expected monthly volume in USD, up to 2 decimal places. Returned as
            a string.
        assets:
          type: array
          minItems: 1
          maxItems: 200
          items:
            type: string
            maxLength: 32
          description: Asset tickers, stored upper-case, sorted and de-duplicated.
    TravelRuleNetworkParticipantSummary:
      type: object
      nullable: true
      description: >-
        This application's own participant on the network, or null when it has
        none.
      properties:
        mode:
          type: string
          enum:
            - platform
            - own
          description: >-
            platform: carried by Didit's membership; own: onboarded under the
            application's own membership.
        status:
          type: string
          enum:
            - not_requested
            - questionnaire_pending
            - submitted_to_network
            - active
            - suspended
            - rejected
          description: >-
            not_requested: never requested, or the network refused the first
            request (see last_error); questionnaire_pending: waiting for the
            due-diligence questionnaire to be approved; submitted_to_network:
            handed to the network's onboarding; active: the network gave this
            application its own participant code; suspended / rejected: Didit
            suspended or rejected it.
        participant_code:
          type: string
          description: >-
            The code the network gave this application (for GTR, its VASP code).
            Outbound messages carry this code, never Didit's own.
        requested_at:
          type: string
          format: date-time
          nullable: true
        activated_at:
          type: string
          format: date-time
          nullable: true
        last_error:
          type: string
          description: >-
            The network's answer when it refused the registration; empty
            otherwise.
  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.