FiatDock Market API

The Market API from FiatDock — 2 operation(s) for market.

GitHub OpenAPI

Operations 4

POST /v1/market/perp Perp market #
GET /v1/market/perp Perp market get #
POST /v1/market/backtest Strategy backtest #
GET /v1/market/backtest Strategy backtest get #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/fiatdock-com:fiatdock-com-market-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

fiatdock-com-market-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: FiatDock Market API
  version: 1.16.1
  contact:
    name: FiatDock
    email: osama@fiatdock.com
    url: https://fiatdock.com
  description: 'A marketplace where AI agents discover and pay each other per call in USDC over x402 — settlement goes DIRECTLY to the seller, non-custodial, no accounts and no API keys. POST /s/{id} invokes any listed MCP service at that seller''s own price; GET /v1/marketplace/services is the catalog. Also first-party: free token prices, on-chain Base reads (gas, blocks, ETH/USDC balances, tx status, token metadata), token-safety and address-risk screening, and a non-custodial USDC on/off-ramp (x402 + a licensed payment partner). COMPLIANCE (binding, ramp only): 18+ only; served worldwide via our licensed provider across ~160 countries (EUR/SEPA in the EU/EEA incl. Portugal, card elsewhere; NOT the UK, US persons, or sanctioned countries); own-account rule — the sending wallet and the receiving bank account must belong to the same person (the agent''s owner), no third-party funds, no aggregation, no P2P transfers. Crypto is volatile; quotes indicative; nothing here is investment advice. RETRIES: GET endpoints are idempotent — repeat freely. Session POSTs are NOT idempotent (each success creates a new order and costs the x402 fee), but any non-2xx means nothing was created or charged, and an unanswered request at worst leaves an unused checkout link that expires in ~2 hours — no funds move until the human owner completes checkout. Pass the same customerId on retries and check /v1/customers/{customerId}/orders for duplicates. On 429, sleep Retry-After seconds.'
  termsOfService: https://fiatdock.com/terms.html
  x-guidance: 'Start FREE: GET /v1/token/price?token=0x…&chain=base (no payment, no key) — for a contract address it also returns a `recommend` object handing you the exact paid token_safety call. Paid calls use x402 v2: send the request, read the base64-JSON PAYMENT-REQUIRED response header on the 402, sign, and retry with X-PAYMENT. Nothing is charged on a 402. Cheapest paid calls: POST /v1/stablecoin/intel and POST /v1/token/safety — both answer >=400 (and settle nothing) if the upstream data is unavailable, so you are never charged for a missing answer. Everything here is also exposed as MCP tools at https://fiatdock.com/mcp (Streamable HTTP) or `npx fiatdock-mcp` (stdio, pays automatically).'
  x-agent-rules:
    neverChargedFor:
    - A 402 — that is the price quote, not a charge. Retrying is always safe.
    - Any 4xx. A ramp body that names a real ramp field is validated BEFORE the paywall, so that typo costs nothing and needs no wallet.
    - A 5xx or an upstream failure on a paid data route — x402 settles only on <400.
    beforeYouPayAnything:
    - GET /v1/quote?side=SELL&cryptoAmount=100 (or side=BUY&fiatAmount=100) is FREE and returns the real net amount.
    - 'POST the session body with no payment header. A 400 means fix the body. A 402 does NOT by itself mean the body is valid — the free check runs only when the body names a ramp field (cryptoAmount, fiatAmount, fiatCurrency, network, walletAddress, …); otherwise read `requestProblem` in the 402 body: present = still invalid, absent = you may sign.'
    inputWeAccept:
      amounts: Numbers or strings. "100,50", "1.234,56", "1,234.56", "١٠٠", "€100" are all understood.
      walletAddress: 0x + 40 hex. A bare 40-hex string (no 0x) and surrounding whitespace are accepted.
      fiatCurrency: 'ISO code, any case. "eur", "€", "euro" → EUR. 18 supported: AUD CAD CHF CZK DKK EUR GBP HKD HUF JPY MXN NOK NZD PLN SEK SGD USD ZAR.'
      network: base | ethereum | polygon | arbitrum | optimism | avalanche | bsc. Chain ids (8453, eip155:8453) and short forms (eth, arb, op, avax, bnb) also work.
      side: Exactly "SELL" or "BUY". Anything else is a 400 — we will not guess, because guessing the direction would price the opposite trade.
    knownLimits:
      offRampMinimum: The provider's floor is CHF 50 equivalent (~54 EUR). A smaller SELL quote answers 400 with the exact `minimum` — size up and retry.
      orderStatus: Orders stay SESSION_CREATED. The current provider sends no status webhook, so `callbackUrl` receives no push — poll GET /v1/orders/{id} and expect it to be static for now.
      checkoutTtl: checkoutUrl is valid ~2 hours. Forward it to the human owner promptly.
      humanStep: Session creation is fully automatable; the fiat transfer is not. A human gives the provider a phone number and email (identity documents only above ~CHF 999 per 30 days) and confirms the transfer.
    ifSomethingLooksWrong: 'Every 4xx carries a `hint` with the exact fix — read it before retrying. Live health: GET https://fiatdock.com/status. If a paid call fails after settlement the response names the settled transactions and says whether retrying is safe.'
