Every API here is available over the APIs.io API and to AI agents over MCP.
# Faithful YAML serialization of https://legit.gonna.bond/openapi.json as fetched 2026-09-19 (HTTP 200, application/json, 59,922 bytes).
# Content is unchanged from the provider's document; the verbatim JSON is at openapi/_original/gonna-bond-legit-openapi-original.json.
# The provider publishes no servers[] block; the base URL https://legit.gonna.bond is recorded in apis.yml from the provider's own llms.txt examples.
openapi: 3.1.0
info:
title: LEGIT
description: 'Trust-check any x402 merchant or agent address on Algorand, Base, Solana, or 17 other chains before routing a payment. Returns a real-time grade (A+ to F) and score (0-100) built from live uptime, response latency, and payment coherence measurements, not self-reported data. Run as a pre-payment trust check: call GET /v1/check/{address} before any x402 payment to an address you have not paid before. Free: check a single address, pull a full trust report, batch-check multiple addresses, get a routing recommendation between two counterparties, resolve a merchant''s on-chain identity, query the ranked merchant leaderboard, see trending active merchants, and read live network pulse. Paid ($0.004 Algorand / $0.005 Base, via x402): compare two addresses side-by-side, get arena verdicts, pull 30-day score history for trend analysis, set a webhook-armed watch sentinel (7-day diagnostic tier or 30-day standard, same rail price) that fires on grade transitions, and run deep-check due
diligence. Use before sending an x402 payment to an unknown merchant, before accepting a counterparty in agent-to-agent settlement, or to monitor a critical upstream service for trust degradation. Created by GONNA.'
version: 0.1.0
contact:
name: GONNA
url: https://gonna.bond/gonnaverse/
email: legit@gonna.bond
x-logo:
url: https://legit.gonna.bond/favicon.png
x-guidance: 'LEGIT is the trust and routing layer for the x402 agentic economy. Trust-check any x402 merchant address on Algorand, Base, Solana or 17 other chains before routing a payment: grades (A+ to F) and scores (0-100) come from live uptime, latency and payment-coherence probes, never self-reported data. Run as a pre-payment trust check: call GET /v1/check/{address} before any x402 payment to an address you have not paid before. Start FREE: GET /v1/check/{address} (full trust report), /v1/leaderboard (ranked shortlist), /v1/trending, /v1/pulse, /v1/arena/preview. Paid per call in USDC over x402: GET /v1/compare (2-5 merchants head-to-head), /v1/arena (24h cross-chain settlement benchmark, ?network= filter), /v1/history?address=... (30-day trust trend), POST /v1/watch (7- or 30-day change sentinel, webhook-armed), POST /v1/deep-check (due diligence, up to 10 addresses). How to pay: call a paid endpoint without paying and it answers 402 with a PaymentRequired document listing every
active rail; pay one rail and retry with the PAYMENT-SIGNATURE header. Rails cheapest first: algorand-mainnet $0.004, base-mainnet and solana-mainnet $0.005 per call. Watch companions GET /v1/watches/{watch_id} and /v1/watches/{watch_id}/events are FREE: the watch id is the bearer capability for status and the event feed. Webhook payload anatomy: /docs; agent manifest: /llms.txt. Use LEGIT before sending an x402 payment to an unknown merchant, before accepting a counterparty in agent-to-agent settlement, or to monitor a critical upstream for trust degradation.'
paths:
/health:
get:
summary: Liveness probe
description: 'Liveness probe: ``{"status": "ok"}`` when the service is up (FREE).'
operationId: health_health_get
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: object
title: Response Health Health Get
security: []
/v1/leaderboard:
get:
summary: Query the ranked merchant leaderboard to shortlist counterparties
description: 'Leaderboard with optional ?network= filter (SPEC_V2, Module A).
``networks`` always lists the distinct networks present BEFORE filtering
so clients can build filter chips; backwards compatible with Wave 1.
Wave 16 (Instant Speed): cacheable for 30s. ``view=trimmed`` is the
dashboard''s diet variant: null optional fields are omitted entirely
(the dashboard treats absent and null identically), which removes
hundreds of ``"field":null`` pairs from a large board. The default
view is byte-for-byte the public contract it always was.
Wave 18 (The Instant Doctrine): opt-in server pagination via
``page``/``size`` (25/50/100) plus a ``q`` name/address substring
filter, sliced AFTER the existing filter+sort+rank logic so ranks
stay global; the paged payload also carries ``counts`` (cheap
per-network tallies for the dashboard chips). A 30s in-process TTL
cache (keyed by the full query string) fronts every variant; the
rate limiter still sees every request.
Wave 40 (La Voce): testnet networks and dormant merchants (no
measurement inside LEGIT_ACTIVE_WINDOW_DAYS, default 7 days) are out
of the default view; ``?include_testnet=true`` and
``?include_dormant=true`` restore them, dormant entries flagged
``dormant: true``.
Wave 41 (La Bellezza, W0): ``rank`` is the consecutive position in
the returned view (post testnet/dormant policy): 1,2,3 with no
holes. The additive ``rank_global`` preserves the absolute
pre-filter rank; with both opt-ins active, rank == rank_global.'
operationId: leaderboard_v1_leaderboard_get
parameters:
- name: network
in: query
required: false
schema:
anyOf:
- type: string
minLength: 1
maxLength: 32
pattern: ^[a-z0-9-]+$
- type: 'null'
description: Optional exact-match network filter (e.g. base-mainnet)
title: Network
description: Optional exact-match network filter (e.g. base-mainnet)
- name: view
in: query
required: false
schema:
anyOf:
- type: string
pattern: ^(full|trimmed)$
- type: 'null'
description: 'Optional payload diet. ''trimmed'' omits null-valued optional fields (additive contract: absent instead of null); the default keeps the full Wave 1 shape.'
title: View
description: 'Optional payload diet. ''trimmed'' omits null-valued optional fields (additive contract: absent instead of null); the default keeps the full Wave 1 shape.'
- name: page
in: query
required: false
schema:
anyOf:
- type: integer
minimum: 1
- type: 'null'
description: 'Wave 18: optional 1-based server page. When page and/or size are given the response becomes the paged shape {generated_at, total, page, size, entries} sliced AFTER the global rank/filter logic, so ranks stay global.'
title: Page
description: 'Wave 18: optional 1-based server page. When page and/or size are given the response becomes the paged shape {generated_at, total, page, size, entries} sliced AFTER the global rank/filter logic, so ranks stay global.'
- name: size
in: query
required: false
schema:
anyOf:
- type: integer
- type: 'null'
description: 'Wave 18: page size, one of 25, 50, 100 (default 50 when paging).'
title: Size
description: 'Wave 18: page size, one of 25, 50, 100 (default 50 when paging).'
- name: q
in: query
required: false
schema:
anyOf:
- type: string
minLength: 1
maxLength: 100
- type: 'null'
description: 'Wave 18: optional name/address substring filter.'
title: Q
description: 'Wave 18: optional name/address substring filter.'
- name: include_testnet
in: query
required: false
schema:
type: boolean
description: 'Wave 40: testnet/devnet/amoy/sepolia networks are excluded by default; pass ?include_testnet=true to restore them (same entry shape).'
default: false
title: Include Testnet
description: 'Wave 40: testnet/devnet/amoy/sepolia networks are excluded by default; pass ?include_testnet=true to restore them (same entry shape).'
- name: include_dormant
in: query
required: false
schema:
type: boolean
description: 'Wave 40: the default view shows only merchants with a measurement inside the active window (LEGIT_ACTIVE_WINDOW_DAYS, default 7 days); pass ?include_dormant=true for the full view, with dormant entries flagged dormant=true.'
default: false
title: Include Dormant
description: 'Wave 40: the default view shows only merchants with a measurement inside the active window (LEGIT_ACTIVE_WINDOW_DAYS, default 7 days); pass ?include_dormant=true for the full view, with dormant entries flagged dormant=true.'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/Leaderboard'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security: []
/v1/stats:
get:
summary: Read headline service stats and storage facts
description: 'Headline service stats: merchant and measurement counts, average
trust score and verifiable storage facts (FREE, cached 30s).'
operationId: stats_v1_stats_get
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/Stats'
security: []
/v1/compare:
get:
summary: Compare 2-5 addresses side-by-side before picking one to pay
description: 'Compare 2-5 merchant addresses head-to-head (FREE, rate limited).
Returns a TrustReport-like summary per address plus ``winner`` (best
trust score; Wave 7 ties broken by more real payments settled, then
lower median latency, then higher sample size) and a plain-English
``rationale``. Untracked addresses are included with ``score=null``
and ``tracked=false``; they cannot win.
Wave 41c (Il Cliente Cieco): ``addresses`` is optional. A blind
client (one that paid and calls with no parameters) gets the top
merchants of the current default ranking compared, with the additive
``defaults_applied`` field disclosing the choice; when the ranking
holds too few real merchants no sensible default exists and the
parameter stays honestly required (self-documenting 422). Paid: $0.004 on Algorand / $0.005 on Base, via x402 (per call in USDC on algorand-mainnet or base-mainnet; the 402 response lists every active rail). The POST /v1/watch 7-day diagnostic tier pays the same per-call rail price as the 30-day watch.'
operationId: compare_v1_compare_get
parameters:
- name: addresses
in: query
required: false
schema:
anyOf:
- type: string
minLength: 1
maxLength: 2000
- type: 'null'
description: 'Comma-separated merchant addresses (2-5). Optional: when omitted, the top merchants of the current default ranking are compared and the choice is disclosed in defaults_applied.'
title: Addresses
description: 'Comma-separated merchant addresses (2-5). Optional: when omitted, the top merchants of the current default ranking are compared and the choice is disclosed in defaults_applied.'
examples:
two_addresses:
summary: Compare two Algorand merchant addresses
value: G7V7U7H6IYRP7BIZO2KV6ODGQPESMMRDCWBYT3GIMNHTNK3VCKWSSKD55A,ZQFL2SVFDQDKFAUCCE2WVXH6EF3LRUUJZLKJMDIED56LODOKW23JSKB7NT
three_addresses:
summary: Compare three Algorand merchant addresses
value: G7V7U7H6IYRP7BIZO2KV6ODGQPESMMRDCWBYT3GIMNHTNK3VCKWSSKD55A,ZQFL2SVFDQDKFAUCCE2WVXH6EF3LRUUJZLKJMDIED56LODOKW23JSKB7NT,TARTD3TCZERKBTXQQEQED76TGSCBU6SL2QE3Z5K74GKTRCIHFMSIDAOLJP
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/CompareResponse'
example:
generated_at: '2026-01-01T00:00:00+00:00'
entries:
- address: ADDRESS_A
name: Merchant A
score: 82.5
grade: B
provisional: false
uptime_pct: 99.5
latency_p50_ms: 210.0
sample_size: 12
settle_count: 340
network: algorand-mainnet
explorer_url: https://allo.info/account/ADDRESS_A
tracked: true
- address: ADDRESS_B
name: null
score: null
grade: null
provisional: false
uptime_pct: null
latency_p50_ms: null
sample_size: 0
settle_count: 0
network: null
explorer_url: null
tracked: false
winner: ADDRESS_A
rationale: 'Merchant A wins: highest trust score (82.5 vs 71.0).'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
'402':
description: 'Payment required: the body is an x402 PaymentRequired document (x402Version, error, resource, accepts) listing the USDC payment offers for every active rail; retry with a payment payload.'
content:
application/json:
schema:
type: object
properties:
x402Version:
type: integer
error:
type: string
resource:
type: object
accepts:
type: array
items:
type: object
x-payment-info:
price:
mode: fixed
currency: USD
amount: '0.004'
protocols:
- x402: {}
/v1/check/{address}:
get:
summary: Trust-check a merchant address before paying it
description: Full trust report for one merchant (Algorand address or base URL).
operationId: check_v1_check__address__get
parameters:
- name: address
in: path
required: true
schema:
type: string
title: Address
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/TrustReport'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security: []
/v1/receipts:
get:
summary: Receipts
description: 'Verified on-chain payment receipts for one tracked merchant.
The 30-day ledger of real settlements observed by LEGIT''s own keyless
chain scan (Algorand first): who paid, how much, when, with the
on-chain transaction id as independently verifiable evidence.
``receipts`` is newest-first and capped at 100 entries while
``total_receipts`` and ``volume_usd`` cover the full window. An empty
window is an honest empty answer (total_receipts 0, receipts []),
never invented rows; untracked addresses get an honest 404.
Wave 47b: the address is a mandatory query parameter (the /v1/history
convention), so the registered path is exactly "/v1/receipts" and an
operator-declared X402_PREMIUM_PATHS entry matches it byte-for-byte.
This endpoint is FREE by construction: it ships outside
X402_PREMIUM_PATHS and stays free until the operator adds the path to
that env var (per-path payment via the app.payments middleware, which
this wave does not touch).'
operationId: receipts_v1_receipts_get
parameters:
- name: address
in: query
required: true
schema:
type: string
minLength: 1
maxLength: 300
description: Merchant address (or base URL) exactly as tracked by LEGIT, e.g. ?address=ADDR.
title: Address
description: Merchant address (or base URL) exactly as tracked by LEGIT, e.g. ?address=ADDR.
examples:
algorand_address:
summary: 30-day receipts of one Algorand merchant
value: G7V7U7H6IYRP7BIZO2KV6ODGQPESMMRDCWBYT3GIMNHTNK3VCKWSSKD55A
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/ReceiptsResponse'
'404':
description: 'The address is not tracked by LEGIT: an honest 404, never an invented ledger.'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security: []
/v1/route:
get:
summary: Get a routing recommendation between two counterparties
description: 'Phase 0 routing: keyword match on merchant name/address, best score wins.'
operationId: route_v1_route_get
parameters:
- name: need
in: query
required: true
schema:
type: string
minLength: 1
maxLength: 200
title: Need
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/RouteResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security: []
/v1/report/{address}:
get:
summary: Pull the full trust report of one merchant before integrating
description: 'Deep report: full breakdown, 30-row score history, rank and percentile.
FREE (rate limited). Unknown addresses get an honest unrated report.
The fabricated demo report requires the explicit ``?demo=true`` opt-in.'
operationId: report_v1_report__address__get
parameters:
- name: address
in: path
required: true
schema:
type: string
title: Address
- name: demo
in: query
required: false
schema:
type: boolean
description: 'Opt-in demo mode: for the five hardcoded demo addresses, return the fabricated illustration report flagged demo=true. Off by default: fabricated data is never served unmarked.'
default: false
title: Demo
description: 'Opt-in demo mode: for the five hardcoded demo addresses, return the fabricated illustration report flagged demo=true. Off by default: fabricated data is never served unmarked.'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/DeepReport'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security: []
/v1/batch-check:
post:
summary: Batch-check multiple addresses in one call
description: 'Trust-report-lite for 1..20 validated addresses in one call.
FREE (rate limited). Fabricated demo entries require the explicit
``?demo=true`` opt-in; when any are included the response is flagged
``demo: true`` at the top level and per entry.'
operationId: batch_check_v1_batch_check_post
parameters:
- name: demo
in: query
required: false
schema:
type: boolean
description: 'Opt-in demo mode: demo addresses resolve to the fabricated illustration entries flagged demo=true. Off by default.'
default: false
title: Demo
description: 'Opt-in demo mode: demo addresses resolve to the fabricated illustration entries flagged demo=true. Off by default.'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
addresses:
type: array
items:
type: string
maxLength: 300
minItems: 1
maxItems: 20
description: 1 to 20 merchant addresses or base URLs, each validated like /v1/check. Untracked addresses get an honest unrated report, never an invented score.
example:
- G7V7U7H6IYRP7BIZO2KV6ODGQPESMMRDCWBYT3GIMNHTNK3VCKWSSKD55A
required:
- addresses
example:
addresses:
- G7V7U7H6IYRP7BIZO2KV6ODGQPESMMRDCWBYT3GIMNHTNK3VCKWSSKD55A
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/BatchReport'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security: []
/v1/trending:
get:
summary: See trending active merchants
description: 'FREE. Top 5 by 24h score delta; falls back to top 5 by score.
Wave 8.9 (the honesty gate): the demo-merchant fallback renders ONLY
while the DB holds zero real merchants. When real merchants exist but
no score signal has landed yet (cold start after a redeploy), the strip
gets an honest empty list and the dashboard says it is gathering 24h
signals, instead of inventing names.
Wave 18 (The Instant Doctrine): served from the cycle-computed
snapshot; on a cold boot it computes ONCE, stores and serves. The
path and shape are identical to what they always were.
Wave 40 (La Voce): testnet networks and dormant merchants are out of
the default strip; ?include_testnet=true and ?include_dormant=true
restore them, dormant entries flagged ``dormant: true``. The opt-in
variants are computed fresh per request (bounded grouped queries,
rate limited); the snapshot serves the default view.'
operationId: trending_v1_trending_get
parameters:
- name: include_testnet
in: query
required: false
schema:
type: boolean
description: 'Wave 40: testnet/devnet/amoy/sepolia networks are excluded by default; pass ?include_testnet=true to restore them (same entry shape).'
default: false
title: Include Testnet
description: 'Wave 40: testnet/devnet/amoy/sepolia networks are excluded by default; pass ?include_testnet=true to restore them (same entry shape).'
- name: include_dormant
in: query
required: false
schema:
type: boolean
description: 'Wave 40: the default strip shows only merchants with a measurement inside the active window (LEGIT_ACTIVE_WINDOW_DAYS, default 7 days); pass ?include_dormant=true for the full field, dormant entries flagged dormant=true.'
default: false
title: Include Dormant
description: 'Wave 40: the default strip shows only merchants with a measurement inside the active window (LEGIT_ACTIVE_WINDOW_DAYS, default 7 days); pass ?include_dormant=true for the full field, dormant entries flagged dormant=true.'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/Trending'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security: []
/v1/pulse:
get:
summary: Read the live x402 network pulse
description: 'Real network pulse: the facilitator''s masked live transaction stream,
merged with recent on-chain USDC payments from the Wave 8.5 ledger.
Wave 18 (The Instant Doctrine): served from the cycle-computed
snapshot (refreshed every indexer cycle), so a page load never waits
on the facilitator round-trip. Cold boot computes ONCE, stores and
serves. Graceful empty list when the facilitator is unreachable.
Each transaction carries ``tx_url`` (Wave 3.2): an explorer link when
the stream exposes a real on-chain hash, else None. On-chain rows are
honestly labeled ``event="onchain_payment"`` and never presented as
facilitator settles.'
operationId: pulse_v1_pulse_get
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: object
title: Response Pulse V1 Pulse Get
security: []
/v1/chain-logos:
get:
summary: Resolve official chain brand tiles
description: 'Wave 14 (The Chain Heraldry): network slug -> official tile URL.
Static payload (the mapping only changes with a deploy), cacheable for
10 minutes. Unmapped chains (skale-base-mainnet, aws-base, unknown
slugs) are simply absent: clients keep their monogram/glyph fallback.'
operationId: chain_logos_v1_chain_logos_get
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: object
title: Response Chain Logos V1 Chain Logos Get
security: []
/v1/networks:
get:
summary: Check per-chain payment health before routing
description: 'Per-chain payment network health from the facilitator, plus honest
coverage counts from our own DB.
Cached 60s. Graceful empty ``networks`` list when the facilitator is
unreachable. Wave 8.6: ``settlement_rails`` counts the facilitator
rails (the 6 gasless chains) while ``chains_indexed``/``indexed_chains``
report how many chains the oracle actually indexes merchants on, so the
two scopes are never conflated.'
operationId: networks_v1_networks_get
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: object
title: Response Networks V1 Networks Get
security: []
/v1/merchant/{address}/identity:
get:
summary: Resolve a merchant's on-chain identity across chains
description: 'Cross-chain identity for a merchant, from our DB.
Graceful 404-shape: ``{"found": false}`` (HTTP 200) when the address is
unknown. Categories are best-effort filled from the facilitator''s live
identity record ([] when unavailable).'
operationId: merchant_identity_v1_merchant__address__identity_get
parameters:
- name: address
in: path
required: true
schema:
type: string
title: Address
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: object
title: Response Merchant Identity V1 Merchant Address Identity Get
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
security: []
/v1/arena:
get:
summary: 'Get arena verdicts: the 24h cross-chain settlement benchmark'
description: 'Wave 6 (The Arena): the public cross-chain x402 settlement benchmark.
Ranks every chain with any signal (pulse transactions in the last 24h,
tracked merchants, or facilitator network health) by real settle count
(Wave 8.9: micropayments are a count economy; volume only breaks ties).
Cached 60s. Honest by construction: with zero pulse data in the
window the narrative says the arena is still gathering its first data
and no leader is named. Wave 39 (Il Biglietto da Visita): the optional
?network= slug narrows the benchmark to one chain (cached separately
per slug); an unknown slug is an honest 400 listing the valid slugs. Paid: $0.004 on Algorand / $0.005 on Base, via x402 (per call in USDC on algorand-mainnet or base-mainnet; the 402 response lists every active rail). The POST /v1/watch 7-day diagnostic tier pays the same per-call rail price as the 30-day watch.'
operationId: arena_v1_arena_get
parameters:
- name: network
in: query
required: false
schema:
anyOf:
- type: string
maxLength: 64
- type: 'null'
description: 'Optional chain slug filter, e.g. ?network=base-mainnet: the benchmark is narrowed to that one network. Omit it for the full cross-chain arena. An unknown slug is an honest 400 listing the slugs currently benchmarked.'
title: Network
description: 'Optional chain slug filter, e.g. ?network=base-mainnet: the benchmark is narrowed to that one network. Omit it for the full cross-chain arena. An unknown slug is an honest 400 listing the slugs currently benchmarked.'
examples:
single_network:
summary: Benchmark one chain (Base)
value: base-mainnet
algorand_only:
summary: Benchmark Algorand only
value: algorand-mainnet
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: object
title: Response Arena V1 Arena Get
example:
generated_at: '2026-01-01T00:00:00+00:00'
window_hours: 24
chains:
- network: base-mainnet
network_name: Base
chain_family: evm
tx_count_24h: 150
settles_24h: 120
settles_facilitator_24h: 118
settles_onchain_24h: 2
large_inflows_24h: 0
verifies_24h: 30
volume_usdc_24h: 61.25
avg_ticket_usdc_24h: 0.51
merchants_tracked: 8
avg_trust_score: 76.4
latency_p50_ms: 240.0
avg_settlement_time: 2s
rank: 1
large_inflows_24h: 0
leader: base-mainnet
narrative: 'Base leads x402 settlement: 120 settles totaling 61.25 USDC in 24h.'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
'402':
description: 'Payment required: the body is an x402 PaymentRequired document (x402Version, error, resource, accepts) listing the USDC payment offers for every active rail; retry with a payment payload.'
content:
application/json:
schema:
type: object
properties:
x402Version:
type: integer
error:
type: string
# --- truncated at 32 KB (74 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/gonna-bond/refs/heads/main/openapi/gonna-bond-legit-openapi.yml