---
title: "Create rate"
method: POST
path: "/config/rates"
tags: ["Rates"]
---

# Create rate

`POST /config/rates`

Creates an exchange rate for a specified currency pair.

**Example** - Applying a margin to the live FX rate:<br>
A USD-GBP live FX rate of 0.80 is provided by a third-party rate provider and you want to reduce that rate by 20 BPS. In this API call, you would set `"value_type": "MARGIN"`, then `"margin_type": "BPS"`, and `"rate": "20"`. After that, during the `Get quotes` call, the final FX rate will be calculated as 0.80*(1-(20/10000))=`0.7984` and then applied during quote creation.

## Request body

- RateRequest — Use this JSON request body to create an exchange rate for a base and counter currency.
  - `expiration_offset` integer, required — Set to the amount of time in milliseconds that the rate is valid for after the rate's `created_date` value. Set to `0` to indicate that the rate does not expire. The value returned in the response object for this field is `null`. Refer to the `expires_at` value in the response object to verify your expiration offset timing.
  - `order_type` 'buy' | 'sell', required — Set to the order type for the exchange rate.
  - `rate` number, required — This value of this field represents either rate or margin based on what you specify in the `value_type` field. If you specify `value_type=rate`, set the value of this field to the exchange rate for a base and counter currency. The rate can use up to 6 decimal places. If you specify `value_type=margin`, set the value of this field depending on the unit of margin you specified in the `margin_type` field.
  - `base_currency` string, required — Set to the base currency of the exchange rate.
  - `counter_currency` string, required — Set to the counter currency of the exchange rate.
  - `ledger` RatePerLedgerRequest — Use the `ledger` request object to create an exchange rate that applies to exchanges between a specific source ledger and destination ledger.
    - `source_ledger` string, required — Set to the source ledger associated with the exchange rate.
    - `destination_ledger` string, required — Set to the destination ledger associated with the exchange rate.
  - `account` RatePerAccountRequest — Use the `account` request object to create an exchange rate that applies to exchanges between a specific source ledger account and destination ledger account.
    - `source_ledger` string, required — Set to the source ledger associated with the exchange rate.
    - `destination_ledger` string, required — Set to the destination ledger associated with the exchange rate.
    - `source_ledger_account` string, required — Set to the account on the source ledger associated with the rate.
    - `destination_ledger_account` string, required — Set to the account on the destination ledger associated with the rate.
  - `lower_limit` number — To create a slab-based exchange rate, provide the lower limit of the slab. You must also provide an `upper_limit` value.
  - `upper_limit` number — To create a slab-based exchange rate, provide the upper limit of the slab. You must also provide a `lower_limit` value.
  - `payout_method` string — The payout method for the rate.
  - `value_type` 'MARGIN' | 'RATE' — Specify whether you want to use a live exchange rate (`MARGIN`) or an exchange rate manually configured by Ripple (`RATE`). If you set this value to `MARGIN`, you must also provide `margin_type`.
  - `margin_type` 'BPS' — Specify the unit of margin to be applied (BPS) in addition to the rate provided by Ripple. Specify this field only if you set `value_type` = `MARGIN`.

## Response `200`

Successfully created rate.

- RateResponse — JSON response object that represents an exchange rate.
  - `rate_id` string, uuid, required — Unique identifier of the exchange rate.
  - `expiration_offset` integer, required — <b>(DEPRECATED)</b> This property is deprecated. Refer to `expires_at` to determine rate expiration. <p>Amount of time in milliseconds that the rate is valid for after the rate's `created_date` value. For example, if the `expiration_offset` value is `100000` milliseconds, the rate expires `100000` milliseconds after this `created_date` value. If set to `0`, the rate does not expire.</p>
  - `order_type` 'buy' | 'sell', required — Order type for the exchange rate.
  - `rate_scale` integer, required — Number of decimal places to which the exchange rate is calculated. For example, if the `rate_scale` value is set to `9` and the `rate` value is set to `1.25`, the scaled value of the rate is `1.250000000`.
  - `rate` number, required — Exchange rate for the specified base and counter currency.
  - `base_currency` string, required — Base currency of the exchange rate.
  - `counter_currency` string, required — Counter currency of the exchange rate.
  - `source_currency` string, required — If `order_type` is set to `buy`, this is set to the base currency. If `order_type` is set to `sell`, this is set to the counter currency.
  - `destination_currency` string, required — If `order_type` is set to `buy`, this is set to the counter currency. If `order_type` is set to `sell`, this is set to the base currency.
  - `source_ledger` string, required — Source ledger associated with the exchange rate.
  - `destination_ledger` string, required — Destination ledger associated with the exchange rate.
  - `source_ledger_account` string, required — Account on the source ledger associated with rate.
  - `destination_ledger_account` string, required — Account on the destination ledger associated with rate.
  - `created_date` string, date-time, required — Date and time at which the exchange rate was created, as an ISO-8601 timestamp in UTC. Fiat determines a rate's expiration date and time based on this value and `expiration_offset` value. For example, if the `expiration_offset` value is `100000` milliseconds, the rate expires `100000` milliseconds after this `created_date` value.
  - `expires_at` string, date-time — The time in which this rate expires in system local timezone
  - `lower_limit` number, required — For a slab-based exchange rate, indicates the lower limit of the slab.
  - `upper_limit` number, required — For a slab-based exchange rate, indicates the upper limit of the slab.
  - `payout_method` string — The payout method for the rate.
  - `value_type` 'MARGIN' | 'RATE', required — Indicates whether the rate is a live exchange rate (`MARGIN`) or an exchange rate manually configured by Ripple (`RATE`). If this value is `MARGIN`, then `margin_type` will show a value.
  - `margin_type` 'BPS', required — Indicates the unit of margin applied in addition to the rate provided by Ripple. This field has a value only if `value_type` = `MARGIN`. If `value_type` is `RATE`, this field is `null`.

## Other responses

- `400` — Request error.

---

[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)
