---
title: "Complete exchange transfer"
method: POST
path: "/exchange_transfers/{id}/complete"
tags: ["Exchange transfers"]
---

# Complete exchange transfer

`POST /exchange_transfers/{id}/complete`

Updates the status of an exchange transfer to `COMPLETED`. Make this request once the exchange transfer has been made on both the ledger and on internal systems.

## Path parameters

- `id` string, uuid, required

## Response `200`

Successfully completed exchange transfer.

- FiatExchangeTransferExecuteResponse — JSON response object that represents an exchange transfer.
  - `exchange_transfer_id` string, uuid, required — Unique identifier of the exchange transfer.
  - `state` 'EXECUTED' | 'COMPLETED' | 'FAILED', required — State of the exchange transfer.
  - `type` 'FIRM' | 'INDICATIVE', required — Indicates the exchange transfer's quoted FX rate type.
  - `sender_address` string, required — RippleNet account name and address of the sender, in the format `accountname@ripplenetaddress`. For example, `new_york@rn.us.ny.new_york`.
  - `receiver_address` string, required — RippleNet account name and address of the receiver, in the format `accountname@ripplenetaddress`. For example, `new_york@rn.us.ny.new_york`.
  - `source_amount` number, required — Sending amount of the exchange transfer.
  - `destination_amount` number, required — Receiving amount of the exchange transfer.
  - `source_currency` string, required — Sending currency of the exchange transfer.
  - `destination_currency` string, required — Receiving currency of the exchange transfer.
  - `fx_transfer_rate` ExchangeTransferRate, required — Describes an exchange rate used in an exchange transfer.
    - `rate` number, required — Exchange rate used to make the exchange transfer.
    - `base_currency` string, required — Base currency for custom rate for the sending account.
    - `counter_currency` string, required — Counter currency for custom rate for the sending account.
    - `rate_type` string, required — Rate type used to make the exchange transfer. Valid values are `BUY` or `SELL`.
  - `end_to_end_id` string, required — ID set by the sender that is persisted on all fiat node instances that participated in the transfer.
  - `internal_id` string, required — Internal ID that the sender can optionally specify. Only visible to the sender. Only the sending fiat node instance stores this ID.
  - `user_info` FiatExchangeTransferUserInfo[], required — Custom information set by a RippleNet address involved in the exchange transfer.
    - `node_address` string, required — RippleNet address of the fiat node instance that set the user information.
    - `state` 'EXECUTED' | 'COMPLETED' | 'FAILED', required — State of the exchange transfer set when the RippleNet address set the user information.
    - `json` object, required — One or more arbitrary key/value pairs.
    - `created_at` string, date-time — timestamp of when this user info was created

## Other responses

- `404` — Exchange transfer not found.

---

[API](https://skmtc.net/ripple/apis/ripplenet-server-api.md) · [All operations](https://skmtc.net/ripple/apis/ripplenet-server-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/ripple/ripplenet-server-api/revisions/7843f07ca150/schema)