servers:
- url: https://fiatdock.com
tags:
- name: Market
paths:
  /v1/market/perp:
    post:
      operationId: perpMarket
      description: 'Hyperliquid perpetual futures in one call: mark, oracle and mid price, 24h change, the funding rate per interval and its simple annualised APR, open interest (coins and USD), 24h volume and max leverage — plus, for a named coin, its NEXT funding on Binance and Bybit (as Hyperliquid publishes it) for cross-venue funding comparison. Omit coin for the most-traded markets by 24h volume. An unknown coin answers 404 with the nearest names. Paid $0.001 USDC via x402. MCP tool: perp_market.'
      requestBody:
        required: false
        content:
          application/json:
            example:
              coin: BTC
            schema:
              type: object
              properties:
                coin:
                  description: Perpetual's coin as Hyperliquid names it (BTC, ETH, SOL, HYPE, kPEPE, …). Omit for the most-traded markets
                  type: string
                  maxLength: 20
                  example: BTC
                limit:
                  description: How many markets when no coin is given (by 24h volume), 1-50, default 10
                  type: integer
                  minimum: 1
                  maximum: 50
                  example: 10
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PerpMarket'
          description: Perp market + funding (Hyperliquid, Binance, Bybit)
        '400':
          description: an input the tool cannot use, or a field it does not read (not charged)
        '402':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentRequired'
          description: 'x402 v2 Payment Required: the exact requirements arrive base64-JSON in the PAYMENT-REQUIRED response header (pay $0.001 USDC on base = CAIP-2 eip155 id), then retry with the PAYMENT-SIGNATURE header (x402 v2; the v1 name X-PAYMENT is also accepted). Nothing is charged on a 402 — retrying is always safe.'
        '404':
          description: nothing to answer for this input — e.g. an unknown coin, currency, ticker or token, or a search with no match (not charged)
        '429':
          description: Rate limited (global 120/min/IP; stricter buckets on /mcp, webhook, auth). Sleep exactly Retry-After seconds, then retry.
          headers:
            Retry-After:
              schema:
                type: integer
              description: Seconds until the window resets — sleep this long, then retry
            RateLimit-Limit:
              schema:
                type: integer
              description: Requests allowed per window in this bucket
            RateLimit-Remaining:
              schema:
                type: integer
              description: Requests left in the current window (0 on 429)
            RateLimit-Reset:
              schema:
                type: integer
              description: Seconds until the window resets
        '502':
          description: the upstream source did not answer (not charged)
      x-payment-info:
        price:
          mode: fixed
          currency: USD
          amount: '0.001000'
        protocols:
        - x402: {}
      tags:
      - Market
      summary: Perp market
      x-summary-source: derived
    get:
      operationId: perpMarketGet
      description: 'Hyperliquid perpetual futures in one call: mark, oracle and mid price, 24h change, the funding rate per interval and its simple annualised APR, open interest (coins and USD), 24h volume and max leverage — plus, for a named coin, its NEXT funding on Binance and Bybit (as Hyperliquid publishes it) for cross-venue funding comparison. Omit coin for the most-traded markets by 24h volume. An unknown coin answers 404 with the nearest names. Paid $0.001 USDC via x402. MCP tool: perp_market. Also payable with GET: send the same inputs as query parameters (ADR-0175).'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PerpMarket'
          description: Perp market + funding (Hyperliquid, Binance, Bybit)
        '400':
          description: an input the tool cannot use, or a field it does not read (not charged)
        '402':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentRequired'
          description: 'x402 v2 Payment Required: the exact requirements arrive base64-JSON in the PAYMENT-REQUIRED response header (pay $0.001 USDC on base = CAIP-2 eip155 id), then retry with the PAYMENT-SIGNATURE header (x402 v2; the v1 name X-PAYMENT is also accepted). Nothing is charged on a 402 — retrying is always safe.'
        '404':
          description: nothing to answer for this input — e.g. an unknown coin, currency, ticker or token, or a search with no match (not charged)
        '429':
          description: Rate limited (global 120/min/IP; stricter buckets on /mcp, webhook, auth). Sleep exactly Retry-After seconds, then retry.
          headers:
            Retry-After:
              schema:
                type: integer
              description: Seconds until the window resets — sleep this long, then retry
            RateLimit-Limit:
              schema:
                type: integer
              description: Requests allowed per window in this bucket
            RateLimit-Remaining:
              schema:
                type: integer
              description: Requests left in the current window (0 on 429)
            RateLimit-Reset:
              schema:
                type: integer
              description: Seconds until the window resets
        '502':
          description: the upstream source did not answer (not charged)
      x-payment-info:
        price:
          mode: fixed
          currency: USD
          amount: '0.001000'
        protocols:
        - x402: {}
      parameters:
      - name: coin
        in: query
        required: false
        schema:
          type: string
        description: Perpetual's coin as Hyperliquid names it (BTC, ETH, SOL, HYPE, kPEPE, …). Omit for the most-traded markets
      - name: limit
        in: query
        required: false
        schema:
          type: integer
        description: How many markets when no coin is given (by 24h volume), 1-50, default 10
      tags:
      - Market
      summary: Perp market get
      x-summary-source: derived
  /v1/market/backtest:
    post:
      operationId: strategyBacktest
      description: 'Backtest a simple, stated trading rule on a crypto asset''s daily USD closes from Coinbase Exchange and compare it with buying and holding over the same window. Strategies: sma_cross (long while the fast simple moving average is above the slow one), rsi_reversion (buy below rsiBuy, sell above rsiSell), dca (buy a fixed slice every dcaEveryDays), buy_and_hold. Signals formed at one close are executed at the next (no look-ahead); a fee of feeBps per trade; long or flat only. Returns total return, buy-and-hold return, max drawdown, Sharpe, exposure, win rate, the trades and an equity curve, with the full rules in method. 30-365 days. An empty body tests BTC, SMA 20/50 over 180 days. A ticker with no Coinbase USD market is 404 (not charged). A test of past prices, not a forecast or advice. Paid $0.009 USDC via x402. MCP tool: strategy_backtest.'
      requestBody:
        required: false
        content:
          application/json:
            example:
              asset: BTC
              strategy: sma_cross
              days: 180
              fast: 20
              slow: 50
            schema:
              type: object
              properties:
                asset:
                  description: Crypto asset ticker with a USD market on Coinbase Exchange (BTC, ETH, SOL, …). Default BTC
                  type: string
                  maxLength: 10
                  example: BTC
                strategy:
                  description: sma_cross (long while the fast moving average is above the slow one), rsi_reversion (buy when RSI falls below rsiBuy, sell when it rises above rsiSell), dca (buy a fixed amount every dcaEveryDays), buy_and_hold. Default sma_cross
                  type: string
                  enum:
                  - sma_cross
                  - rsi_reversion
                  - dca
                  - buy_and_hold
                  example: sma_cross
                days:
                  description: Length of the tested window in days, 30-365 (default 180)
                  type: integer
                  minimum: 30
                  maximum: 365
                  example: 180
                fast:
                  description: 'sma_cross: fast moving-average length in days, 2-100 (default 20)'
                  type: integer
                  minimum: 2
                  maximum: 100
                  example: 20
                slow:
                  description: 'sma_cross: slow moving-average length in days, 3-200, longer than fast (default 50)'
                  type: integer
                  minimum: 3
                  maximum: 200
                  example: 50
                rsiPeriod:
                  description: 'rsi_reversion: RSI length in days, 2-50 (default 14)'
                  type: integer
                  minimum: 2
                  maximum: 50
                  example: 14
                rsiBuy:
                  description: 'rsi_reversion: buy when RSI falls below this, 1-50 (default 30)'
                  type: number
                  minimum: 1
                  maximum: 50
                  example: 30
                rsiSell:
                  description: 'rsi_reversion: sell when RSI rises above this, 50-99 (default 70)'
                  type: number
                  minimum: 50
                  maximum: 99
                  example: 70
                dcaEveryDays:
                  description: 'dca: days between purchases, 1-30 (default 7)'
                  type: integer
                  minimum: 1
                  maximum: 30
                  example: 7
                feeBps:
                  description: Fee on every trade in basis points, 0-100 (default 10 = 0.1%)
                  type: number
                  minimum: 0
                  maximum: 100
                  example: 10
                capitalUsd:
                  description: Starting capital in USD, 10-10000000 (default 1000)
                  type: number
                  minimum: 10
                  maximum: 10000000
                  example: 1000
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StrategyBacktest'
          description: Strategy backtest (crypto, daily closes)
        '400':
          description: an input the tool cannot use, or a field it does not read (not charged)
        '402':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentRequired'
          description: 'x402 v2 Payment Required: the exact requirements arrive base64-JSON in the PAYMENT-REQUIRED response header (pay $0.009 USDC on base = CAIP-2 eip155 id), then retry with the PAYMENT-SIGNATURE header (x402 v2; the v1 name X-PAYMENT is also accepted). Nothing is charged on a 402 — retrying is always safe.'
        '404':
          description: nothing to answer for this input — e.g. an unknown coin, currency, ticker or token, or a search with no match (not charged)
        '429':
          description: Rate limited (global 120/min/IP; stricter buckets on /mcp, webhook, auth). Sleep exactly Retry-After seconds, then retry.
          headers:
            Retry-After:
              schema:
                type: integer
              description: Seconds until the window resets — sleep this long, then retry
            RateLimit-Limit:
              schema:
                type: integer
              description: Requests allowed per window in this bucket
            RateLimit-Remaining:
              schema:
                type: integer
              description: Requests left in the current window (0 on 429)
            RateLimit-Reset:
              schema:
                type: integer
              description: Seconds until the window resets
        '502':
          description: the upstream source did not answer (not charged)
      x-payment-info:
        price:
          mode: fixed
          currency: USD
          amount: '0.009000'
        protocols:
        - x402: {}
      tags:
      - Market
      summary: Strategy backtest
      x-summary-source: derived
    get:
      operationId: strategyBacktestGet
      description: 'Backtest a simple, stated trading rule on a crypto asset''s daily USD closes from Coinbase Exchange and compare it with buying and holding over the same window. Strategies: sma_cross (long while the fast simple moving average is above the slow one), rsi_reversion (buy below rsiBuy, sell above rsiSell), dca (buy a fixed slice every dcaEveryDays), buy_and_hold. Signals formed at one close are executed at the next (no look-ahead); a fee of feeBps per trade; long or flat only. Returns total return, buy-and-hold return, max drawdown, Sharpe, exposure, win rate, the trades and an equity curve, with the full rules in method. 30-365 days. An empty body tests BTC, SMA 20/50 over 180 days. A ticker with no Coinbase USD market is 404 (not charged). A test of past prices, not a forecast or advice. Paid $0.009 USDC via x402. MCP tool: strategy_backtest. Also payable with GET: send the same inputs as query parameters (ADR-0175).'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StrategyBacktest'
          description: Strategy backtest (crypto, daily closes)
        '400':
          description: an input the tool cannot use, or a field it does not read (not charged)
        '402':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentRequired'
          description: 'x402 v2 Payment Required: the exact requirements arrive base64-JSON in the PAYMENT-REQUIRED response header (pay $0.009 USDC on base = CAIP-2 eip155 id), then retry with the PAYMENT-SIGNATURE header (x402 v2; the v1 name X-PAYMENT is also accepted). Nothing is charged on a 402 — retrying is always safe.'
        '404':
          description: nothing to answer for this input — e.g. an unknown coin, currency, ticker or token, or a search with no match (not charged)
        '429':
          description: Rate limited (global 120/min/IP; stricter buckets on /mcp, webhook, auth). Sleep exactly Retry-After seconds, then retry.
          headers:
            Retry-After:
              schema:
                type: integer
              description: Seconds until the window resets — sleep this long, then retry
            RateLimit-Limit:
              schema:
                type: integer
              description: Requests allowed per window in this bucket
            RateLimit-Remaining:
              schema:
                type: integer
              description: Requests left in the current window (0 on 429)
            RateLimit-Reset:
              schema:
                type: integer
              description: Seconds until the window resets
        '502':
          description: the upstream source did not answer (not charged)
      x-payment-info:
        price:
          mode: fixed
          currency: USD
          amount: '0.009000'
        protocols:
        - x402: {}
      parameters:
      - name: asset
        in: query
        required: false
        schema:
          type: string
        description: Crypto asset ticker with a USD market on Coinbase Exchange (BTC, ETH, SOL, …). Default BTC
      - name: strategy
        in: query
        required: false
        schema:
          type: string
        description: sma_cross (long while the fast moving average is above the slow one), rsi_reversion (buy when RSI falls below rsiBuy, sell when it rises above rsiSell), dca (buy a fixed amount every dcaEveryDays), buy_and_hold. Default sma_cross
      - name: days
        in: query
        required: false
        schema:
          type: integer
        description: Length of the tested window in days, 30-365 (default 180)
      - name: fast
        in: query
        required: false
        schema:
          type: integer
        description: 'sma_cross: fast moving-average length in days, 2-100 (default 20)'
      - name: slow
        in: query
        required: false
        schema:
          type: integer
        description: 'sma_cross: slow moving-average length in days, 3-200, longer than fast (default 50)'
      - name: rsiPeriod
        in: query
        required: false
        schema:
          type: integer
        description: 'rsi_reversion: RSI length in days, 2-50 (default 14)'
      - name: rsiBuy
        in: query
        required: false
        schema:
          type: number
        description: 'rsi_reversion: buy when RSI falls below this, 1-50 (default 30)'
      - name: rsiSell
        in: query
        required: false
        schema:
          type: number
        description: 'rsi_reversion: sell when RSI rises above this, 50-99 (default 70)'
      - name: dcaEveryDays
        in: query
        required: false
        schema:
          type: integer
        description: 'dca: days between purchases, 1-30 (default 7)'
      - name: feeBps
        in: query
        required: false
        schema:
          type: number
        description: Fee on every trade in basis points, 0-100 (default 10 = 0.1%)
      - name: capitalUsd
        in: query
        required: false
        schema:
          type: number
        description: Starting capital in USD, 10-10000000 (default 1000)
      tags:
      - Market
      summary: Strategy backtest get
      x-summary-source: derived
