# Update Transfer Request Status

This endpoint is used to approve or deny a transfer request as part of a dual-control workflow.

The request body requires an UpdateTransferRequestStatus object. It returns the updated TransferRequest object.

Endpoint: PATCH /api/v1/transfer-requests/{transfer_id}/status/
Version: Version: 2edadba5
Security: CodeBearer

## Path parameters:

  - `transfer_id` (string, required)

## Request fields (application/json):

  - `status` (string, required)
    Enum: "UNDER_REVIEW", "APPROVED", "PROCESSING", "PROCESSED", "REJECTED", "CANCELED", "DENIED"

  - `denial_reason` (any)

  - `denial_other_memo` (any)

## Response 200 fields (application/json):

  - `id` (string, required)

  - `team_id` (string, required)

  - `created_by_user` (object, required)

  - `created_by_user.user_id` (string, required)

  - `created_by_user.first_name` (string, required)

  - `created_by_user.last_name` (string, required)

  - `created_by_user.active` (boolean, required)

  - `created_by_user.role` (string, required)
    Enum: "MAKER", "CHECKER", "VIEWER"

  - `created_at` (string, required)

  - `reviewed_by_user` (any)

  - `reviewed_at` (any)

  - `denial_reason` (any)

  - `denial_other_memo` (any)

  - `status` (string, required)
    Enum: same as `status` (7 values)

  - `transfer` (any, required) — one of:
    - WireTransfer:
      - `id` (string, required)
      - `type` (string, required)
      - `counterparty_id` (string, required)
      - `origin_pocket_id` (string, required)
      - `amount` (object, required)
      - `amount.type` (string, required)
      - `amount.amount` (object, required)
      - `amount.amount.value` (integer, required)
        USD values are always in cents.
      - `amount.amount.currency` (string, required)
      - `amount.amount.formatted` (string)
      - `description` (any)
    - OnUsTransfer:
      - `id` (string, required)
      - `type` (string, required)
      - `origin_pocket_id` (string, required)
      - `amount` (any, required) — one of:
        - RequestedAmount:
          - `type` (string, required)
          - `amount` (object, required)
          - `amount.value` (integer, required)
            USD values are always in cents.
          - `amount.currency` (string, required)
          - `amount.formatted` (string)
        - FullWithdrawal:
          - `type` (string, required)
      - `details` (any, required) — one of:
        - OnUsPeerToPeerTransferDetails:
          - `type` (string, required)
          - `destination_counterparty_id` (string, required)
        - OnUsInternalReallocationTransferDetails:
          - `type` (string, required)
          - `destination_pocket_id` (string, required)
          - `transfer_type` (any)
      - `description` (any)
      - `end_to_end_identification` (any)
    - UsdcTransfer:
      - `id` (string, required)
      - `type` (string, required)
      - `counterparty_id` (string, required)
      - `origin_pocket_id` (string, required)
      - `amount` (object, required)
      - `amount.type` (string, required)
      - `amount.amount` (object, required)
      - `amount.amount.value` (integer, required)
        USD values are always in cents.
      - `amount.amount.currency` (string, required)
      - `amount.amount.formatted` (string)

  - `reviewers` (array, required)

  - `reject_reason` (any)

## Response 422 fields (application/json):

  - `detail` (array)

  - `detail.loc` (array, required)

  - `detail.msg` (string, required)

  - `detail.type` (string, required)

  - `detail.input` (any)

  - `detail.ctx` (object)


