# Create an LRS quote

Creates a quote for an LRS remittance (`resource: payin`) or an LRS withdrawal (`resource: payout`). Use it to show the customer the exchange rate, the GST and the converted amount before they proceed. Payout quotes expire 30 minutes after they are created; for a payin quote, rely on the returned `expires_at`.
This is not the same endpoint as `POST /quotes` (`createQuote`). To create an LRS order, pass the payin quote's `id` as `lrs.lrs_quote_id` on `POST /orders`, with `currency` set to `USD` and `amount` equal to the `USD` side of the quote: `from.amount` when `source_currency` is `USD`, `to.amount` when it is `INR`.
For a payin quote, `bank_code` is required and must be a bank enabled for your account (see `GET /lrs/banks`). Either direction between `INR` and `USD` is supported. For a payout quote, only `USD` to `INR` is supported and `bank_code` must not be sent. LRS must be enabled for your account.

Endpoint: POST /lrs/quotes
Version: 1.0.0
Security: JWT

## Security:

  - `JWT` (unknown)
    http bearer JWT

## Request fields (application/json):

  - `resource` (string)
    What the quote prices.
- `payin` — an LRS remittance from a resident Indian customer. Requires `bank_code`.
- `payout` — a withdrawal back to the customer in India. Only `USD` to `INR` is supported, and
`bank_code` must not be sent.
    Enum: "payin", "payout"

  - `bank_code` (string)
    Code of the customer's bank, as returned by `GET /lrs/banks`. Required when `resource` is `payin`, and the bank must be enabled for your account. Rejected when `resource` is `payout`.
    Example: hdfc

  - `source_amount` (integer, required)
    The amount to convert, in the smallest unit of `source_currency` (paisa for INR, cents for USD). `4400000` is ₹44,000.00 when `source_currency` is `INR`. Must be a whole number; a string of digits such as `"4400000"` is also accepted. Send a positive integer; an optional leading sign is accepted. A decimal or an exponent is rejected with `400`. On a payin quote, the amount must fall within the minimum and maximum set for the bank, otherwise the request is rejected with `400` and the message states the limit.
    Example: 4400000

  - `source_currency` (string, required)
    The currency of `source_amount`. Must differ from `target_currency`.
    Enum: "INR", "USD"

  - `target_currency` (string, required)
    The currency to convert into. Must differ from `source_currency`.
    Enum: "INR", "USD"

## Request examples:

  - `Payin quote from INR to USD` (unknown)

  - `Payout quote from USD to INR` (unknown)

## Response 201:

  - `201` (unknown)
    Quote created

## Response 201 fields (application/json):

  - `id` (string)
    Unique identifier of the quote. Pass it as `lrs.lrs_quote_id` on an LRS order.
    Example: quote_6ab60de4Kx7Pq

  - `from` (object)
    The amount the quote converts from: your `source_amount` and `source_currency`.

  - `from.amount` (integer)
    Amount in the smallest unit of `currency` (paisa for INR, cents for USD).
    Example: 4400000

  - `from.currency` (string)
    Example: INR

  - `to` (object)
    The amount the quote converts to, in `target_currency`.
- `INR` to `USD` payin quote: GST is deducted from `from.amount` before conversion, so
`to.amount` is the USD remitted.
- `USD` to `INR` payin quote: `to.amount` is the INR equivalent of `from.amount`, plus any
transaction fee charged to the customer, with GST added.
- Payout quote: `to.amount` is the INR the customer receives after fees and GST are deducted.

On a payin quote, the side in `USD` is the amount an LRS order must be created for.

  - `to.amount` (integer)
    Amount in the smallest unit of `currency` (paisa for INR, cents for USD). `51763` is $517.63 when `currency` is `USD`.
    Example: 51763

  - `to.currency` (string)
    Example: USD

  - `fx_rate` (string)
    The exchange rate applied to the quote, as a decimal string in INR per 1 USD. It is expressed this way whichever direction the quote converts.
    Example: 84.85

  - `bank_code` (string)
    The `bank_code` the quote was created for. Present on payin quotes only.
    Example: hdfc

  - `total_tax` (integer)
    GST on the conversion, in paisa, whichever direction the quote converts. `7906` is ₹79.06.
    Example: 7906

  - `expires_at` (string)
    When the quote expires, as an ISO 8601 date-time in UTC. Payout quotes expire 30 minutes after `created_at`. For payin quotes, rely on this value rather than a fixed duration. An LRS order created from the quote expires at the same time, and an order cannot be created from an expired quote.
    Example: 2026-09-25T06:30:04.113Z

  - `created_at` (string)
    When the quote was created, as an ISO 8601 date-time in UTC.
    Example: 2026-09-25T06:00:04.113Z

## Response 400:

  - `400` (unknown)
    Bad Request — a required field is missing, a currency is not `INR` or `USD`, both currencies are the same, `source_amount` is not a whole number, `bank_code` is missing on a payin quote or is not enabled for your account, `bank_code` is sent on a payout quote, a payout quote is not `USD` to `INR`, the amount on a payin quote is outside the bank's limits, the converted amount on a payout quote is outside the range a payout can be sent for, or LRS is not enabled for your account.

## Response 400 fields (application/json):

  - `error` (string)
    Example: Bad Request

  - `message` (string)
    Example: Validation failed: Bank code can't be blank

## Response 401:

  - `401` (unknown)
    Unauthorized — invalid or missing authentication token

## Response 401 fields (application/json):

  - `error` (string)
    Example: Unauthorized

  - `message` (string)
    Example: Missing token

## Response 422:

  - `422` (unknown)
    Unprocessable Entity — no exchange rate is available for the bank right now.

## Response 422 fields (application/json):

  - `error` (string)
    Example: Unprocessable Entity

  - `message` (string)
    Example: No active exchange rate found

## Response 201 examples:

  - `Payin quote from INR to USD` (unknown)

  - `Payout quote from USD to INR` (unknown)

## Response 400 examples:

  - `bank_code missing on a payin quote` (unknown)

  - `Bank not enabled for your account` (unknown)

  - `Currency other than INR or USD` (unknown)

  - `source_currency equals target_currency` (unknown)

  - `source_amount is not a whole number` (unknown)

  - `Amount below the bank's minimum` (unknown)

  - `Amount above the bank's maximum` (unknown)

  - `bank_code sent on a payout quote` (unknown)

  - `Payout quote other than USD to INR` (unknown)

  - `Payout amount outside the range a payout can be sent for` (unknown)