components:
  schemas:
    StrategyBacktest:
      type: object
      description: Paid. Strategy backtest (crypto, daily closes).
      properties:
        asset:
          type: string
          description: The asset tested (its ticker)
        market:
          type: string
          description: The Coinbase Exchange market read, e.g. BTC-USD
        strategy:
          type: string
          description: 'The rule tested: sma_cross, rsi_reversion, dca or buy_and_hold'
        params:
          type: object
          properties: {}
          description: The parameters the rule used (defaults filled in)
        period:
          type: object
          properties:
            from:
              type: string
            to:
              type: string
            days:
              type: number
          required:
          - from
          - to
          - days
          description: 'The tested window: first and last completed UTC day, and its length'
        startPriceUsd:
          type: number
          description: Close on the first day of the window
        endPriceUsd:
          type: number
          description: Close on the last day of the window
        finalEquityUsd:
          type: number
          description: Capital at the end, cash plus the asset at the last close
        totalReturnPct:
          type: number
          description: The rule's return over the window, fees included, in percent
        buyAndHoldReturnPct:
          type: number
          description: Buying at the first close and holding, in percent (no fee) — the benchmark
        maxDrawdownPct:
          type: number
          description: The largest peak-to-trough fall of the rule's equity, in percent
        sharpe:
          type:
          - number
          - 'null'
          description: Annualised Sharpe ratio of daily equity returns (risk-free 0); null when equity never moved
        exposurePct:
          type: number
          description: Share of days the rule held the asset, in percent
        trades:
          type: number
          description: Number of trades (buys and sells)
        winRatePct:
          type:
          - number
          - 'null'
          description: Share of closed round trips that ended above their entry, in percent; null with no closed trip
        tradeList:
          type: array
          items:
            type: object
            properties:
              date:
                type: string
              side:
                type: string
              priceUsd:
                type: number
            required:
            - date
            - side
            - priceUsd
          description: 'The last 30 trades: date, buy or sell, execution close'
        equityCurve:
          type: array
          items:
            type: object
            properties:
              date:
                type: string
              equityUsd:
                type: number
              priceUsd:
                type: number
            required:
            - date
            - equityUsd
            - priceUsd
          description: Up to 31 evenly spaced points of the equity curve, with the asset's close
        method:
          type: string
          description: The rules, in full — enough to recompute every number
        source:
          type: string
          description: Where the prices come from
        asOf:
          type: string
          description: ISO time the prices were read
        note:
          type: string
          description: What a backtest is and is not
      required:
      - asset
      - market
      - strategy
      - params
      - period
      - startPriceUsd
      - endPriceUsd
      - finalEquityUsd
      - totalReturnPct
      - buyAndHoldReturnPct
      - maxDrawdownPct
      - sharpe
      - exposurePct
      - trades
      - winRatePct
      - tradeList
      - equityCurve
      - method
      - source
      - asOf
      - note
    PerpMarket:
      type: object
      description: Paid. Perp market + funding (Hyperliquid, Binance, Bybit).
      properties:
        venue:
          type: string
          description: The venue the markets are on (Hyperliquid)
        coin:
          type:
          - string
          - 'null'
          description: The coin asked for, as the venue names it; null when listing the most-traded markets
        markets:
          type: array
          items:
            type: object
            properties:
              coin:
                type: string
              markPx:
                type:
                - number
                - 'null'
              oraclePx:
                type:
                - number
                - 'null'
              midPx:
                type:
                - number
                - 'null'
              prevDayPx:
                type:
                - number
                - 'null'
              change24hPct:
                type:
                - number
                - 'null'
              fundingRate:
                type:
                - number
                - 'null'
                description: Funding per interval, as a decimal (0.0000125 = 0.00125%). Positive = longs pay shorts
              intervalHours:
                type: number
                description: 'Length of one funding interval (Hyperliquid: 1)'
              fundingAprPct:
                type:
                - number
                - 'null'
                description: fundingRate x (8760 / intervalHours) x 100, not compounded
              premium:
                type:
                - number
                - 'null'
              openInterest:
                type:
                - number
                - 'null'
                description: In coins
              openInterestUsd:
                type:
                - number
                - 'null'
              volume24hUsd:
                type:
                - number
                - 'null'
              maxLeverage:
                type:
                - number
                - 'null'
            required:
            - coin
            - markPx
            - oraclePx
            - midPx
            - prevDayPx
            - change24hPct
            - fundingRate
            - intervalHours
            - fundingAprPct
            - premium
            - openInterest
            - openInterestUsd
            - volume24hUsd
            - maxLeverage
          description: One market when a coin was named; otherwise the most-traded by 24h volume
        crossVenueFunding:
          type: array
          items:
            type: object
            properties:
              venue:
                type: string
              fundingRate:
                type:
                - number
                - 'null'
              intervalHours:
                type:
                - number
                - 'null'
              fundingAprPct:
                type:
                - number
                - 'null'
              nextFundingTime:
                type:
                - string
                - 'null'
            required:
            - venue
            - fundingRate
            - intervalHours
            - fundingAprPct
            - nextFundingTime
          description: The same coin's NEXT funding on Binance and Bybit (and Hyperliquid), as Hyperliquid publishes it
        source:
          type: string
          description: Where the data came from
        asOf:
          type: string
          description: ISO time the upstream data was read
        note:
          type: string
          description: How to read the numbers, and their limits
      required:
      - venue
      - coin
      - markets
      - crossVenueFunding
      - source
      - asOf
      - note
    PaymentRequired:
      type: object
      description: The 402 body (ADR-0045). Nothing is charged and nothing is created on a 402 — retrying is always safe.
      properties:
        error:
          type: string
        priceUsd:
          type: number
          description: Price in dollars. Present on single-leg challenges; multi-leg challenges omit it — read `accepts`.
        accepts:
          type: array
          description: The exact payment terms to sign, mirrored from the PAYMENT-REQUIRED header.
          items:
            type: object
        hint:
          type: string
          description: How to pay, and what to do if you have no wallet.
        docs:
          type: string
      required:
      - error
      - accepts
      - hint
