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

# Update Travel Rule Settings

> Upsert the application's Travel Rule settings and VASP profile. Partial update — only send the fields you want to change. Setting `is_enabled: true` requires a non-blank `legal_name` (already stored or included in the same request), otherwise returns 400.

export const AgentPromptAccordion = ({prompt, title = "AI Agent Integration Prompt"}) => {
  const [copied, setCopied] = React.useState(false);
  const handleCopy = e => {
    e.stopPropagation();
    if (!prompt) return;
    navigator.clipboard.writeText(prompt.trim()).then(() => {
      setCopied(true);
      setTimeout(() => setCopied(false), 2000);
    });
  };
  const agents = ["Claude Code", "Codex", "Cursor", "Devin", "Windsurf", "GitHub Copilot"];
  return <div className="didit-agent-card">
      {}
      <div className="didit-agent-titlebar">
        <div className="didit-agent-dots" aria-hidden="true">
          <span className="didit-agent-dot didit-agent-dot-red"></span>
          <span className="didit-agent-dot didit-agent-dot-yellow"></span>
          <span className="didit-agent-dot didit-agent-dot-green"></span>
        </div>
        <span className="didit-agent-filename">{title}</span>
        <button type="button" className={`didit-agent-copy ${copied ? "didit-agent-copy-copied" : ""}`} onClick={handleCopy} title="Copy prompt to clipboard" aria-label={copied ? "Copied!" : "Copy prompt to clipboard"}>
          {copied ? <>
              <svg width="13" height="13" viewBox="0 0 16 16" fill="none">
                <path d="M3 8.5l3.5 3.5L13 4" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
              </svg>
              <span>Copied</span>
            </> : <>
              <svg width="13" height="13" viewBox="0 0 16 16" fill="none">
                <rect x="5" y="5" width="9" height="9" rx="1.5" stroke="currentColor" strokeWidth="1.5" />
                <path d="M11 5V3.5A1.5 1.5 0 0 0 9.5 2h-6A1.5 1.5 0 0 0 2 3.5v6A1.5 1.5 0 0 0 3.5 11H5" stroke="currentColor" strokeWidth="1.5" />
              </svg>
              <span>Copy</span>
            </>}
        </button>
      </div>

      {}
      <pre className="didit-agent-body"><code>{prompt.trim()}</code></pre>

      {}
      <div className="didit-agent-footer">
        <span className="didit-agent-footer-label">Paste into</span>
        <div className="didit-agent-chips">
          {agents.map(name => <span key={name} className="didit-agent-chip">{name}</span>)}
        </div>
      </div>
    </div>;
};

<AgentPromptAccordion
  title="Update Travel Rule Settings API Prompt"
  prompt={`Enable Travel Rule and configure the application's VASP profile and negotiation policy.

Endpoint:
PUT https://verification.didit.me/v3/travel-rule/settings/

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

Behavior:
- PUT is a PARTIAL update - send only the fields you want to change.
- Setting is_enabled: true requires a non-blank legal_name (already stored, or in the same request) - otherwise 400.

Example call:
curl -X PUT "https://verification.didit.me/v3/travel-rule/settings/" \\
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \\
-d '{
"is_enabled": true,
"legal_name": "Origin CASP SL",
"jurisdiction": "EU",
"name_matching_strictness": "DEFAULT",
"confirmation_timeout_hours": 48,
"timeout_outcome": "HOLD",
"is_discoverable": true
}'

Writable fields:
- is_enabled, legal_name, lei, jurisdiction (up to 8 chars, default "EU"), compliance_email, is_discoverable.
- name_matching_strictness: NONE | STRICT | DEFAULT | FUZZY.
- confirmation_timeout_hours (min 1, default 48), timeout_outcome (HOLD | REJECT | PROCEED), threshold_amount (decimal string; default "0.00" = every transfer in scope, matching the EU TFR), inbound_auto_accept.
- allow_self_declaration, allow_screenshot_proof - which fallback proof methods the wallet-ownership widget offers.
- auto_wallet_verification - auto-mint a wallet-ownership widget session when a transfer needs end-user proof (default true).
- vasp_attribution_enabled - resolve unroutable destination wallets through blockchain analytics (default true).
- disabled_networks - array of GTR | TRUST | VERIFYVASP | SYGNA to opt out of Didit's platform memberships. Networks you connected your own membership for (console Marketplace) are never affected.

Read-only fields (returned, never written): networks, travel_address.

Failure modes:
- 400 - is_enabled without a legal_name, invalid enum value, or confirmation_timeout_hours below 1.
- 401 - missing or malformed x-api-key.

Full guide: /transaction-monitoring/travel-rule#setup.`}
/>


## OpenAPI

