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

# Register Inbound (Sunrise) Transfer

> Register Travel Rule data for a crypto deposit that already settled on-chain before any exchange took place. Creates an inbound travelRule transaction (or reuses an unclaimed deposit) and resolves the transfer against your wallet address book. A transaction.created webhook fires for newly-created transactions.

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="Register Inbound Sunrise Transfer API Prompt"
  prompt={`Register Travel Rule data for a crypto deposit that settled on-chain BEFORE any exchange took place - because the sending VASP was unreachable at the time (the sunrise problem), or when backfilling historical deposits.

Endpoint:
POST https://verification.didit.me/v3/travel-rule/inbound/

Authentication:
Use the x-api-key header with my Didit API key. You are the beneficiary VASP.

Request body (application/json):
{
"chain": "ethereum",
"txid": "0xdeposit-hash",              // dedupe key: same txid + wallet_address returns the existing transfer
"wallet_address": "0xYourDepositWallet",
"amount": "500.00",
"currency": "USDC",
"originator_data": { "name": "Origin CASP SL" },      // IVMS-101 originator payload from the sender, if known
"beneficiary_data": { "name": "Ana Diaz" },           // IVMS-101 beneficiary payload (your customer)
"originating_vasp": { "name": "Origin CASP SL", "lei": "", "travel_address": "ta..." }  // optional sender identity
}

Behavior:
- Creates an inbound travelRule transaction (or reuses an unclaimed recorded deposit) and resolves it against your wallet address book:
- no matching entry -> ON_HOLD
- entry exists, ownership unproven -> UNCONFIRMED_OWNERSHIP
- name does not match the entry's holder_name -> COUNTERPARTY_MISMATCHED_DATA
- verified entry + name match -> COMPLETED then immediately FINISHED (the deposit already settled).
- Naming originating_vasp catalogues the sender in the VASP directory (with its travel_address when supplied) so future exchanges route over TRP instead of email.
- Fires transaction.created (when new) plus travel_rule.status.updated per transition. If crypto monitoring is enabled, the deposit is also AML-screened and billed at the standard monitoring rate.

What to read from the response:
- created - true (201) for a new transaction, false (200) when an existing one was reused.
- travel_rule.status - the resolved state (see above).

Full guide: /transaction-monitoring/travel-rule#after-deposit-sunrise-registration.`}
/>


## OpenAPI

````yaml POST /v3/travel-rule/inbound/
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/inbound/:
    post:
      tags:
        - Travel Rule
      summary: Register an after-deposit (sunrise) inbound transfer
      description: >-
        Register Travel Rule data for a crypto deposit that already settled
        on-chain before any exchange took place. Creates an inbound travelRule
        transaction (or reuses an unclaimed deposit) and resolves the transfer
        against your wallet address book. A transaction.created webhook fires
        for newly-created transactions.
      operationId: registerTravelRuleInbound
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleInboundRequest'
            example:
              chain: ethereum
              txid: 0xdeposit-hash
              wallet_address: 0xYourDepositWallet
              amount: '500.00'
              currency: USDC
              originator_data:
                name: Origin CASP SL
              beneficiary_data:
                name: Ana Diaz
              originating_vasp:
                name: Origin CASP SL
                lei: ''
                travel_address: ta...
      responses:
        '200':
          description: An existing unclaimed deposit was reused (created is false).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleInboundResponse'
        '201':
          description: A new inbound transaction and transfer were created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleInboundResponse'
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X POST https://verification.didit.me/v3/travel-rule/inbound/ \
              -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \
              -d '{"chain":"ethereum","txid":"0xdeposit-hash","wallet_address":"0xYourDepositWallet","amount":"500.00","currency":"USDC"}'
components:
  schemas:
    TravelRuleInboundRequest:
      type: object
      required:
        - chain
        - txid
        - wallet_address
        - amount
        - currency
      properties:
        chain:
          type: string
          description: Chain the deposit settled on, e.g. "ethereum".
        txid:
          type: string
          description: On-chain transaction hash. Deduped together with wallet_address.
        wallet_address:
          type: string
          description: The destination wallet you received the deposit on.
        amount:
          type: string
          description: Deposit amount as a decimal string.
        currency:
          type: string
          description: Deposit asset, e.g. "USDC".
        originator_data:
          type: object
          description: IVMS-101 originator payload from the sending VASP, if known.
          additionalProperties: true
        beneficiary_data:
          type: object
          description: IVMS-101 beneficiary payload (your customer).
          additionalProperties: true
        originating_vasp:
          type: object
          description: Optional description of the sending VASP.
          properties:
            name:
              type: string
            lei:
              type: string
            travel_address:
              type: string
              description: Travel address that lets Didit reach the sender on the TRP rail.
    TravelRuleInboundResponse:
      type: object
      properties:
        transaction_id:
          type: string
          format: uuid
          description: Didit transaction UUID for the inbound deposit.
        txn_id:
          type: string
          description: Didit-generated txn_id for the sunrise transaction.
        created:
          type: boolean
          description: >-
            true when a new transaction was minted (HTTP 201); false when an
            existing unclaimed deposit was reused (HTTP 200).
        travel_rule:
          $ref: '#/components/schemas/TravelRuleTransferDetail'
    TravelRuleTransferDetail:
      type: object
      description: >-
        Full transfer object returned by the ownership-confirmation and
        finish/cancel endpoints. originator_data/beneficiary_data are omitted
        while PII is masked (see description).
      properties:
        uuid:
          type: string
          format: uuid
        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
        direction:
          type: string
          enum:
            - INBOUND
            - OUTBOUND
        rail:
          type: string
          nullable: true
          enum:
            - INTERNAL
            - TRP
            - GTR
            - EMAIL
            - null
        protocol:
          type: string
          nullable: true
        ivms_version:
          type: string
          example: ivms101.2023
        required:
          type: boolean
        ownership_confirmed:
          type: boolean
          nullable: true
        deadline_at:
          type: string
          format: date-time
          nullable: true
        timeline:
          type: array
          items:
            type: object
            properties:
              status:
                type: string
              at:
                type: string
                format: date-time
              detail:
                type: string
        counterparty_vasp:
          type: object
          nullable: true
          properties:
            name:
              type: string
            lei:
              type: string
            dd_score:
              type: integer
        originator_data:
          type: object
        beneficiary_data:
          type: object
        created_at:
          type: string
          format: date-time
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key

````