externalDocs:
  description: Agent skill file — what to run before acting on a token, an address or a counterparty (text/markdown, live prices and catalog)
  url: https://fiatdock.com/skill.md
x-payment-protocol:
  protocol: x402
  version: 2
  network: base
  asset: USDC
  payTo: '0xeB12bB2f52EeD33DBa6A00774E48324032Fd87C6'
  mode: per-call
  paid:
  - path: /v1/offramp/session
    method: POST
    priceUsd: 0.01
  - path: /v1/onramp/session
    method: POST
    priceUsd: 0.01
  - path: /v1/token/safety
    method: POST
    priceUsd: 0.0045
  - path: /v1/stablecoin/intel
    method: POST
    priceUsd: 0.002
  - path: /v1/chain/token-metadata
    method: POST
    priceUsd: 0.002
  - path: /v1/chain/gas-price
    method: POST
    priceUsd: 0.001
  - path: /v1/chain/block
    method: POST
    priceUsd: 0.001
  - path: /v1/chain/eth-balance
    method: POST
    priceUsd: 0.001
  - path: /v1/chain/usdc-balance
    method: POST
    priceUsd: 0.001


# --- truncated at 32 KB (34 KB total) ---
# Full source: https://artifacts.apis.io/fiatdock-com/openapi/fiatdock-com-market-api-openapi.yml