````yaml PUT /v3/travel-rule/settings/
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/settings/:
    put:
      tags:
        - Travel Rule
      summary: Update Travel Rule settings
      description: >-
        Upsert the application's Travel Rule settings and VASP profile. Partial
        update — only send the fields you want to change. Setting `is_enabled:
        true` requires a non-blank `legal_name` (already stored or included in
        the same request), otherwise returns 400.
      operationId: updateTravelRuleSettings
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleSettingsUpdate'
            example:
              is_enabled: true
              legal_name: Origin CASP SL
              jurisdiction: EU
              name_matching_strictness: DEFAULT
              confirmation_timeout_hours: 48
              timeout_outcome: HOLD
              is_discoverable: true
      responses:
        '200':
          description: Updated settings and profile, in the same shape as GET.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleSettingsDetail'
        '400':
          description: Validation error, e.g. enabling without a legal_name.
          content:
            application/json:
              schema:
                type: object
              example:
                legal_name:
                  - legal_name is required to enable travel rule.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X PUT https://verification.didit.me/v3/travel-rule/settings/ \
              -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \
              -d '{"is_enabled": true, "legal_name": "Origin CASP SL", "jurisdiction": "EU"}'
components:
  schemas:
    TravelRuleSettingsUpdate:
      type: object
      properties:
        is_enabled:
          type: boolean
        legal_name:
          type: string
        lei:
          type: string
        jurisdiction:
          type: string
          maxLength: 8
        name_matching_strictness:
          type: string
          enum:
            - NONE
            - STRICT
            - DEFAULT
            - FUZZY
        confirmation_timeout_hours:
          type: integer
          minimum: 1
        timeout_outcome:
          type: string
          enum:
            - HOLD
            - REJECT
            - PROCEED
        compliance_email:
          type: string
          format: email
        is_discoverable:
          type: boolean
        threshold_amount:
          type: string
          description: >-
            Decimal string. Minimum transfer amount that triggers a managed
            exchange.
        inbound_auto_accept:
          type: boolean
        allow_self_declaration:
          type: boolean
        allow_screenshot_proof:
          type: boolean
          description: >-
            When true, the wallet-ownership widget offers screenshot upload as
            an ownership evidence method. Default true.
        auto_wallet_verification:
          type: boolean
        vasp_attribution_enabled:
          type: boolean
      description: All fields optional; PUT applies a partial update.
    TravelRuleSettingsDetail:
      type: object
      properties:
        is_enabled:
          type: boolean
          description: >-
            Whether the managed Travel Rule negotiation flow is active for
            outbound `travelRule` transactions on this application.
        jurisdiction:
          type: string
          maxLength: 8
          description: Your VASP's operating jurisdiction code. Default `"EU"`.
        name_matching_strictness:
          type: string
          enum:
            - NONE
            - STRICT
            - DEFAULT
            - FUZZY
          description: >-
            How strictly beneficiary names must match before a transfer can
            reach COMPLETED.
        confirmation_timeout_hours:
          type: integer
          minimum: 1
          description: >-
            Hours an AWAITING_COUNTERPARTY transfer may remain unconfirmed
            before the periodic sweeper expires it. Default 48.
        timeout_outcome:
          type: string
          enum:
            - HOLD
            - REJECT
            - PROCEED
          description: >-
            What happens to the underlying transaction when a transfer expires.
            Default HOLD.
        threshold_amount:
          type: string
          description: >-
            Decimal string. Minimum transfer amount that triggers a managed
            exchange; transfers below it resolve straight to NOT_APPLICABLE.
            Defaults to "0.00" (EU TFR applies no minimum amount).
        legal_name:
          type: string
          description: >-
            Your VASP's legal name. Required (non-blank) to set is_enabled to
            true.
        lei:
          type: string
          description: Your Legal Entity Identifier, surfaced in the VASP directory.
        compliance_email:
          type: string
          format: email
          description: Compliance contact email for your VASP profile.
        is_discoverable:
          type: boolean
          description: >-
            Whether your VASP profile appears in GET /v3/travel-rule/vasps/
            search results and can be reached on the INTERNAL rail. Default
            true.
        inbound_auto_accept:
          type: boolean
          description: >-
            When true, inbound transfers whose beneficiary wallet is a verified
            address-book entry with a matching name are accepted automatically,
            without a manual review step. Default false.
        allow_self_declaration:
          type: boolean
          description: >-
            When true, the wallet-ownership widget offers self-declaration as a
            fallback proof method. Default false.
        allow_screenshot_proof:
          type: boolean
          description: >-
            When true, the wallet-ownership widget offers screenshot upload as
            an ownership evidence method. Default true.
        auto_wallet_verification:
          type: boolean
          description: >-
            When true, submitting an outbound Travel Rule transfer that needs
            end-user proof of wallet control auto-mints a wallet-ownership
            widget session bound to the transaction and exposes it in the
            transaction's action_required block. Default true.
        vasp_attribution_enabled:
          type: boolean
          description: >-
            When true, an outbound Travel Rule transfer that no rail can route
            is attributed through blockchain analytics: the destination wallet
            is resolved to its owning VASP, the entity is recorded on the
            transfer and in the VASP directory, and the rails are re-run once
            with the attributed name. Default true.
        travel_address:
          type: string
          description: >-
            Read-only. Your VASP's own travel address - the encoded inbound TRP
            inquiry endpoint other VASPs use to reach you. Populated once your
            VASP profile is complete.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key

````