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

# Travel Rule 이메일 픽업 응답 API: 이메일 채널

> Didit의 일회용 이메일 픽업 링크로 Travel Rule 거래를 수락하거나 거부합니다. 송금인 성명 일치 확인을 위해 수취인 성명을 제공합니다.



이메일 픽업 API 프롬프트에 응답하기
        프롬프트를 클립보드에 복사



      
      

\<pre>

\`Accept or decline a pending Travel Rule exchange from a one-time email pickup link - the counterparty-facing side of Didit's EMAIL fallback rail.

Endpoint:
POST https://verification.didit.me/v3/travel-rule/pickup/{token}/respond/

Authentication:
None - the one-time link token is the credential.

Request body (application/json):
\{"decision": "accept", "beneficiary_name": "Carlos Ruiz"}
or
\{"decision": "decline", "decline_reason": "not_our_customer"}

Optional fields:
\- ivms_response - your full IVMS 101 response (up to 16384 characters); its beneficiary name wins over beneficiary_name.
\- beneficiary_name - up to 255 characters.
\- decline_reason - data_mismatch | not_our_customer | wallet_not_hosted | sanctions | risk_appetite | jurisdiction | insufficient_data | other, or empty (the default) for no reason.
\- decline_detail - up to 512 characters; required when decision is decline and decline_reason is other.
\- contact - the contact the link was sent to, as a UUID; when the body leaves it out, the contact query parameter (the link's ?contact= value) is used.

Behavior:
\- accept - the beneficiary name is run through the originator's name rule: the transfer moves to COMPLETED on a match, COUNTERPARTY_MISMATCHED_DATA otherwise. Supply the name exactly as your records hold it. The response is {"status": "..."}.
\- decline - the transfer moves to COUNTERPARTY_VASP_GENERAL_DECLINE, and the sender's timeline records the reason. The response is {"status": "COUNTERPARTY_VASP_GENERAL_DECLINE", "decline_reason": "..."}.
\- You can answer once: afterwards both pickup endpoints return 410.

Failure modes:
\- 404 - unknown token.
\- 410 - the window closed: the counterparty already answered, the transfer left AWAITING_COUNTERPARTY, or the pickup deadline passed.
\- 400 - decision is missing or is not accept or decline, decline_detail is missing for a decline with reason other, ivms_response is not an IVMS 101 object or is too long, or a contact in the body is not a UUID ({"contact": ["Must be a valid UUID."]}).

Counterparty integration guide: /transaction-monitoring/travel-rule-interoperability#email-pickup.`

\</pre>



      
      

붙여넣을 곳



## OpenAPI

````yaml ko/openapi-25.json POST /v3/travel-rule/pickup/{token}/respond/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: 신분증 인증 API입니다. x-api-key 헤더로 인증합니다.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/travel-rule/pickup/{token}/respond/:
    post:
      tags:
        - Travel Rule
      summary: 이메일 레일 픽업에 응답
      description: >-
        공개 및 미인증 상태입니다. 이메일로 전송된 수령 링크에서 교환을 수락하거나 거부합니다. 수락 시 beneficiary_name이
        송금인의 name_matching_strictness 정책에 따라 검사됩니다.
      operationId: respondTravelRulePickup
      parameters:
        - name: token
          in: path
          required: true
          schema:
            type: string
        - name: contact
          in: query
          required: false
          schema:
            type: string
          description: 링크의 `?contact=` 값입니다. 본문에서 `contact`를 보내지 않을 때 사용됩니다.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRulePickupRespondRequest'
            example:
              decision: accept
              beneficiary_name: Carlos Ruiz
      responses:
        '200':
          description: >-
            그 결과인 교환 상태: 수락 후에는 COMPLETED 또는 COUNTERPARTY_MISMATCHED_DATA, 거부
            후에는 `decline_reason`도 함께 반환하는 COUNTERPARTY_VASP_GENERAL_DECLINE입니다.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                  decline_reason:
                    type: string
                    description: 거부된 후 표시됩니다.
              examples:
                accepted:
                  value:
                    status: COMPLETED
                declined:
                  value:
                    status: COUNTERPARTY_VASP_GENERAL_DECLINE
                    decline_reason: not_our_customer
        '400':
          description: >-
            필드가 유효하지 않습니다. 예를 들어 `decision`이 누락되었거나 `accept` 또는 `decline`이 아닌
            경우, `decline_reason: other`인 거부에서 `decline_detail`이 누락된 경우,
            `ivms_response`가 IVMS 101 객체가 아니거나 16384자를 초과하는 경우, 또는 본문의
            `contact`가 UUID가 아닌 경우(`{"contact": ["Must be a valid UUID."]}`)
            등입니다.
          content:
            application/json:
              example:
                decline_detail:
                  - Say what the reason is when you choose another reason.
        '404':
          description: 알 수 없는 token입니다.
        '410':
          description: >-
            기간이 마감되었습니다. 거래 상대방이 이미 응답했거나, 전송이 AWAITING_COUNTERPARTY 상태를 벗어났거나,
            마감 시한이 지났습니다.
      security:
        - {}
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X POST
            https://verification.didit.me/v3/travel-rule/pickup/{token}/respond/
            \
              -H 'Content-Type: application/json' \
              -d '{"decision": "accept", "beneficiary_name": "Carlos Ruiz"}'
components:
  schemas:
    TravelRulePickupRespondRequest:
      type: object
      required:
        - decision
      properties:
        decision:
          type: string
          enum:
            - accept
            - decline
        beneficiary_name:
          type: string
          description: >-
            기록에 보관된 수취인 이름으로, 송금 VASP의 이름 규칙을 통과한 값입니다. 수취인 이름이 지정된 경우
            `ivms_response`가 우선합니다.
          maxLength: 255
        decline_reason:
          type: string
          enum:
            - ''
            - data_mismatch
            - not_our_customer
            - wallet_not_hosted
            - sanctions
            - risk_appetite
            - jurisdiction
            - insufficient_data
            - other
          description: 거부하는 이유입니다. 송신 VASP의 전송 타임라인에 기록됩니다. 사유를 제공하지 않은 경우 비어 있습니다(기본값).
        decline_detail:
          type: string
          maxLength: 512
          description: >-
            자유 형식 텍스트입니다. `decision`이 `decline`이고 `decline_reason`이 `other`일 때
            필수입니다.
        ivms_response:
          type: object
          description: 귀하의 전체 IVMS 101 응답입니다. 해당 수취인 이름이 `beneficiary_name`보다 우선 적용됩니다.
        contact:
          type: string
          format: uuid
          description: >-
            링크의 `?contact=` 값에서 가져온, 링크가 전송된 연락처입니다. 본문에서 생략된 경우 `contact` 쿼리
            파라미터가 사용됩니다.

````

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