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

# Quote a conversion

> Price a conversion between a fiat asset and a stablecoin, in either direction. Fiat to fiat and stablecoin to stablecoin are not supported and get `unsupported_pair` (422). You fix `from_amount`; `to_amount` is exactly what you will receive if you execute before `expires_at`. A quote reserves no balance and is not listed. No Idempotency-Key: quote as often as you like, up to 30 per minute.



## OpenAPI

````yaml /v2/openapi.json post /conversions/quotes
openapi: 3.1.0
info:
  title: Jenzy Hermes Multi-asset API
  version: 2.0.0
  description: >-
    Hold, convert and pay out across the assets enabled for your organization.
    Every amount is an exact decimal string beside an `asset` field.
    Authenticate with the same `jz_live_…` API key as `/v1`.
servers:
  - url: https://api.jenzy.com/v2
    description: Production
security: []
paths:
  /conversions/quotes:
    post:
      summary: Quote a conversion
      description: >-
        Price a conversion between a fiat asset and a stablecoin, in either
        direction. Fiat to fiat and stablecoin to stablecoin are not supported
        and get `unsupported_pair` (422). You fix `from_amount`; `to_amount` is
        exactly what you will receive if you execute before `expires_at`. A
        quote reserves no balance and is not listed. No Idempotency-Key: quote
        as often as you like, up to 30 per minute.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ConversionQuoteCreate'
      responses:
        '201':
          description: The quote. `to_amount` is the promise.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConversionQuote'
        '400':
          description: Malformed body, or `from_amount` with more than 4 decimal places.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '401':
          description: Missing, malformed, or revoked API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '403':
          description: >-
            Organization suspended, request IP not on the allowlist, no
            multi-asset access yet (`onboarding_incomplete` /
            `access_suspended`), or `corridor_not_enabled`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '422':
          description: >-
            `unsupported_pair` (the pair is not one fiat asset and one
            stablecoin: fiat to fiat, stablecoin to stablecoin, or the same
            asset), `amount_below_minimum` or `limit_exceeded`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '429':
          description: '`rate_limited` — 30 quotes per minute; honor `Retry-After`.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
        '503':
          description: >-
            `rate_unavailable` — no rate for this pair right now, retry shortly.
            Also `service_incident` / `service_maintenance` when the `/v2`
            shutter is closed.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorEnvelope'
      security:
        - ApiKeyAuth: []
components:
  schemas:
    ConversionQuoteCreate:
      type: object
      properties:
        from_asset:
          type: string
          minLength: 1
          description: >-
            The asset you pay. One of `from_asset` and `to_asset` must be a fiat
            asset and the other a stablecoin. Fiat to fiat, stablecoin to
            stablecoin, or the same asset on both sides gets `unsupported_pair`
            (422).
          example: KES
        to_asset:
          type: string
          minLength: 1
          description: >-
            The asset you receive. One of `from_asset` and `to_asset` must be a
            fiat asset and the other a stablecoin.
          example: USDT
        from_amount:
          anyOf:
            - type: integer
            - type: string
              pattern: ^\d+(\.\d+)?$
          description: >-
            Exactly how much of `from_asset` to convert, at most 4 decimal
            places. Conversions fix the amount in; `to_amount` is what you
            receive.
          example: '1000.00'
      required:
        - from_asset
        - to_asset
        - from_amount
    ConversionQuote:
      type: object
      properties:
        quote_id:
          type: string
          format: uuid
          description: Pass this to `POST /v2/conversions`.
        from_asset:
          type: string
          minLength: 1
          description: >-
            An asset code as `GET /v2/assets` lists it — uppercase, never
            compound (`KES`, `USDT`; never `USDT-TRON`). Network and rail live
            on the payment object.
          example: KES
        to_asset:
          type: string
          minLength: 1
          description: >-
            An asset code as `GET /v2/assets` lists it — uppercase, never
            compound (`KES`, `USDT`; never `USDT-TRON`). Network and rail live
            on the payment object.
          example: USDT
        from_amount:
          type: string
          description: What you will pay, in `from_asset`.
          example: '1000.00'
        to_amount:
          type: string
          description: >-
            What you will receive, in `to_asset`. This is the promise: a
            conversion delivers exactly this or fails whole.
          example: '7.68075'
        rate:
          type: string
          description: >-
            `from_asset` per one `to_asset`, rounded to 8 decimal places for
            display. Your economics are entirely in this rate; there is no
            separate fee. Recomputing `from_amount ÷ rate` may differ from
            `to_amount` by one minor unit — `to_amount` is what counts.
          example: '130.19561892'
        expires_at:
          type: string
          description: >-
            ISO 8601. Execute before this or request a new quote; an expired
            quote is `quote_expired`.
          example: '2026-09-09T10:00:25.000Z'
      required:
        - quote_id
        - from_asset
        - to_asset
        - from_amount
        - to_amount
        - rate
        - expires_at
    ErrorEnvelope:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - validation_error
                - unauthorized
                - forbidden
                - not_found
                - conflict
                - rate_limited
                - internal_error
                - unknown_institution
                - invalid_mobile_number
                - invalid_account_number
                - mobile_number_institution_mismatch
                - service_unavailable
                - sandbox_only
                - insufficient_funds
                - rail_disabled
                - amount_limit_exceeded
                - org_limit_exceeded
                - service_incident
                - service_maintenance
                - onboarding_incomplete
                - access_suspended
                - corridor_not_enabled
                - unsupported_pair
                - invalid_wallet_address
                - rate_unavailable
                - quote_expired
                - quote_used
                - limit_exceeded
                - amount_below_minimum
                - unsupported_asset
              description: >-
                Stable identifier a client may branch on — never renamed or
                removed.
            message:
              type: string
          required:
            - code
            - message
      required:
        - error
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      description: 'Your Jenzy API key: `Authorization: Bearer jz_live_…`'

````