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

# Rfq.create

> JSON-RPC method `rfq.create` on the trading socket. Idempotent on `(account, client_ref)`. The request stays open for quotes for 5 seconds; follow it on the `rfq` channel after `rfq.subscribe`.



## AsyncAPI

````yaml _generated/asyncapi.yaml rfq.create
id: rfq.create
title: rfq.create
description: >-
  JSON-RPC method `rfq.create` on the trading socket. Idempotent on `(account,
  client_ref)`. The request stays open for quotes for 5 seconds; follow it on
  the `rfq` channel after `rfq.subscribe`.
servers:
  - id: trading
    protocol: wss
    host: joyride.exchange
    bindings: []
    variables: []
address: /
parameters: []
bindings: []
operations:
  - &ref_5
    id: rfq.create.request
    title: Request
    type: receive
    messages:
      - &ref_7
        id: request
        contentType: application/json
        payload:
          - name: Request params
            type: object
            properties:
              - name: client_ref
                type: string
                description: >-
                  Idempotency key. The same `(account, client_ref)` with
                  different legs or a different `side` is `RFQ_STATE_CONFLICT`.
                required: true
              - name: legs
                type: array
                description: >
                  Ordered strategy legs. Every instrument must be listed and
                  open, share

                  one underlying and expiry, and be unique both by symbol and by
                  resolved

                  terms `(asset, strike, expiry, kind)`.
                required: true
                properties:
                  - name: instrument
                    type: string
                    description: Listed instrument symbol.
                    required: true
                  - name: quantity
                    type: string
                    description: Non-zero signed 6dp contracts in taker-buy orientation.
                    required: true
              - name: side
                type: string
                description: >-
                  `buy` or `sell` shows makers the direction and asks for that
                  one price; `two_way` hides it and admits a one- or two-sided
                  quote. Only the named side (either, on `two_way`) can be
                  accepted.
                required: true
        headers: []
        jsonPayloadSchema:
          type: object
          additionalProperties: false
          required:
            - client_ref
            - legs
            - side
          properties:
            client_ref:
              type: string
              pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
              description: >-
                Idempotency key. The same `(account, client_ref)` with different
                legs or a different `side` is `RFQ_STATE_CONFLICT`.
              x-parser-schema-id: <anonymous-schema-29>
            legs:
              type: array
              minItems: 1
              maxItems: 13
              items:
                type: object
                additionalProperties: false
                description: >
                  One strategy leg. `quantity` is signed and taker-buy oriented:
                  on a

                  `buy` accept the taker receives `quantity` and the maker its
                  negation;

                  on a `sell` accept the taker receives `-quantity` and the
                  maker

                  `quantity`. A 1x2 spread is `+1.000000` and `-2.000000`. Legs
                  keep the

                  taker's submitted order everywhere; nothing sorts them.
                properties:
                  instrument:
                    type: string
                    description: Listed instrument symbol.
                    example: SOL_USDC-6MAR26-150-C
                    x-parser-schema-id: <anonymous-schema-30>
                  quantity:
                    allOf:
                      - &ref_2
                        type: string
                        pattern: ^-?(0|[1-9][0-9]*)(\.[0-9]{1,6})?$
                        description: >
                          Canonical signed decimal with at most six fractional
                          digits. Negative

                          zero, JSON numbers, exponents, and values outside the
                          signed 64-bit

                          6dp range (`i64::MIN` excluded) are rejected.
                        x-parser-schema-id: RfqSignedDecimal
                    description: Non-zero signed 6dp contracts in taker-buy orientation.
                    x-parser-schema-id: <anonymous-schema-31>
                required:
                  - instrument
                  - quantity
                x-parser-schema-id: RfqLeg
              description: >
                Ordered strategy legs. Every instrument must be listed and open,
                share

                one underlying and expiry, and be unique both by symbol and by
                resolved

                terms `(asset, strike, expiry, kind)`.
              x-parser-schema-id: RfqLegs
            side:
              allOf:
                - type: string
                  enum:
                    - buy
                    - sell
                    - two_way
                  description: >-
                    The taker's direction over the package (spec 16 §2.1);
                    `two_way` is the direction-blind request.
                  x-parser-schema-id: RfqRequestSide
              description: >-
                `buy` or `sell` shows makers the direction and asks for that one
                price; `two_way` hides it and admits a one- or two-sided quote.
                Only the named side (either, on `two_way`) can be accepted.
              x-parser-schema-id: <anonymous-schema-32>
          x-parser-schema-id: RfqCreateParams
        title: Request params
        example: |-
          {
            "client_ref": "123e4567-e89b-12d3-a456-426614174000",
            "side": "two_way",
            "legs": [
              {
                "instrument": "BTC_USDC-2MAY26-77000-C",
                "quantity": "1.000000"
              },
              {
                "instrument": "BTC_USDC-2MAY26-80000-C",
                "quantity": "-2.000000"
              }
            ]
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: request
    bindings: []
    extensions: &ref_4
      - id: x-parser-unique-object-id
        value: rfq.create
  - &ref_6
    id: rfq.create.reply
    title: Reply
    type: send
    messages:
      - &ref_8
        id: result
        contentType: application/json
        payload:
          - name: Result
            type: object
            properties:
              - name: rfq_id
                type: string
                description: 16-byte RFQ id encoded as lowercase hexadecimal.
                required: true
              - name: state
                type: string
                enumValues:
                  - pending
                  - quoted
                  - accepted
                  - submitting
                  - filled
                  - declined
                  - expired
                  - failed
                required: true
              - name: request_deadline
                type: string
                description: >-
                  RFC3339 UTC; the request drains to `declined` if no quote
                  arrives by then.
                required: true
        headers: []
        jsonPayloadSchema:
          type: object
          required:
            - rfq_id
            - state
            - request_deadline
          properties:
            rfq_id: &ref_0
              type: string
              pattern: ^[0-9a-f]{32}$
              description: 16-byte RFQ id encoded as lowercase hexadecimal.
              x-parser-schema-id: RfqId
            state:
              type: string
              enum:
                - pending
                - quoted
                - accepted
                - submitting
                - filled
                - declined
                - expired
                - failed
              x-parser-schema-id: RfqState
            request_deadline:
              type: string
              format: date-time
              description: >-
                RFC3339 UTC; the request drains to `declined` if no quote
                arrives by then.
              x-parser-schema-id: <anonymous-schema-33>
          x-parser-schema-id: RfqCreateResult
        title: Result
        example: |-
          {
            "rfq_id": "0192f1a3b4c5d6e7f8091a2b3c4d5e6f",
            "state": "pending",
            "request_deadline": "2026-05-01T15:40:06.000Z"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: result
      - &ref_9
        id: error
        contentType: application/json
        payload:
          - name: Error
            description: >-
              Every `rfq.*` failure is JSON-RPC error `1200`; this is its
              `error.data` object.
            type: object
            properties:
              - name: error
                type: string
                description: >-
                  The RFQ error code. `retryable` says whether the same call can
                  succeed later; for `RFQ_NOT_READY` the `message` names the
                  cause. `RFQ_TAKER_UNFUNDED`, `RFQ_MAKER_UNFUNDED` and
                  `RFQ_SIGNED_LIMIT_BELOW_REQUIREMENT` carry the funding view in
                  `details`; `RFQ_INVALID_INSTRUMENT` and `RFQ_QUOTE_EXPIRED`
                  from a leg check carry `{leg_index}`. `RFQ_SIDE_NOT_REQUESTED`
                  is a side the request did not ask for, on respond or accept;
                  `RFQ_SIDE_NOT_QUOTED` is an accept of a side the quote left
                  absent.
                enumValues:
                  - RFQ_NOT_ENABLED
                  - RFQ_WRONG_ROLE
                  - RFQ_NOT_READY
                  - RFQ_INVALID_INSTRUMENT
                  - RFQ_SIZE_INVALID
                  - RFQ_INVALID_PARAMS
                  - RFQ_VALUE_OUT_OF_RANGE
                  - RFQ_PRECISION_UNSUPPORTED
                  - RFQ_INVALID_SIGNATURE
                  - RFQ_CANONICAL_MISMATCH
                  - RFQ_NOT_FOUND
                  - RFQ_STATE_CONFLICT
                  - RFQ_OPEN_LIMIT
                  - RFQ_QUOTE_EXPIRED
                  - RFQ_SIGNED_LIMIT_BELOW_REQUIREMENT
                  - RFQ_TAKER_UNFUNDED
                  - RFQ_MAKER_UNFUNDED
                  - RFQ_RATE_LIMITED
                  - RFQ_SIDE_NOT_QUOTED
                  - RFQ_SIDE_NOT_REQUESTED
                required: true
              - name: message
                type: string
                required: true
              - name: operation_id
                type: string
                description: Server-side correlation id; quote it when asking for support.
                required: true
              - name: retryable
                type: boolean
                required: true
              - name: rfq_id
                type: string
                description: 16-byte RFQ id encoded as lowercase hexadecimal.
                required: false
              - name: quote_id
                type: string
                description: SHA-256 of the canonical 1,066-byte StrategyQuotePayload.
                required: false
              - name: details
                type: object
                description: >-
                  Code-specific context; the funding view for the three funding
                  codes, `{leg_index}` for a leg that stopped trading. Absent
                  otherwise.
                required: false
                properties:
                  - name: anchored
                    type: boolean
                    description: >-
                      Whether a durable subaccount anchor is covered by the live
                      watcher heartbeat.
                    required: true
                  - name: free_balance
                    type: string
                    required: true
                  - name: buy
                    type: object
                    required: true
                    properties:
                      - name: estimate
                        type: boolean
                        description: >-
                          True only for a writer-side requirement computed over
                          a never-anchored empty portfolio.
                        required: true
                      - name: funded
                        type: boolean
                        description: >-
                          True only for a non-estimated requirement with a
                          covered anchor and `free_balance >= required`.
                        required: true
                      - name: package_cash_delta
                        type: string
                        description: >-
                          Signed cash movement before fees from the viewed
                          party's seat; positive means that party receives
                          premium.
                        required: false
                      - name: cash_debit
                        type: string
                        description: '`max(-package_cash_delta, 0)`.'
                        required: false
                      - name: fee
                        type: string
                        description: >-
                          The viewed party's trading fee over the current
                          prices, using its taker or maker tier as appropriate:
                          per leg `min(index_notional × fee_bps / 10000,
                          leg_value × trade_fee_cap_bps / 10000)`, floored and
                          summed.
                        required: false
                      - name: max_fee
                        type: string
                        description: >-
                          `fee` with the venue's signed-fee tolerance applied
                          and rounded up once; the figure to sign as the fee
                          maximum. `required` funds it, and the signer refuses a
                          fill whose exact fee exceeds the signed maximum.
                        required: false
                      - name: writer
                        type: boolean
                        description: >-
                          True when this side leaves the viewed party short at
                          least one leg.
                        required: false
                      - name: lock_increase
                        type: string
                        description: >-
                          `max(post_fill_locked - current_locked, 0)`; zero when
                          the viewed party is not a writer.
                        required: false
                      - name: post_fill_locked
                        type: string
                        description: >-
                          Unbuffered absolute lock for the viewed party after
                          the fill.
                        required: false
                      - name: max_locked_balance
                        type: string
                        description: >-
                          Current lock plus `lock_increase` with the venue's
                          signed-lock tolerance applied and rounded up once; the
                          figure to sign as the lock maximum. Equals
                          `post_fill_locked` when the party is not a writer.
                        required: false
                  - name: sell
                    type: object
                    required: true
                    properties:
                      - name: estimate
                        type: boolean
                        description: >-
                          True only for a writer-side requirement computed over
                          a never-anchored empty portfolio.
                        required: true
                      - name: funded
                        type: boolean
                        description: >-
                          True only for a non-estimated requirement with a
                          covered anchor and `free_balance >= required`.
                        required: true
                      - name: package_cash_delta
                        type: string
                        description: >-
                          Signed cash movement before fees from the viewed
                          party's seat; positive means that party receives
                          premium.
                        required: false
                      - name: cash_debit
                        type: string
                        description: '`max(-package_cash_delta, 0)`.'
                        required: false
                      - name: fee
                        type: string
                        description: >-
                          The viewed party's trading fee over the current
                          prices, using its taker or maker tier as appropriate:
                          per leg `min(index_notional × fee_bps / 10000,
                          leg_value × trade_fee_cap_bps / 10000)`, floored and
                          summed.
                        required: false
                      - name: max_fee
                        type: string
                        description: >-
                          `fee` with the venue's signed-fee tolerance applied
                          and rounded up once; the figure to sign as the fee
                          maximum. `required` funds it, and the signer refuses a
                          fill whose exact fee exceeds the signed maximum.
                        required: false
                      - name: writer
                        type: boolean
                        description: >-
                          True when this side leaves the viewed party short at
                          least one leg.
                        required: false
                      - name: lock_increase
                        type: string
                        description: >-
                          `max(post_fill_locked - current_locked, 0)`; zero when
                          the viewed party is not a writer.
                        required: false
                      - name: post_fill_locked
                        type: string
                        description: >-
                          Unbuffered absolute lock for the viewed party after
                          the fill.
                        required: false
                      - name: max_locked_balance
                        type: string
                        description: >-
                          Current lock plus `lock_increase` with the venue's
                          signed-lock tolerance applied and rounded up once; the
                          figure to sign as the lock maximum. Equals
                          `post_fill_locked` when the party is not a writer.
                        required: false
                  - name: leg_index
                    type: integer
                    required: true
        headers: []
        jsonPayloadSchema:
          type: object
          description: >-
            The `error.data` object of every `rfq.*` failure (JSON-RPC code
            `1200`).
          properties:
            error:
              type: string
              description: >-
                The RFQ error code. `retryable` says whether the same call can
                succeed later; for `RFQ_NOT_READY` the `message` names the
                cause. `RFQ_TAKER_UNFUNDED`, `RFQ_MAKER_UNFUNDED` and
                `RFQ_SIGNED_LIMIT_BELOW_REQUIREMENT` carry the funding view in
                `details`; `RFQ_INVALID_INSTRUMENT` and `RFQ_QUOTE_EXPIRED` from
                a leg check carry `{leg_index}`. `RFQ_SIDE_NOT_REQUESTED` is a
                side the request did not ask for, on respond or accept;
                `RFQ_SIDE_NOT_QUOTED` is an accept of a side the quote left
                absent.
              enum:
                - RFQ_NOT_ENABLED
                - RFQ_WRONG_ROLE
                - RFQ_NOT_READY
                - RFQ_INVALID_INSTRUMENT
                - RFQ_SIZE_INVALID
                - RFQ_INVALID_PARAMS
                - RFQ_VALUE_OUT_OF_RANGE
                - RFQ_PRECISION_UNSUPPORTED
                - RFQ_INVALID_SIGNATURE
                - RFQ_CANONICAL_MISMATCH
                - RFQ_NOT_FOUND
                - RFQ_STATE_CONFLICT
                - RFQ_OPEN_LIMIT
                - RFQ_QUOTE_EXPIRED
                - RFQ_SIGNED_LIMIT_BELOW_REQUIREMENT
                - RFQ_TAKER_UNFUNDED
                - RFQ_MAKER_UNFUNDED
                - RFQ_RATE_LIMITED
                - RFQ_SIDE_NOT_QUOTED
                - RFQ_SIDE_NOT_REQUESTED
              x-parser-schema-id: <anonymous-schema-34>
            message:
              type: string
              x-parser-schema-id: <anonymous-schema-35>
            operation_id:
              type: string
              description: Server-side correlation id; quote it when asking for support.
              x-parser-schema-id: <anonymous-schema-36>
            retryable:
              type: boolean
              x-parser-schema-id: <anonymous-schema-37>
            rfq_id: *ref_0
            quote_id:
              type: string
              pattern: ^[0-9a-f]{64}$
              description: SHA-256 of the canonical 1,066-byte StrategyQuotePayload.
              x-parser-schema-id: QuoteId
            details:
              description: >-
                Code-specific context; the funding view for the three funding
                codes, `{leg_index}` for a leg that stopped trading. Absent
                otherwise.
              oneOf:
                - type: object
                  additionalProperties: false
                  description: >-
                    Live advisory funding view; the attestation signer remains
                    authoritative.
                  properties:
                    anchored:
                      type: boolean
                      description: >-
                        Whether a durable subaccount anchor is covered by the
                        live watcher heartbeat.
                      x-parser-schema-id: <anonymous-schema-39>
                    free_balance:
                      oneOf:
                        - &ref_1
                          type: string
                          pattern: ^(0|[1-9][0-9]*)(\.[0-9]{1,6})?$
                          description: >-
                            Canonical unsigned decimal with at most six
                            fractional digits; JSON numbers and exponents are
                            rejected.
                          x-parser-schema-id: RfqDecimal
                        - type: 'null'
                          x-parser-schema-id: <anonymous-schema-41>
                      x-parser-schema-id: <anonymous-schema-40>
                    buy:
                      oneOf:
                        - &ref_3
                          type: object
                          additionalProperties: false
                          description: >
                            Taker-perspective requirement for one accept side,
                            computed from one

                            frozen strategy risk view:

                            `required = cash_debit + max_fee + lock_increase`.
                          properties:
                            required:
                              allOf:
                                - *ref_1
                              description: >-
                                Free balance required to accept this side of the
                                quote.
                              x-parser-schema-id: <anonymous-schema-43>
                            estimate:
                              type: boolean
                              description: >-
                                True only for a writer-side requirement computed
                                over a never-anchored empty portfolio.
                              x-parser-schema-id: <anonymous-schema-44>
                            funded:
                              type: boolean
                              description: >-
                                True only for a non-estimated requirement with a
                                covered anchor and `free_balance >= required`.
                              x-parser-schema-id: <anonymous-schema-45>
                            package_cash_delta:
                              allOf:
                                - *ref_2
                              description: >-
                                Signed cash movement before fees from the viewed
                                party's seat; positive means that party receives
                                premium.
                              x-parser-schema-id: <anonymous-schema-46>
                            cash_debit:
                              allOf:
                                - *ref_1
                              description: '`max(-package_cash_delta, 0)`.'
                              x-parser-schema-id: <anonymous-schema-47>
                            fee:
                              allOf:
                                - *ref_1
                              description: >-
                                The viewed party's trading fee over the current
                                prices, using its taker or maker tier as
                                appropriate: per leg `min(index_notional ×
                                fee_bps / 10000, leg_value × trade_fee_cap_bps /
                                10000)`, floored and summed.
                              x-parser-schema-id: <anonymous-schema-48>
                            max_fee:
                              allOf:
                                - *ref_1
                              description: >-
                                `fee` with the venue's signed-fee tolerance
                                applied and rounded up once; the figure to sign
                                as the fee maximum. `required` funds it, and the
                                signer refuses a fill whose exact fee exceeds
                                the signed maximum.
                              x-parser-schema-id: <anonymous-schema-49>
                            writer:
                              type: boolean
                              description: >-
                                True when this side leaves the viewed party
                                short at least one leg.
                              x-parser-schema-id: <anonymous-schema-50>
                            lock_increase:
                              allOf:
                                - *ref_1
                              description: >-
                                `max(post_fill_locked - current_locked, 0)`;
                                zero when the viewed party is not a writer.
                              x-parser-schema-id: <anonymous-schema-51>
                            post_fill_locked:
                              allOf:
                                - *ref_1
                              description: >-
                                Unbuffered absolute lock for the viewed party
                                after the fill.
                              x-parser-schema-id: <anonymous-schema-52>
                            max_locked_balance:
                              allOf:
                                - *ref_1
                              description: >-
                                Current lock plus `lock_increase` with the
                                venue's signed-lock tolerance applied and
                                rounded up once; the figure to sign as the lock
                                maximum. Equals `post_fill_locked` when the
                                party is not a writer.
                              x-parser-schema-id: <anonymous-schema-53>
                          required:
                            - required
                            - estimate
                            - funded
                          x-parser-schema-id: RfqFundingRequirement
                        - type: 'null'
                          x-parser-schema-id: <anonymous-schema-54>
                      x-parser-schema-id: <anonymous-schema-42>
                    sell:
                      oneOf:
                        - *ref_3
                        - type: 'null'
                          x-parser-schema-id: <anonymous-schema-56>
                      x-parser-schema-id: <anonymous-schema-55>
                  required:
                    - anchored
                    - free_balance
                    - buy
                    - sell
                  x-parser-schema-id: RfqTakerFunding
                - type: object
                  properties:
                    leg_index:
                      type: integer
                      minimum: 0
                      x-parser-schema-id: <anonymous-schema-58>
                  required:
                    - leg_index
                  x-parser-schema-id: <anonymous-schema-57>
              x-parser-schema-id: <anonymous-schema-38>
          required:
            - error
            - message
            - operation_id
            - retryable
          x-parser-schema-id: RfqTypedError
        title: Error
        description: >-
          Every `rfq.*` failure is JSON-RPC error `1200`; this is its
          `error.data` object.
        example: |-
          {
            "error": "RFQ_NOT_READY",
            "message": "RFQ chain-service state is not warm",
            "operation_id": "rfq-18",
            "retryable": true,
            "rfq_id": "0192f1a3b4c5d6e7f8091a2b3c4d5e6f"
          }
        bindings: []
        extensions:
          - id: x-parser-unique-object-id
            value: error
    bindings: []
    extensions: *ref_4
sendOperations:
  - *ref_5
receiveOperations:
  - *ref_6
sendMessages:
  - *ref_7
receiveMessages:
  - *ref_8
  - *ref_9
extensions:
  - id: x-parser-unique-object-id
    value: rfq.create
securitySchemes: []

````

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