> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tender.cash/llms.txt
> Use this file to discover all available pages before exploring further.

# Quote Payment

> Get the all-in amount a customer would pay, without creating a payment

> [!NOTE]
>
> **Auth method: Basic (Access ID)** — this endpoint only requires your
> `x-access-id` header. No request signing is needed. See
> [Authentication](/api-reference/authentication.md#basic-access-id-authentication).

Prices a payment the same way [Initiate Payment By Fiat Currency](/api-reference/endpoint/initiate-payment-currency.md)
does, but creates nothing: no deposit address, no transaction and no webhook. Use it to show the
customer the exact total, including fees, before they commit to a chain and currency.

`totalPayable` is the same all-in figure that initiation returns as `amount`/`coinAmount`: the
payment plus the receive fee, any activation fee, any auto-payout fees and, on Tron, the gasless
network service fee. Prices can move between the quote and initiation, so the initiated amount can
differ slightly if time passes.

The same checks apply as on initiation, including the minimum amount and your outlet's allowed
currencies. Payment endpoints share a limit of 120 requests per minute. See
[Rate limits](/api-reference/rate-limits.md).

## Path Parameters

**id** `string` *required*

Fiat currency code that `amount` is priced in, such as `ngn` or `usd`. Use a fiat currency
listed by [Fetch All Currencies](/api-reference/endpoint/fetch-currencies.md) with `type=fiat`.

**Example:** `"ngn"`

## Headers

**x-access-id** `string` *required*

Your API access ID provided by Tender

**Example:** `"your-access-id-here"`

**Content-Type** `string` *required*

Media type of the request body

**Example:** `"application/json"`

## Body

**amount** `string` *required*

The price to charge, in the fiat currency named in the path, as a decimal string

**Example:** `"15000"`

**chain** `string` *required*

Chain identifier, as returned by [Fetch Allowed Chains](/api-reference/endpoint/fetch-chains.md)

**Example:** `"tron"`

**currency** `string` *required*

Cryptocurrency identifier. Must be supported on `chain` and allowed for your outlet.

**Example:** `"usdt"`

## Response

**status** `string` *required*

Status of the API request

**Example:** `"success"`

**message** `string` *required*

Human-readable message describing the result

**Example:** `"success"`

**data** `object` *required*

The quote

**data properties**

**coin** `string`

Cryptocurrency identifier

**Example:** `"usdt"`

**symbol** `string`

Cryptocurrency symbol

**Example:** `"USDT"`

**chain** `string`

Chain identifier

**Example:** `"tron"`

**currency** `string`

The fiat currency the quote is priced in

**Example:** `"ngn"`

**rate** `number`

Price of one unit of the cryptocurrency in `currency`

**Example:** `1500`

**usdRate** `number`

Price of one unit of the cryptocurrency in USD

**Example:** `1`

**coinAmount** `number`

The payment itself in the cryptocurrency, before fees

**Example:** `10`

**fee** `number`

Every fee the customer covers, combined, in the cryptocurrency

**Example:** `0.15`

**feeUSD** `number`

`fee` in USD

**Example:** `0.15`

**totalPayable** `number`

The all-in cryptocurrency amount the customer would send (`coinAmount` + `fee`)

**Example:** `10.15`

**totalPayableUSD** `number`

`totalPayable` in USD

**Example:** `10.15`

## Errors

| HTTP | Message | Cause |
| - | - | - |
| 400 | `amount must be a string` (or another validation message) | A required field is missing or has the wrong type |
| 400 | `Invalid chain` / `Chain not active` | Unknown or disabled `chain` |
| 400 | `invalid Currency` / `Currency not allowed` | Unknown `currency`, or not supported on `chain` |
| 400 | `Amount can't be Zero` | `amount` is zero or negative |
| 400 | `Minimum initiated amount is <n> USD` | The payment is below the minimum |
| 400 | `Invalid Coin Exchange Price` | No price is available for the currency right now |
| 403 | `You are not authorized to initiate transactions with this currency` | The currency isn't in your outlet's allowed currencies |

An unsupported fiat code in the path fails the request; use a code listed by Fetch All Currencies.
Error responses use the standard envelope with `data: null`. See [Errors](/api-reference/errors.md).

## Example request

```bash theme={null}
curl -X POST https://sandbox-api.tender.cash/v1/api/payment/quote/ngn \
  -H "x-access-id: your-access-id-here" \
  -H "Content-Type: application/json" \
  -d '{ "amount": "15000", "chain": "tron", "currency": "usdt" }'
```

## Example response

```json theme={null}
{
  "status": "success",
  "message": "success",
  "data": {
    "coin": "usdt",
    "symbol": "USDT",
    "chain": "tron",
    "currency": "ngn",
    "rate": 1500,
    "usdRate": 1,
    "coinAmount": 10,
    "fee": 0.15,
    "feeUSD": 0.15,
    "totalPayable": 10.15,
    "totalPayableUSD": 10.15
  }
}
```


## OpenAPI

````yaml POST /v1/api/payment/quote/{id}
openapi: 3.1.0
info:
  title: Tender API
  description: Tender Developer API for cryptocurrency payments and agent management
  version: 2.0.0
  contact:
    name: Tender Support
    url: https://tender.cash
servers:
  - url: https://secureapi.tender.cash
    description: Production Server
  - url: https://sandbox-api.tender.cash
    description: Sandbox Server
security:
  - SignedAuth: []
tags:
  - name: Agents
    description: Manage agents and sub-businesses
  - name: Transactions
    description: Payment and transaction operations
  - name: System
    description: System information and configuration
  - name: Webhooks
    description: Webhook management and logs
  - name: On-ramp
    description: Fiat-to-crypto on-ramp operations
  - name: Payouts
    description: Send crypto from merchant balance to a wallet address or payout account
  - name: Subwallets
    description: Provision and manage crypto wallet infrastructure for your end-users
  - name: Conversions
    description: Swap crypto between coins and chains, or convert to a payout account
paths:
  /v1/api/payment/quote/{id}:
    post:
      tags:
        - Transactions
      summary: Quote Payment
      description: >-
        Price a payment without creating it. `totalPayable` equals the all-in
        amount initiation would charge.
      operationId: quotePayment
      parameters:
        - name: id
          in: path
          required: true
          description: Fiat currency code that `amount` is priced in (e.g. ngn, usd)
          schema:
            type: string
          example: ngn
        - name: x-access-id
          in: header
          required: true
          description: Your API access ID provided by Tender
          schema:
            type: string
          example: your-access-id-here
        - name: Content-Type
          in: header
          required: true
          description: Media type of the request body
          schema:
            type: string
          example: application/json
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PaymentsQuoteRequest'
            example:
              amount: '15000'
              chain: tron
              currency: usdt
      responses:
        '200':
          description: Quote generated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentsQuoteResponse'
        '400':
          description: >-
            Validation error, unknown chain or currency, zero amount or below
            the minimum
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentsErrorResponse'
              example:
                status: error
                message: Minimum initiated amount is 5 USD
                data: null
        '401':
          description: Missing or unknown access ID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentsErrorResponse'
              example:
                status: error
                message: INVALID_REQUEST_SIGNATURE
                data: {}
        '403':
          description: Currency not allowed for the outlet
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentsErrorResponse'
              example:
                status: error
                message: >-
                  You are not authorized to initiate transactions with this
                  currency
                data: null
        '429':
          description: Too many requests
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentsErrorResponse'
              example:
                status: error
                message: Too many requests. Max 120 per 60s.
                data: null
      security:
        - AccessIdAuth: []
components:
  schemas:
    PaymentsQuoteRequest:
      type: object
      required:
        - amount
        - chain
        - currency
      properties:
        amount:
          type: string
          description: Price in the fiat currency named in the path
          example: '15000'
        chain:
          type: string
          example: tron
        currency:
          type: string
          description: Cryptocurrency identifier
          example: usdt
    PaymentsQuoteResponse:
      type: object
      properties:
        status:
          type: string
          example: success
        message:
          type: string
          example: success
        data:
          type: object
          properties:
            coin:
              type: string
              example: usdt
            symbol:
              type: string
              example: USDT
            chain:
              type: string
              example: tron
            currency:
              type: string
              description: Fiat currency of the quote
              example: ngn
            rate:
              type: number
              description: Price of one coin in `currency`
              example: 1500
            usdRate:
              type: number
              example: 1
            coinAmount:
              type: number
              description: The payment before fees
              example: 10
            fee:
              type: number
              description: All fees combined
              example: 0.15
            feeUSD:
              type: number
              example: 0.15
            totalPayable:
              type: number
              description: All-in amount; equals initiate's `amount`
              example: 10.15
            totalPayableUSD:
              type: number
              example: 10.15
    PaymentsErrorResponse:
      type: object
      required:
        - status
        - message
      properties:
        status:
          type: string
          enum:
            - error
        message:
          type: string
        data:
          nullable: true
          description: Usually `null` or `{}`
  securitySchemes:
    SignedAuth:
      type: apiKey
      in: header
      name: authorization
      description: >-
        Signed (HMAC) authentication. Required headers: x-access-id,
        x-request-id (UUID v4), x-timestamp (ISO 8601, must be within 5 minutes
        of server time), and authorization: the Base64 HMAC-SHA256 of the JSON
        string
        {"timeStamp":"<x-timestamp>","requestId":"<x-request-id>","accessId":"<x-access-id>"}
        (keys in that order, no whitespace) using your access secret. The
        request body, method and path are not signed. The API key must be linked
        to an outlet.
    AccessIdAuth:
      type: apiKey
      in: header
      name: x-access-id
      description: >-
        Basic (Access ID) authentication. Only the x-access-id header is
        required; no request signing.

````

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