{"openapi":"3.1.0","info":{"title":"Criptonlabs Agent APIs","version":"0.19.2","description":"Agent-native, read-only XRP Ledger and Solana APIs. Errors are RFC 9457 problem+json.","contact":{"name":"Criptonlabs","url":"https://api.criptonlabs.com","email":"hello@criptonlabs.com"},"x-guidance":"Read-only XRPL data. Free /v1/* routes and /mcp need no key or payment; start at /llms.txt. Check /v1/xrpl/fee, /v1/xrpl/network/health and /v1/xrpl/account/{address}/summary before building a transaction. Read meta.stale and meta.age_seconds on every response."},"servers":[{"url":"https://api.criptonlabs.com"}],"components":{"schemas":{"PaymentRequired":{"type":"object","properties":{"x402Version":{"type":"number","enum":[2]},"error":{"type":"string","description":"Why the previous payment, if any, was not accepted."},"resource":{"type":"object","properties":{"url":{"type":"string"},"description":{"type":"string","description":"What the resource returns (from the docs)."},"mimeType":{"type":"string","description":"Media type of a successful response."}},"required":["url"]},"accepts":{"type":"array","items":{"$ref":"#/components/schemas/PaymentRequirement"}},"extensions":{"type":"object","additionalProperties":{"type":"object","properties":{"info":{"type":"object","additionalProperties":{}},"schema":{"type":"object","additionalProperties":{}}},"required":["info","schema"]},"description":"x402 v2 extensions; `bazaar` describes the call (input, output) for discovery."}},"required":["x402Version","resource","accepts"],"example":{"x402Version":2,"error":"A valid payment is required.","resource":{"url":"https://api.criptonlabs.com/v1/pro/xrpl/fee"},"accepts":[{"scheme":"exact","network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","asset":"HzwqbKZw8HxMN6bF2yFZNrht3c2iXXzpKcFu7uBEDKtr","amount":"5000","payTo":"<recipient token owner address>","maxTimeoutSeconds":60,"resource":"https://api.criptonlabs.com/v1/pro/xrpl/fee","extra":{"feePayer":"<facilitator fee payer address>"}}]}},"PaymentRequirement":{"type":"object","properties":{"scheme":{"type":"string","enum":["exact"]},"network":{"type":"string","description":"CAIP-2 network id, for example `solana:5eykt4Us...`."},"asset":{"type":"string","description":"Token mint of the payment asset."},"amount":{"type":"string","description":"Price in atomic units of the asset (integer string)."},"payTo":{"type":"string","description":"Recipient token owner address."},"maxTimeoutSeconds":{"type":"integer"},"resource":{"type":"string","description":"The exact resource the payment is bound to: the route URL without query, or `mcp://criptonlabs/pro/<tool>`."},"extra":{"type":"object","properties":{"feePayer":{"type":"string","description":"Fee payer of the facilitator that settles this entry."}},"required":["feePayer"]}},"required":["scheme","network","asset","amount","payTo","maxTimeoutSeconds","resource","extra"]},"MetaXrpl":{"type":"object","properties":{"ledger_index":{"type":"integer","description":"Validated ledger the data comes from"},"as_of":{"type":"string","format":"date-time","description":"When the data was read from the ledger"},"age_seconds":{"type":"integer","minimum":0,"description":"Age of the data at response time"},"cache":{"type":"string","enum":["hit","miss","stale"]},"stale":{"type":"boolean","description":"True when served past its fresh TTL (stale-on-error)"}},"required":["ledger_index","as_of","age_seconds","cache","stale"]},"RequirementsResponse":{"type":"object","properties":{"x402Version":{"type":"number","enum":[2]},"resource":{"type":"object","properties":{"url":{"type":"string"},"description":{"type":"string","description":"What the resource returns (from the docs)."},"mimeType":{"type":"string","description":"Media type of a successful response."}},"required":["url"]},"accepts":{"type":"array","items":{"$ref":"#/components/schemas/PaymentRequirement"},"description":"Empty unless paid access is active."},"extensions":{"type":"object","additionalProperties":{"type":"object","properties":{"info":{"type":"object","additionalProperties":{}},"schema":{"type":"object","additionalProperties":{}}},"required":["info","schema"]},"description":"x402 v2 extensions; `bazaar` describes the call (input, output) for discovery."},"payments_mode":{"type":"string","enum":["off","gateway","x402"]}},"required":["x402Version","resource","accepts","payments_mode"]},"PriceIndex":{"type":"object","properties":{"x402Version":{"type":"number","enum":[2]},"payments_mode":{"type":"string","enum":["off","gateway","x402"]},"network":{"type":"string","description":"CAIP-2 settlement network. Active x402 only."},"asset":{"type":"string","description":"Settlement asset symbol. Active x402 only."},"mint":{"type":"string","description":"Settlement asset mint. Active x402 only."},"vat_included":{"type":"boolean","enum":[true],"description":"Prices include VAT. Active x402 only."},"routes":{"type":"array","items":{"type":"object","properties":{"resource":{"type":"string","description":"`/v1/pro/*` route template or `mcp://criptonlabs/pro/<tool>`."},"name":{"type":"string","description":"MCP tool name (tools only)."},"description":{"type":"string"},"price":{"type":"object","properties":{"amount":{"type":"string"},"asset":{"type":"string"}},"required":["amount","asset"],"description":"Per-call price, VAT included. Present only when paid access is active."},"links":{"type":"object","properties":{"requirements":{"type":"string","description":"Per-resource payment options (`?resource=`)."},"docs":{"type":"string","description":"Documentation page of the route or tool."}},"required":["requirements","docs"]}},"required":["resource","description","links"]}},"tools":{"type":"array","items":{"type":"object","properties":{"resource":{"type":"string","description":"`/v1/pro/*` route template or `mcp://criptonlabs/pro/<tool>`."},"name":{"type":"string","description":"MCP tool name (tools only)."},"description":{"type":"string"},"price":{"type":"object","properties":{"amount":{"type":"string"},"asset":{"type":"string"}},"required":["amount","asset"],"description":"Per-call price, VAT included. Present only when paid access is active."},"links":{"type":"object","properties":{"requirements":{"type":"string","description":"Per-resource payment options (`?resource=`)."},"docs":{"type":"string","description":"Documentation page of the route or tool."}},"required":["requirements","docs"]}},"required":["resource","description","links"]}},"links":{"type":"object","properties":{"pro_docs":{"type":"string"},"payments_guide":{"type":"string"}},"required":["pro_docs","payments_guide"]}},"required":["x402Version","payments_mode","routes","tools","links"]},"FeeResponse":{"type":"object","properties":{"fee":{"type":"object","properties":{"economy":{"type":"string","description":"Drops"},"standard":{"type":"string","description":"Drops"},"priority":{"type":"string","description":"Drops"}},"required":["economy","standard","priority"]},"congestion":{"type":"object","properties":{"score":{"type":"integer","minimum":0,"maximum":100},"band":{"type":"string","enum":["low","medium","high"]},"load_factor_assumed":{"type":"boolean"}},"required":["score","band","load_factor_assumed"]},"base_fee":{"type":"string","description":"Decimal string"},"median_fee":{"type":"string","description":"Decimal string"},"minimum_fee":{"type":"string","description":"Decimal string"},"open_ledger_fee":{"type":"string","description":"Decimal string"},"current_queue_size":{"type":"string","description":"Decimal string"},"max_queue_size":{"type":"string","description":"Decimal string"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["fee","congestion","base_fee","median_fee","minimum_fee","open_ledger_fee","current_queue_size","max_queue_size","meta"]},"Meta":{"type":"object","properties":{"ledger_index":{"type":"integer","description":"Validated ledger the data comes from"},"as_of":{"type":"string","format":"date-time","description":"When the data was read from the ledger"},"age_seconds":{"type":"integer","minimum":0,"description":"Age of the data at response time"},"cache":{"type":"string","enum":["hit","miss","stale"]},"stale":{"type":"boolean","description":"True when served past its fresh TTL (stale-on-error)"}},"required":["ledger_index","as_of","age_seconds","cache","stale"]},"HealthResponse":{"type":"object","properties":{"status":{"type":"string","enum":["ok","degraded","down","unknown"]},"nodes":{"type":"array","items":{"type":"object","properties":{"member":{"type":"string"},"state":{"type":"string","enum":["up","down"]},"latency_ms":{"type":["number","null"]},"ledger_index":{"type":["integer","null"]},"ledger_age_s":{"type":["number","null"]},"load_factor":{"type":["number","null"]},"error":{"type":["string","null"]},"sampled_at":{"type":"string","format":"date-time"}},"required":["member","state","latency_ms","ledger_index","ledger_age_s","load_factor","error","sampled_at"]}},"ledger_index":{"type":"integer"},"last_probe_at":{"type":["string","null"],"format":"date-time"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["status","nodes","ledger_index","last_probe_at","meta"]},"HealthHistoryResponse":{"type":"object","properties":{"window":{"type":"string","enum":["1h","24h","7d"]},"bucket_seconds":{"type":"integer","exclusiveMinimum":0},"buckets":{"type":"array","items":{"type":"object","properties":{"start":{"type":"string","format":"date-time"},"members":{"type":"array","items":{"type":"object","properties":{"member":{"type":"string"},"samples":{"type":"integer"},"up":{"type":"integer"},"uptime_pct":{"type":"number"},"avg_latency_ms":{"type":["number","null"]}},"required":["member","samples","up","uptime_pct","avg_latency_ms"]}}},"required":["start","members"]}},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["window","bucket_seconds","buckets","meta"]},"LedgerResponse":{"type":"object","properties":{"ledger_index":{"type":"integer"},"close_time":{"type":["string","null"],"format":"date-time"},"ledger_hash":{"type":["string","null"]},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["ledger_index","close_time","ledger_hash","meta"]},"OrderbookResponse":{"type":"object","properties":{"base":{"type":"string"},"quote":{"type":"string"},"depth":{"type":"integer"},"asks":{"type":"array","items":{"$ref":"#/components/schemas/BookLevel"},"description":"Best (lowest) price first"},"bids":{"type":"array","items":{"$ref":"#/components/schemas/BookLevel"},"description":"Best (highest) price first, from the base-asset side"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["base","quote","depth","asks","bids","meta"]},"BookLevel":{"type":"object","properties":{"gets":{"type":"string","description":"Decimal string"},"pays":{"type":"string","description":"Decimal string"},"price":{"type":"string","description":"Pays per gets, decimal string"}},"required":["gets","pays","price"]},"SlippageResponse":{"type":"object","properties":{"base":{"type":"string"},"quote":{"type":"string"},"side":{"type":"string","enum":["buy"]},"depth":{"type":"integer"},"amount":{"type":"string","description":"Decimal string"},"filled":{"type":"string","description":"Decimal string"},"partial":{"type":"boolean"},"insufficient_liquidity":{"type":"boolean"},"best_price":{"type":["string","null"],"description":"Decimal string"},"avg_price":{"type":["string","null"],"description":"Decimal string"},"slippage_pct":{"type":["string","null"],"description":"Percent, null when liquidity is insufficient"},"transfer_fee_applied":{"type":"boolean"},"transfer_fee":{"type":["string","null"],"description":"Decimal string"},"avg_price_after_fees":{"type":["string","null"],"description":"Decimal string"},"venues":{"type":"object","properties":{"best":{"type":["string","null"],"enum":["clob","amm",null],"description":"Cheaper venue by avg_price (ties go to the CLOB), null when neither can fill"},"amm_status":{"type":"string","enum":["ok","stale","no_pool","unavailable"],"description":"State of the AMM read: ok, stale (served past its fresh window), no_pool, unavailable"},"clob":{"type":"object","properties":{"avg_price":{"type":["string","null"],"description":"Quote paid per base received, null when it cannot fill"},"cost":{"type":["string","null"],"description":"Total quote paid for `amount`, null when it cannot fill"},"slippage_pct":{"type":["string","null"],"description":"Percent vs the best ask, null when it cannot fill"},"insufficient_liquidity":{"type":"boolean"},"avg_price_after_fees":{"type":["string","null"],"description":"avg_price x issuer TransferRate, null when the rate is unknown"}},"required":["avg_price","cost","slippage_pct","insufficient_liquidity","avg_price_after_fees"]},"amm":{"type":["object","null"],"properties":{"avg_price":{"type":["string","null"],"description":"Quote paid per base received, null when it cannot fill"},"cost":{"type":["string","null"],"description":"Total quote paid for `amount`, null when it cannot fill"},"slippage_pct":{"type":["string","null"],"description":"Percent vs the fee-free pool spot price (includes the trading fee), null when it cannot fill"},"insufficient_liquidity":{"type":"boolean"},"avg_price_after_fees":{"type":["string","null"],"description":"avg_price x issuer TransferRate, null when the rate is unknown"},"spot_price":{"type":"string","description":"Pool spot price, quote per base, excluding fee and impact"},"trading_fee":{"type":"string","description":"Pool trading fee as a fraction, like /v1/xrpl/amm"}},"required":["avg_price","cost","slippage_pct","insufficient_liquidity","avg_price_after_fees","spot_price","trading_fee"],"description":"Null when the pair has no pool or the pool could not be read (see amm_status)"}},"required":["best","amm_status","clob","amm"],"description":"CLOB vs AMM comparison for the same amount; no routing split"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["base","quote","side","depth","amount","filled","partial","insufficient_liquidity","best_price","avg_price","slippage_pct","transfer_fee_applied","transfer_fee","avg_price_after_fees","venues","meta"]},"AmmResponse":{"type":"object","properties":{"asset_a":{"type":"string"},"asset_b":{"type":"string"},"reserve_a":{"type":"string","description":"Decimal string"},"reserve_b":{"type":"string","description":"Decimal string"},"trading_fee":{"type":"string","description":"Decimal string"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["asset_a","asset_b","reserve_a","reserve_b","trading_fee","meta"]},"AccountSummaryResponse":{"type":"object","properties":{"address":{"type":"string"},"balance_xrp":{"type":"string","description":"Decimal string"},"sequence":{"type":"integer"},"owner_count":{"type":"integer"},"transfer_rate":{"type":"integer","description":"Issuer TransferRate, 1000000000 = no fee"},"trust_lines":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string"},"issuer":{"type":"string"},"balance":{"type":"string","description":"Decimal string"},"limit":{"type":"string","description":"Decimal string"}},"required":["currency","issuer","balance","limit"]}},"lines_truncated":{"type":"boolean"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["address","balance_xrp","sequence","owner_count","transfer_rate","trust_lines","lines_truncated","meta"]},"AccountLinesResponse":{"type":"object","properties":{"address":{"type":"string"},"limit":{"type":"integer"},"peer":{"type":["string","null"]},"lines":{"type":"array","items":{"type":"object","properties":{"peer":{"type":"string","description":"Counterparty address"},"currency":{"type":"string","description":"Canonical currency code (3 characters or 40 hex)"},"currency_ascii":{"type":["string","null"],"description":"Readable text of a 40-hex currency code; null when not printable ASCII; absent for XRP and 3-character codes"},"balance":{"type":"string","description":"Positive: the peer owes the account; negative: the account owes"},"limit":{"type":"string","description":"Limit the account sets"},"peer_limit":{"type":"string","description":"Limit the peer sets"},"no_ripple":{"type":"boolean"},"no_ripple_peer":{"type":"boolean"},"freeze":{"type":"boolean"},"freeze_peer":{"type":"boolean"},"authorized":{"type":"boolean"},"peer_authorized":{"type":"boolean"}},"required":["peer","currency","balance","limit","peer_limit","no_ripple","no_ripple_peer","freeze","freeze_peer","authorized","peer_authorized"]}},"marker":{"type":["string","null"],"description":"Opaque cursor for the next page (send as `marker`); null on the last page"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["address","limit","peer","lines","marker","meta"]},"AccountTransactionsResponse":{"type":"object","properties":{"address":{"type":"string"},"limit":{"type":"integer"},"transactions":{"type":"array","items":{"type":"object","properties":{"hash":{"type":"string"},"ledger_index":{"type":"integer"},"close_time":{"type":"string","description":"Ledger close time, ISO-8601 UTC"},"type":{"type":"string","description":"Transaction type, for example `Payment`"},"result":{"type":"string","description":"Result code, for example `tesSUCCESS`"},"counterparty":{"type":["string","null"],"description":"The other account, when the transaction names one"},"delivered":{"type":["object","null"],"properties":{"asset":{"type":"string","description":"`XRP` or `CODE.issuer`"},"value":{"type":"string","description":"Decimal string"},"currency_ascii":{"type":["string","null"],"description":"Readable text of a 40-hex currency code; null when not printable ASCII; absent for XRP and 3-character codes"}},"required":["asset","value"],"description":"Delivered amount, when the transaction reports one"}},"required":["hash","ledger_index","close_time","type","result","counterparty","delivered"]},"description":"Validated transactions, newest first"},"marker":{"type":["string","null"],"description":"Opaque cursor for the next (older) page (send as `marker`); null on the last page"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["address","limit","transactions","marker","meta"]},"TokenResponse":{"type":"object","properties":{"issuer":{"type":"string","description":"Issuer address"},"currency":{"type":"string","description":"Canonical currency code (3 characters or 40 hex)"},"currency_ascii":{"type":["string","null"],"description":"Readable text of a 40-hex currency code; null when not printable ASCII; absent for XRP and 3-character codes"},"global_freeze":{"type":"boolean"},"no_freeze":{"type":"boolean"},"require_auth":{"type":"boolean"},"default_ripple":{"type":"boolean"},"domain":{"type":["string","null"],"description":"Issuer domain decoded to text, when set"},"transfer_rate":{"type":"integer","description":"Issuer TransferRate, 1000000000 = no fee"},"transfer_fee_pct":{"type":"string","description":"Transfer fee in percent"},"obligations":{"type":["string","null"],"description":"Total issued of this currency; null when `obligations_status` is `unavailable`"},"obligations_status":{"type":"string","enum":["ok","unavailable"]},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["issuer","currency","global_freeze","no_freeze","require_auth","default_ripple","domain","transfer_rate","transfer_fee_pct","obligations","obligations_status","meta"]},"PaymentReadinessResponse":{"type":"object","properties":{"verdict":{"type":"string","enum":["ready","not_ready","unknown"],"description":"`not_ready` on any blocking reason; else `unknown` on any failed sub-check"},"reasons":{"type":"array","items":{"type":"string","enum":["source_not_found","insufficient_xrp_balance","source_line_missing","insufficient_token_balance","source_line_frozen","destination_not_found","amount_below_destination_reserve","destination_tag_required","deposit_not_authorized","destination_line_missing","destination_line_limit_exceeded","destination_line_frozen","issuer_not_found","issuer_global_freeze"]},"description":"Blocking reason codes"},"warnings":{"type":"array","items":{"type":"string","enum":["destination_will_be_created","transfer_fee","high_fee","network_degraded"]},"description":"Non-blocking warnings"},"checks_failed":{"type":"array","items":{"type":"string","enum":["source_account","destination_account","deposit_authorized","source_line","destination_line","issuer","fee","network_health"]},"description":"Sub-checks that could not run"},"spendable_xrp":{"type":["string","null"],"description":"Source XRP above its live reserve and the standard fee; null when not computable"},"transfer_fee_pct":{"type":["string","null"],"description":"Issuer transfer fee in percent, when it applies"},"source":{"type":"string"},"destination":{"type":"string"},"asset":{"type":"string","description":"`XRP` or `CODE.issuer`"},"amount":{"type":["string","null"],"description":"Amount checked; null when omitted (amount checks skipped)"},"destination_tag":{"type":["integer","null"]},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["verdict","reasons","warnings","checks_failed","spendable_xrp","transfer_fee_pct","source","destination","asset","amount","destination_tag","meta"]},"PathsResponse":{"type":"object","properties":{"alternatives":{"type":"array","items":{"type":"object","properties":{"source_amount":{"type":"object","properties":{"asset":{"type":"string","description":"`XRP` or `CODE.issuer`"},"value":{"type":"string","description":"Decimal string"},"currency_ascii":{"type":["string","null"],"description":"Readable text of a 40-hex currency code; null when not printable ASCII; absent for XRP and 3-character codes"}},"required":["asset","value"],"description":"Estimated amount the source spends"},"paths_count":{"type":"integer","description":"Number of computed paths"},"paths":{"type":"array","items":{"type":"array","items":{"type":"object","properties":{"account":{"type":"string","description":"Account the path rips through"},"currency":{"type":"string","description":"Currency code of this step (3 characters or 40 hex)"},"currency_ascii":{"type":["string","null"],"description":"Readable text of a 40-hex currency code; null when not printable ASCII; absent for XRP and 3-character codes"},"issuer":{"type":"string","description":"Issuer of the step currency"}}}},"description":"Computed paths, compact steps"}},"required":["source_amount","paths_count","paths"]},"description":"Path alternatives; empty when none was found"},"paths_may_be_non_optimal":{"type":"boolean","enum":[true],"description":"Path finding is best effort: a cheaper path may exist"},"warnings":{"type":"array","items":{"type":"string","enum":["destination_not_found"]},"description":"Non-blocking warnings"},"meta":{"$ref":"#/components/schemas/Meta"}},"required":["alternatives","paths_may_be_non_optimal","warnings","meta"]},"SolanaTransferReadinessResponse":{"type":"object","properties":{"source":{"type":"string","description":"Sending wallet address"},"destination":{"type":"string","description":"Receiving wallet address"},"mint":{"type":"string","description":"`SOL` or the mint address"},"amount":{"type":"string","description":"Amount checked, in the asset's UI units (as sent)"},"amount_raw":{"type":"string","description":"Amount in raw units (lamports for SOL)"},"decimals":{"type":"integer","description":"Decimals of the asset (9 for SOL)"},"token_program":{"type":["string","null"],"description":"Token program that owns the mint; null for SOL"},"ready":{"type":"boolean","description":"True when no blocker applies"},"blockers":{"type":"array","items":{"type":"string","enum":["insufficient_balance","insufficient_sol_for_fees","source_below_rent_exempt","destination_below_rent_exempt","source_frozen","destination_frozen","non_transferable","mint_paused"]},"description":"Every blocking code that matched"},"warnings":{"type":"array","items":{"type":"string","enum":["destination_off_curve","memo_required"]},"description":"Every non-blocking warning that matched"},"requires_ata_creation":{"type":"boolean","description":"True when the destination has no associated token account yet"},"ata_creation_lamports":{"type":["string","null"],"description":"Rent-exempt lamports to create the destination token account; null when not needed"},"transfer_fee":{"type":["string","null"],"description":"Token-2022 transfer fee in raw units; null without a fee config"},"net_amount":{"type":"string","description":"Raw units the destination receives after any transfer fee"},"meta":{"$ref":"#/components/schemas/MetaSolana"}},"required":["source","destination","mint","amount","amount_raw","decimals","token_program","ready","blockers","warnings","requires_ata_creation","ata_creation_lamports","transfer_fee","net_amount","meta"]},"MetaSolana":{"type":"object","properties":{"slot":{"type":"integer","description":"Context slot of the finalized read"},"commitment":{"type":"string","enum":["finalized"],"description":"Every read is at finalized commitment"},"as_of":{"type":"string","format":"date-time","description":"When the data was read from Solana"},"age_seconds":{"type":"integer","minimum":0,"description":"Age of the data at response time"},"cache":{"type":"string","enum":["hit","miss","stale"]},"stale":{"type":"boolean","description":"True when served past its fresh TTL (stale-on-error)"}},"required":["slot","commitment","as_of","age_seconds","cache","stale"]},"SolanaTokenResponse":{"type":"object","properties":{"mint":{"type":"string"},"token_program":{"type":"string","description":"SPL Token or Token-2022 program address"},"decimals":{"type":"integer"},"supply":{"type":"string","description":"Total supply in raw units, exact"},"mint_authority":{"type":["string","null"],"description":"Null when the mint authority is renounced"},"freeze_authority":{"type":["string","null"],"description":"Null when the freeze authority is renounced"},"extensions":{"type":"array","items":{"type":"string"},"description":"Token-2022 mint extensions by name; empty for SPL Token"},"transfer_fee":{"type":["object","null"],"properties":{"basis_points":{"type":"integer"},"maximum_fee":{"type":"string","description":"Maximum fee in raw units"}},"required":["basis_points","maximum_fee"],"description":"Transfer fee active at the current epoch; null without a fee config"},"verdict":{"type":"string","enum":["SAFE","WARN","DANGER"],"description":"Highest level matched: DANGER > WARN > SAFE"},"reasons":{"type":"array","items":{"type":"string","enum":["permanent_delegate","transfer_hook","pausable","default_account_frozen","mint_authority_set","freeze_authority_set","transfer_fee","mint_close_authority","unknown_extension"]},"description":"Every matched code of every level; empty for SAFE"},"meta":{"$ref":"#/components/schemas/MetaSolana"}},"required":["mint","token_program","decimals","supply","mint_authority","freeze_authority","extensions","transfer_fee","verdict","reasons","meta"]},"SolanaLatestSlotResponse":{"type":"object","properties":{"slot":{"type":"integer","description":"Latest finalized slot"},"block_time":{"type":["string","null"],"format":"date-time","description":"Block time of that slot; null when unavailable"},"meta":{"$ref":"#/components/schemas/MetaSolana"}},"required":["slot","block_time","meta"]},"SolanaHealthResponse":{"type":"object","properties":{"status":{"type":"string","enum":["up","down","unknown","unavailable"],"description":"Latest probe result; `unavailable` while Solana data is not configured"},"slot":{"type":["integer","null"],"description":"Finalized slot of the latest successful probe"},"latency_ms":{"type":["number","null"]},"last_probe_at":{"type":["string","null"],"format":"date-time"},"meta":{"$ref":"#/components/schemas/MetaSolana"}},"required":["status","slot","latency_ms","last_probe_at","meta"]},"SolanaHealthHistoryResponse":{"type":"object","properties":{"window":{"type":"string","enum":["1h","24h","7d"]},"bucket_seconds":{"type":"integer","exclusiveMinimum":0},"buckets":{"type":"array","items":{"type":"object","properties":{"start":{"type":"string","format":"date-time"},"samples":{"type":"integer"},"up":{"type":"integer"},"uptime_pct":{"type":"number"},"avg_latency_ms":{"type":["number","null"]}},"required":["start","samples","up","uptime_pct","avg_latency_ms"]}},"meta":{"$ref":"#/components/schemas/MetaSolana"}},"required":["window","bucket_seconds","buckets","meta"]}},"parameters":{}},"paths":{"/v1/pro/requirements":{"get":{"summary":"Current payment options of a paid resource, or the price index, without paying.","description":"With `resource`, returns the `accepts` entries the paid route or tool would offer in its 402 challenge, so a client can sign a payment before the first call. Without it, returns the price index: every paid route and MCP tool with its per-call price (VAT included), network, asset and mint when paid access is active, and links to each per-resource offer and docs page; outside x402 mode it lists the resources and `payments_mode` only and names no price. Free and never challenged: it is counted in the `cheap` rate tier. In x402 mode the route answers 503 `payments-unavailable` when the x402 configuration is invalid or no facilitator can currently offer a payment; `accepts` is empty only when `payments_mode` is off or gateway (no paid access). The offer follows the facilitator set and its health, so the live source of truth is this route or the `PAYMENT-REQUIRED` header of a 402.\n\nWhen to use: you want to prepay on the first call instead of paying after a 402.\n\nWhen not to use: you only need data; the free routes carry the same data without payment.","operationId":"getProRequirements","tags":["pro"],"parameters":[{"schema":{"type":"string","description":"Optional. Omit it for the price index of every paid route and tool. Otherwise a `/v1/pro/*` path (or its URL) without a query string, or `mcp://criptonlabs/pro/<tool>` for a paid MCP tool. The payment you sign is bound to exactly this resource.","example":"/v1/pro/xrpl/fee"},"required":false,"description":"Optional. Omit it for the price index of every paid route and tool. Otherwise a `/v1/pro/*` path (or its URL) without a query string, or `mcp://criptonlabs/pro/<tool>` for a paid MCP tool. The payment you sign is bound to exactly this resource.","name":"resource","in":"query"}],"responses":{"200":{"description":"Payment options of the resource, or the price index","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"example":{"x402Version":2,"resource":{"url":"https://api.criptonlabs.com/v1/pro/xrpl/fee"},"accepts":[{"scheme":"exact","network":"solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp","asset":"HzwqbKZw8HxMN6bF2yFZNrht3c2iXXzpKcFu7uBEDKtr","amount":"5000","payTo":"<recipient token owner address>","maxTimeoutSeconds":60,"resource":"https://api.criptonlabs.com/v1/pro/xrpl/fee","extra":{"feePayer":"<facilitator fee payer address>"}}],"payments_mode":"x402"},"schema":{"anyOf":[{"$ref":"#/components/schemas/RequirementsResponse"},{"$ref":"#/components/schemas/PriceIndex"}]}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}},"security":[]}},"/v1/xrpl/fee":{"get":{"summary":"Current XRPL fee tiers in drops with a congestion score.","description":"Returns economy, standard and priority fees in drops plus a 0-100 congestion score and band (`low`, `medium`, `high`) computed from queue fill, open-ledger fee pressure and load factor.\n\nWhen to use: Before submitting a transaction, to choose a `Fee` and to decide whether the network is congested.\n\nWhen not to use: Not a price feed and not a historical series; it describes the latest validated ledger only.","operationId":"getXrplFee","tags":["Network"],"x-ttl-seconds":4,"x-max-stale-seconds":60,"responses":{"200":{"description":"Fee tiers in drops","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"example":{"fee":{"economy":"10","standard":"10","priority":"11"},"congestion":{"score":4,"band":"low","load_factor_assumed":false},"base_fee":"10","median_fee":"5000","minimum_fee":"10","open_ledger_fee":"10","current_queue_size":"0","max_queue_size":"2000","meta":{"ledger_index":100234567,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":1,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/FeeResponse"}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}},"security":[]}},"/v1/xrpl/health":{"get":{"summary":"Overall and per-node health of the upstream XRPL nodes (alias of network health).","description":"The same view as the network-health page, served from stored probe samples, with no call to the nodes.\n\nWhen to use: A short alias when you only need the service status.\n\nWhen not to use: To see a time series use the health-history page.","operationId":"getXrplHealth","tags":["Health"],"x-ttl-seconds":4,"x-max-stale-seconds":60,"responses":{"200":{"description":"Overall and per-node health from stored probe samples","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"example":{"status":"degraded","nodes":[{"member":"ripple-s1","state":"up","latency_ms":180,"ledger_index":100234566,"ledger_age_s":2,"load_factor":1,"error":null,"sampled_at":"2026-10-06T12:00:00.000Z"},{"member":"honeycluster","state":"down","latency_ms":null,"ledger_index":null,"ledger_age_s":null,"load_factor":null,"error":"timeout","sampled_at":"2026-10-06T12:00:00.000Z"}],"ledger_index":100234566,"last_probe_at":"2026-10-06T12:00:00.000Z","meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":1,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}},"security":[]}},"/v1/xrpl/network/health":{"get":{"summary":"Overall and per-node health of the upstream XRPL nodes.","description":"Returns `status` (`ok`, `degraded`, `down` or `unknown`) and one entry per upstream node with state, latency, ledger index and age, load factor and last error. Served from stored probe samples.\n\nWhen to use: To decide whether to trust or retry data, or to explain a 503 from another endpoint.\n\nWhen not to use: Not a probe of your own connectivity; it reports the service's upstream nodes.","operationId":"getXrplNetworkHealth","tags":["Health"],"x-ttl-seconds":4,"x-max-stale-seconds":60,"responses":{"200":{"description":"Overall and per-node health from stored probe samples","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"example":{"status":"degraded","nodes":[{"member":"ripple-s1","state":"up","latency_ms":180,"ledger_index":100234566,"ledger_age_s":2,"load_factor":1,"error":null,"sampled_at":"2026-10-06T12:00:00.000Z"},{"member":"honeycluster","state":"down","latency_ms":null,"ledger_index":null,"ledger_age_s":null,"load_factor":null,"error":"timeout","sampled_at":"2026-10-06T12:00:00.000Z"}],"ledger_index":100234566,"last_probe_at":"2026-10-06T12:00:00.000Z","meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":1,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}},"security":[]}},"/v1/xrpl/health/history":{"get":{"summary":"Bucketed upstream probe history with uptime and latency per node.","description":"Aggregates probe samples into buckets (`1h` -> 300 s, `24h` -> 3600 s, `7d` -> 21600 s). Each bucket lists, per node, `samples`, `up`, `uptime_pct` and `avg_latency_ms`. Buckets without samples are omitted.\n\nWhen to use: To judge reliability over time before depending on the service.\n\nWhen not to use: Not for current state; use the network-health page.","operationId":"getXrplHealthHistory","tags":["Health"],"x-ttl-seconds":60,"x-max-stale-seconds":600,"parameters":[{"schema":{"type":"string","enum":["1h","24h","7d"],"default":"1h","description":"History window.","example":"24h"},"required":false,"description":"History window.","name":"window","in":"query"}],"responses":{"200":{"description":"Bucketed probe history","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"example":{"window":"24h","bucket_seconds":3600,"buckets":[{"start":"2026-10-06T11:00:00.000Z","members":[{"member":"ripple-s1","samples":30,"up":30,"uptime_pct":100,"avg_latency_ms":175}]}],"meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":0,"cache":"miss","stale":false}},"schema":{"$ref":"#/components/schemas/HealthHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}},"security":[]}},"/v1/xrpl/ledger/latest":{"get":{"summary":"Latest validated ledger index, hash and close time.","description":"Returns the index, hash and close time (ISO 8601 or `null`) of the latest validated ledger.\n\nWhen to use: To anchor other readings to a ledger or to check how current the network view is.\n\nWhen not to use: Not for transaction data or account state; use the account endpoint for those.","operationId":"getXrplLedgerLatest","tags":["Network"],"x-ttl-seconds":4,"x-max-stale-seconds":60,"responses":{"200":{"description":"Latest validated ledger","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"example":{"ledger_index":100234566,"close_time":"2026-10-06T12:00:01.000Z","ledger_hash":"A1B2C3D4E5F60718293A4B5C6D7E8F90A1B2C3D4E5F60718293A4B5C6D7E8F90","meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":0,"cache":"miss","stale":false}},"schema":{"$ref":"#/components/schemas/LedgerResponse"}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}},"security":[]}},"/v1/xrpl/orderbook":{"get":{"summary":"CLOB order book for a currency pair with unfunded offers removed.","description":"Returns asks (best price first) and bids as levels `{gets, pays, price}`. Funded amounts are used when the ledger reports them and zero-amount levels are dropped. Price is `pays` per `gets` in human units (XRP, not drops).\n\nWhen to use: To read executable liquidity for a pair on the XRPL central limit order book (CLOB).\n\nWhen not to use: Not for AMM liquidity (use the amm page) and not for a cost estimate (use the slippage page).","operationId":"getXrplOrderbook","tags":["Market"],"x-ttl-seconds":4,"x-max-stale-seconds":30,"parameters":[{"schema":{"type":"string","description":"Base currency of the pair.","example":"XRP"},"required":true,"description":"Base currency of the pair.","name":"base","in":"query"},{"schema":{"type":"string","description":"Quote currency of the pair.","example":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},"required":true,"description":"Quote currency of the pair.","name":"quote","in":"query"},{"schema":{"type":"string","description":"Order book levels per side.","example":"10"},"required":false,"description":"Order book levels per side.","name":"depth","in":"query"}],"responses":{"200":{"description":"Funded order book","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"example":{"base":"XRP","quote":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","depth":10,"asks":[{"gets":"1500","pays":"3150","price":"2.1"}],"bids":[{"gets":"1000","pays":"2090","price":"2.09"}],"meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":2,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/OrderbookResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}},"security":[]}},"/v1/xrpl/slippage":{"get":{"summary":"Slippage and average price for buying an amount of base currency.","description":"Walks the asks of the cached order book to estimate the average price and `slippage_pct` (a percentage; `null` when liquidity is insufficient) of buying `amount` of `base` paying `quote`. For an issued currency the issuer's transfer fee is reported when it can be loaded. The top-level fields describe the CLOB; `venues` compares the CLOB with the AMM pool for the same amount (`best` is the cheaper venue by average price, ties go to the CLOB, no routing split) and `venues.amm_status` is `ok`, `stale`, `no_pool` or `unavailable`. `venues.amm` is `null` when the pair has no pool or the pool could not be read; the response never fails because of the AMM. CLOB slippage is measured against the best ask and AMM slippage against the pool spot price (so it includes the trading fee).\n\nWhen to use: Before placing a market-style trade, to size it against available depth and to see whether the CLOB or the AMM pool is the cheaper venue.\n\nWhen not to use: It is an estimate, not a quote, and it does not split an amount across venues or route through other pairs. To read pool reserves, use the amm page.","operationId":"getXrplSlippage","tags":["Market"],"x-ttl-seconds":4,"x-max-stale-seconds":30,"parameters":[{"schema":{"type":"string","description":"Currency to buy.","example":"XRP"},"required":true,"description":"Currency to buy.","name":"base","in":"query"},{"schema":{"type":"string","description":"Currency paid.","example":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},"required":true,"description":"Currency paid.","name":"quote","in":"query"},{"schema":{"type":"string","description":"Order book levels per side.","example":"10"},"required":false,"description":"Order book levels per side.","name":"depth","in":"query"},{"schema":{"type":"string","pattern":"^(?!0+(\\.0+)?$)[0-9]+(\\.[0-9]+)?$","description":"Amount of `base` to buy, as a decimal string.","example":"1000"},"required":true,"description":"Amount of `base` to buy, as a decimal string.","name":"amount","in":"query"}],"responses":{"200":{"description":"Slippage estimate for buying `amount` of base","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"example":{"base":"XRP","quote":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","side":"buy","depth":200,"amount":"1000","filled":"1000","partial":false,"insufficient_liquidity":false,"best_price":"2.1","avg_price":"2.1042","slippage_pct":"0.2","transfer_fee_applied":false,"transfer_fee":null,"avg_price_after_fees":null,"venues":{"best":"clob","amm_status":"ok","clob":{"avg_price":"2.1042","cost":"2104.2","slippage_pct":"0.2","insufficient_liquidity":false,"avg_price_after_fees":null},"amm":{"avg_price":"2.1331","cost":"2133.1","slippage_pct":"1.5762","insufficient_liquidity":false,"avg_price_after_fees":null,"spot_price":"2.1","trading_fee":"0.005"}},"meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":2,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/SlippageResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}},"security":[]}},"/v1/xrpl/amm/{a}/{b}":{"get":{"summary":"AMM pool reserves and trading fee for an asset pair.","description":"Returns the reserves of both assets in the order requested and the trading fee as a decimal fraction (`0.005` is 0.5 %).\n\nWhen to use: To read AMM pool depth and fee for a pair.\n\nWhen not to use: It does not estimate slippage or compare venues (use the slippage page for the CLOB vs AMM comparison); a pair without a pool returns 404.","operationId":"getXrplAmm","tags":["Market"],"x-ttl-seconds":8,"x-max-stale-seconds":60,"parameters":[{"schema":{"type":"string","description":"First asset of the pool.","example":"XRP"},"required":true,"description":"First asset of the pool.","name":"a","in":"path"},{"schema":{"type":"string","description":"Second asset of the pool.","example":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},"required":true,"description":"Second asset of the pool.","name":"b","in":"path"}],"responses":{"200":{"description":"AMM pool reserves and fee","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"example":{"asset_a":"XRP","asset_b":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","reserve_a":"250000","reserve_b":"525000","trading_fee":"0.005","meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":4,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/AmmResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/not-found.md","title":"Not Found","status":404,"detail":"The ledger has no such object (actNotFound).","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}},"security":[]}},"/v1/xrpl/account/{address}/summary":{"get":{"summary":"XRP balance, sequence, owner count, transfer rate and trust lines (capped) for an account.","description":"Returns the XRP balance as a decimal string, `sequence`, `owner_count`, the account `transfer_rate` (`1000000000` means no fee) and up to 50 trust lines; `lines_truncated` is `true` when there are more.\n\nWhen to use: To inspect an account before building a transaction for it.\n\nWhen not to use: Not for transaction history, reserves or account flags; it is a summary, not a full account dump.","operationId":"getXrplAccountSummary","tags":["Accounts"],"x-ttl-seconds":10,"x-max-stale-seconds":120,"parameters":[{"schema":{"type":"string","description":"Classic XRPL account address.","example":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},"required":true,"description":"Classic XRPL account address.","name":"address","in":"path"}],"responses":{"200":{"description":"Account summary","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"example":{"address":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","balance_xrp":"1234.567891","sequence":42,"owner_count":3,"transfer_rate":1000000000,"trust_lines":[{"currency":"USD","issuer":"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq","balance":"10.5","limit":"1000000"}],"lines_truncated":false,"meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":3,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/AccountSummaryResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/not-found.md","title":"Not Found","status":404,"detail":"The ledger has no such object (actNotFound).","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}},"security":[]}},"/v1/xrpl/account/{address}/lines":{"get":{"summary":"One page of an account's trust lines, with an opaque cursor for the next page.","description":"Returns one page of trust lines: peer, canonical currency, balance, limit, peer limit and the `no_ripple`, `freeze` and `authorized` flags of both sides; amounts are decimal strings. `limit` is 10 to 400 lines (default 100), `peer` keeps only lines with that counterparty, and `marker` is an opaque cursor: send it back unchanged to get the next page; it is `null` on the last page and only valid for the address that produced it.\n\nWhen to use: To list every trust line of an account (balances, limits, freeze and authorization flags), page by page.\n\nWhen not to use: For a quick capped overview with the XRP balance, use `/v1/xrpl/account/{address}/summary`; for issued totals of a token, use the token endpoint.","operationId":"getXrplAccountLines","tags":["Data"],"x-ttl-seconds":10,"x-max-stale-seconds":120,"parameters":[{"schema":{"type":"string","description":"Classic XRPL account address.","example":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},"required":true,"description":"Classic XRPL account address.","name":"address","in":"path"},{"schema":{"type":"string","description":"Lines per page.","example":"100"},"required":false,"description":"Lines per page.","name":"limit","in":"query"},{"schema":{"type":"string","description":"Only lines with this counterparty.","example":"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B"},"required":false,"description":"Only lines with this counterparty.","name":"peer","in":"query"},{"schema":{"type":"string","description":"Opaque cursor from the previous page's `marker`.","example":"eyJ2IjoxLCJlIjoibGluZXMiLCJhIjoiciIsIm0iOiIxIn0"},"required":false,"description":"Opaque cursor from the previous page's `marker`.","name":"marker","in":"query"}],"responses":{"200":{"description":"One page of trust lines","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"example":{"address":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","limit":100,"peer":null,"lines":[{"peer":"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B","currency":"USD","balance":"-10.5","limit":"0","peer_limit":"1000000","no_ripple":true,"no_ripple_peer":false,"freeze":false,"freeze_peer":false,"authorized":false,"peer_authorized":false}],"marker":null,"meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":3,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/AccountLinesResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/not-found.md","title":"Not Found","status":404,"detail":"The ledger has no such object (actNotFound).","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}},"security":[]}},"/v1/xrpl/account/{address}/transactions":{"get":{"summary":"One page of an account's most recent validated transactions, newest first.","description":"Returns one page of the account's most recent validated transactions, newest first, in a compact shape: hash, ledger index, close time, transaction type, result code, counterparty (when the transaction names one) and delivered amount as a decimal string (when reported). `limit` is 1 to 50 transactions (default 20) and `marker` is an opaque cursor: send it back unchanged to get the next (older) page; it is `null` on the last page and only valid for the address that produced it. No history depth is promised: history depth depends on the serving node (how far back pages go depends on the ledger history of the node that serves the request), and older pages may be slower because they can be served by a node that keeps a longer history.\n\nWhen to use: To check what an account did recently (payments sent or received, offers, trust line changes) and whether each transaction succeeded.\n\nWhen not to use: For balances and trust lines, use `/v1/xrpl/account/{address}/summary` or `/v1/xrpl/account/{address}/lines`; for full archival history, use a full-history node or indexer: history depth depends on the serving node and older pages may be slower.","operationId":"getXrplAccountTransactions","tags":["Data"],"x-ttl-seconds":4,"x-max-stale-seconds":30,"parameters":[{"schema":{"type":"string","description":"Classic XRPL account address.","example":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},"required":true,"description":"Classic XRPL account address.","name":"address","in":"path"},{"schema":{"type":"string","description":"Transactions per page.","example":"20"},"required":false,"description":"Transactions per page.","name":"limit","in":"query"},{"schema":{"type":"string","description":"Opaque cursor from the previous page's `marker`.","example":"eyJ2IjoxLCJlIjoidHgiLCJhIjoiciIsIm0iOjF9"},"required":false,"description":"Opaque cursor from the previous page's `marker`.","name":"marker","in":"query"}],"responses":{"200":{"description":"One page of transactions","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"example":{"address":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","limit":20,"transactions":[{"hash":"C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9","ledger_index":100234566,"close_time":"2026-10-11T09:30:12.000Z","type":"Payment","result":"tesSUCCESS","counterparty":"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B","delivered":{"asset":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","value":"25.5"}}],"marker":null,"meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":2,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/AccountTransactionsResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/not-found.md","title":"Not Found","status":404,"detail":"The ledger has no such object (actNotFound).","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}},"security":[]}},"/v1/xrpl/token/{asset}":{"get":{"summary":"Issuer data for an issued asset: flags, domain, transfer fee and total issued.","description":"Returns the issuer data for an issued asset `CODE.issuer`: issuer flags (`global_freeze`, `no_freeze`, `require_auth`, `default_ripple`), the issuer `domain` decoded to text when set, `transfer_rate` (1000000000 = no fee) and `transfer_fee_pct`, and `obligations`, the total issued of that currency as a decimal string (`\"0\"` when the issuer has not issued it). When the node cannot report obligations, the response is still 200 with `obligations: null` and `obligations_status: \"unavailable\"`. Holder counts are not returned.\n\nWhen to use: Before accepting or sending an issued token: check that the issuer exists, is not frozen, whether holders need authorization, and the transfer fee charged on every transfer between non-issuer accounts.\n\nWhen not to use: For XRP (not an issued asset; 400), for one account's own balances use `/v1/xrpl/account/{address}/lines`, and for prices use `/v1/xrpl/orderbook` or `/v1/xrpl/amm/{a}/{b}`.","operationId":"getXrplToken","tags":["Data"],"x-ttl-seconds":10,"x-max-stale-seconds":120,"parameters":[{"schema":{"type":"string","description":"Issued asset as `CODE.issuer`, split on the first dot.","example":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},"required":true,"description":"Issued asset as `CODE.issuer`, split on the first dot.","name":"asset","in":"path"}],"responses":{"200":{"description":"Issuer data for the asset","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"example":{"issuer":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","currency":"USD","global_freeze":false,"no_freeze":false,"require_auth":false,"default_ripple":true,"domain":"example.com","transfer_rate":1002000000,"transfer_fee_pct":"0.2","obligations":"1250000.5","obligations_status":"ok","meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":12,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/not-found.md","title":"Not Found","status":404,"detail":"The ledger has no such object (actNotFound).","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}},"security":[]}},"/v1/xrpl/payment-readiness":{"get":{"summary":"Pre-payment check: can this payment from source to destination succeed now?","description":"Checks, before you sign, whether a payment of `asset` (default `XRP`) from `source` to `destination` can succeed on the validated ledger, and returns a `verdict`: `ready`, `not_ready` (at least one blocking reason) or `unknown` (no blocking reason, but a sub-check could not run; never treat `unknown` as `ready`). A missing account is a reason, not an error: this endpoint never answers 404. Without `amount` the amount-dependent checks are skipped. `spendable_xrp` is the source XRP above its live reserve (base plus owner count times increment, from the server state) and the standard fee; `transfer_fee_pct` is the issuer transfer fee when it applies. Warnings never change the verdict.\n\nReason codes: `source_not_found`, `insufficient_xrp_balance`, `source_line_missing`, `insufficient_token_balance`, `source_line_frozen`, `destination_not_found`, `amount_below_destination_reserve`, `destination_tag_required`, `deposit_not_authorized`, `destination_line_missing`, `destination_line_limit_exceeded`, `destination_line_frozen`, `issuer_not_found`, `issuer_global_freeze`.\n\nWarning codes: `destination_will_be_created`, `transfer_fee`, `high_fee`, `network_degraded`.\n\nSub-check codes: `source_account`, `destination_account`, `deposit_authorized`, `source_line`, `destination_line`, `issuer`, `fee`, `network_health`.\n\nWhen to use: Right before sending a payment: to catch a missing or unfunded destination, a required destination tag, deposit authorization, missing or frozen trust lines, insufficient balance and issuer freezes, in one call.\n\nWhen not to use: To find a multi-hop route or the source amount needed for a cross-currency payment (use the paths endpoint), or to list balances (use `/v1/xrpl/account/{address}/summary`).","operationId":"getXrplPaymentReadiness","tags":["Data"],"x-ttl-seconds":4,"x-max-stale-seconds":60,"parameters":[{"schema":{"type":"string","description":"Sending account.","example":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},"required":true,"description":"Sending account.","name":"source","in":"query"},{"schema":{"type":"string","description":"Receiving account.","example":"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B"},"required":true,"description":"Receiving account.","name":"destination","in":"query"},{"schema":{"type":"string","description":"Asset to deliver.","example":"XRP"},"required":false,"description":"Asset to deliver.","name":"asset","in":"query"},{"schema":{"type":"string","pattern":"^(?!0+(\\.0+)?$)[0-9]+(\\.[0-9]+)?$","description":"Amount to deliver, in units of `asset`.","example":"10"},"required":false,"description":"Amount to deliver, in units of `asset`.","name":"amount","in":"query"},{"schema":{"type":"string","description":"Destination tag you will send.","example":"12345"},"required":false,"description":"Destination tag you will send.","name":"destination_tag","in":"query"}],"responses":{"200":{"description":"Readiness verdict for one payment","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"example":{"verdict":"not_ready","reasons":["destination_tag_required"],"warnings":[],"checks_failed":[],"spendable_xrp":"98.995","transfer_fee_pct":null,"source":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","destination":"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B","asset":"XRP","amount":"10","destination_tag":null,"meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":2,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/PaymentReadinessResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}},"security":[]}},"/v1/xrpl/paths":{"get":{"summary":"Multi-hop payment paths and their source cost.","description":"Runs a live path search (`ripple_path_find`) on the validated ledger for delivering `amount` of `asset` from `source` to `destination`, and returns the `alternatives`: each with the estimated `source_amount` the source would spend (asset and decimal string), `paths_count` and the computed `paths` as compact steps (`account`, `currency`, `issuer`). A call can take up to about 20 seconds, because path finding is heavy for the node. Results are best effort: `paths_may_be_non_optimal` is always `true`, a cheaper path may exist and the amounts are estimates that can change by the time you submit. No alternative is a 200 with `alternatives: []`. A destination account that does not exist gives `alternatives: []` and the warning `destination_not_found`; a source account that does not exist is a 404. Answers are never cached: every call reads the ledger.\n\nWhen to use: Before a cross-currency or multi-hop payment: to see whether a route exists and how much the source would spend to deliver the amount. A call can take up to about 20 seconds and paths may be non-optimal.\n\nWhen not to use: To check whether a direct payment can succeed (use `/v1/xrpl/payment-readiness`), or for the single-hop cost of a trade on one pair (use `/v1/xrpl/slippage`, which compares the order book and the AMM).","operationId":"getXrplPaths","tags":["Data"],"parameters":[{"schema":{"type":"string","description":"Sending account.","example":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},"required":true,"description":"Sending account.","name":"source","in":"query"},{"schema":{"type":"string","description":"Receiving account.","example":"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B"},"required":true,"description":"Receiving account.","name":"destination","in":"query"},{"schema":{"type":"string","description":"Asset the destination receives.","example":"XRP"},"required":true,"description":"Asset the destination receives.","name":"asset","in":"query"},{"schema":{"type":"string","pattern":"^(?!0+(\\.0+)?$)[0-9]+(\\.[0-9]+)?$","description":"Amount the destination receives, in units of `asset`.","example":"1"},"required":true,"description":"Amount the destination receives, in units of `asset`.","name":"amount","in":"query"},{"schema":{"type":"string","description":"Asset of `send_max`.","example":"XRP"},"required":false,"description":"Asset of `send_max`.","name":"send_max_asset","in":"query"},{"schema":{"type":"string","pattern":"^(?!0+(\\.0+)?$)[0-9]+(\\.[0-9]+)?$","description":"Most the source may spend, in units of `send_max_asset`.","example":"2"},"required":false,"description":"Most the source may spend, in units of `send_max_asset`.","name":"send_max","in":"query"},{"schema":{"type":"string","description":"Assets the source may spend, comma-separated.","example":"XRP"},"required":false,"description":"Assets the source may spend, comma-separated.","name":"source_assets","in":"query"}],"responses":{"200":{"description":"Path alternatives for one payment","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"example":{"paths_may_be_non_optimal":true,"warnings":[],"alternatives":[{"source_amount":{"asset":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","value":"1.394"},"paths_count":1,"paths":[[{"currency":"XRP"}]]}],"meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":0,"cache":"miss","stale":false}},"schema":{"$ref":"#/components/schemas/PathsResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"404":{"description":"Not Found: the source account does not exist (a missing destination is a 200 with a warning).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/not-found.md","title":"Not Found","status":404,"detail":"The ledger has no such object (actNotFound).","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}},"security":[]}},"/v1/pro/xrpl/fee":{"get":{"summary":"Current XRPL fee tiers in drops with a congestion score.","description":"Returns economy, standard and priority fees in drops plus a 0-100 congestion score and band (`low`, `medium`, `high`) computed from queue fill, open-ledger fee pressure and load factor.\n\nWhen to use: Before submitting a transaction, to choose a `Fee` and to decide whether the network is congested.\n\nWhen not to use: Not a price feed and not a historical series; it describes the latest validated ledger only.","operationId":"proGetXrplFee","tags":["pro"],"x-ttl-seconds":4,"x-max-stale-seconds":60,"parameters":[{"schema":{"type":"string","description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","example":"eyJ4NDAyVmVyc2lvbiI6MiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19LCJwYXlsb2FkIjp7InRyYW5zYWN0aW9uIjoiPGJhc2U2NCBzaWduZWQgdHJhbnNhY3Rpb24+In19"},"required":false,"description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","name":"PAYMENT-SIGNATURE","in":"header"}],"responses":{"200":{"description":"Fee tiers in drops","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42},"PAYMENT-RESPONSE":{"description":"Base64 of the JSON settlement result (`success`, `transaction`, `network`, `payer`). Present only on a 200 whose payment settled.","schema":{"type":"string"},"example":"eyJzdWNjZXNzIjp0cnVlLCJ0cmFuc2FjdGlvbiI6Ijx0cmFuc2FjdGlvbiBzaWduYXR1cmU+IiwibmV0d29yayI6InNvbGFuYTo1ZXlrdDRVc0Z2OFA4TkpkVFJFcFkxdnpxS3FaS3ZkcCIsInBheWVyIjoiPHBheWVyIHdhbGxldCBhZGRyZXNzPiJ9"}},"content":{"application/json":{"example":{"fee":{"economy":"10","standard":"10","priority":"11"},"congestion":{"score":4,"band":"low","load_factor_assumed":false},"base_fee":"10","median_fee":"5000","minimum_fee":"10","open_ledger_fee":"10","current_queue_size":"0","max_queue_size":"2000","meta":{"ledger_index":100234567,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":1,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/FeeResponse"}}}},"402":{"description":"Payment Required (only while paid access is active; while payments are off the route returns free data): no payment, or a payment that was not accepted (`payment-required`), a settlement that failed (`payment-settlement-failed`) or a payment that was already used (`payment-already-used`). Nothing is served and nothing is kept for the caller; sign a new payment from the options in `PAYMENT-REQUIRED`.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 of the JSON `PaymentRequired` object (see the `PaymentRequired` schema) with the accepted payment options. Sent on 402 answers that can be fixed by paying.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentRequired"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJBIHZhbGlkIHBheW1lbnQgaXMgcmVxdWlyZWQuIiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19XX0="}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payment-required.md","title":"Payment Required","status":402,"detail":"A valid payment is required. Sign one of the accepted payment options and retry.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"403":{"description":"Forbidden: this payer cannot use paid access (`payer-blocked`).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payer-blocked.md","title":"Forbidden","status":403,"detail":"This payer cannot use paid access.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests: the per-IP rate limit was exceeded (`rate-limited`), or this payer reached its daily limit of failed settlements (`payer-limit-reached`, `Retry-After` is the time to 00:00 UTC).","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable: no upstream node could serve the request (`upstream-unavailable`), or paid access is temporarily unavailable (`payments-unavailable`, no `Retry-After`); nothing was charged. `Retry-After` is sent for `upstream-unavailable`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}}}},"/v1/pro/xrpl/health":{"get":{"summary":"Overall and per-node health of the upstream XRPL nodes (alias of network health).","description":"The same view as the network-health page, served from stored probe samples, with no call to the nodes.\n\nWhen to use: A short alias when you only need the service status.\n\nWhen not to use: To see a time series use the health-history page.","operationId":"proGetXrplHealth","tags":["pro"],"x-ttl-seconds":4,"x-max-stale-seconds":60,"parameters":[{"schema":{"type":"string","description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","example":"eyJ4NDAyVmVyc2lvbiI6MiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19LCJwYXlsb2FkIjp7InRyYW5zYWN0aW9uIjoiPGJhc2U2NCBzaWduZWQgdHJhbnNhY3Rpb24+In19"},"required":false,"description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","name":"PAYMENT-SIGNATURE","in":"header"}],"responses":{"200":{"description":"Overall and per-node health from stored probe samples","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42},"PAYMENT-RESPONSE":{"description":"Base64 of the JSON settlement result (`success`, `transaction`, `network`, `payer`). Present only on a 200 whose payment settled.","schema":{"type":"string"},"example":"eyJzdWNjZXNzIjp0cnVlLCJ0cmFuc2FjdGlvbiI6Ijx0cmFuc2FjdGlvbiBzaWduYXR1cmU+IiwibmV0d29yayI6InNvbGFuYTo1ZXlrdDRVc0Z2OFA4TkpkVFJFcFkxdnpxS3FaS3ZkcCIsInBheWVyIjoiPHBheWVyIHdhbGxldCBhZGRyZXNzPiJ9"}},"content":{"application/json":{"example":{"status":"degraded","nodes":[{"member":"ripple-s1","state":"up","latency_ms":180,"ledger_index":100234566,"ledger_age_s":2,"load_factor":1,"error":null,"sampled_at":"2026-10-06T12:00:00.000Z"},{"member":"honeycluster","state":"down","latency_ms":null,"ledger_index":null,"ledger_age_s":null,"load_factor":null,"error":"timeout","sampled_at":"2026-10-06T12:00:00.000Z"}],"ledger_index":100234566,"last_probe_at":"2026-10-06T12:00:00.000Z","meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":1,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"402":{"description":"Payment Required (only while paid access is active; while payments are off the route returns free data): no payment, or a payment that was not accepted (`payment-required`), a settlement that failed (`payment-settlement-failed`) or a payment that was already used (`payment-already-used`). Nothing is served and nothing is kept for the caller; sign a new payment from the options in `PAYMENT-REQUIRED`.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 of the JSON `PaymentRequired` object (see the `PaymentRequired` schema) with the accepted payment options. Sent on 402 answers that can be fixed by paying.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentRequired"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJBIHZhbGlkIHBheW1lbnQgaXMgcmVxdWlyZWQuIiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19XX0="}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payment-required.md","title":"Payment Required","status":402,"detail":"A valid payment is required. Sign one of the accepted payment options and retry.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"403":{"description":"Forbidden: this payer cannot use paid access (`payer-blocked`).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payer-blocked.md","title":"Forbidden","status":403,"detail":"This payer cannot use paid access.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests: the per-IP rate limit was exceeded (`rate-limited`), or this payer reached its daily limit of failed settlements (`payer-limit-reached`, `Retry-After` is the time to 00:00 UTC).","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable: no upstream node could serve the request (`upstream-unavailable`), or paid access is temporarily unavailable (`payments-unavailable`, no `Retry-After`); nothing was charged. `Retry-After` is sent for `upstream-unavailable`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}}}},"/v1/pro/xrpl/network/health":{"get":{"summary":"Overall and per-node health of the upstream XRPL nodes.","description":"Returns `status` (`ok`, `degraded`, `down` or `unknown`) and one entry per upstream node with state, latency, ledger index and age, load factor and last error. Served from stored probe samples.\n\nWhen to use: To decide whether to trust or retry data, or to explain a 503 from another endpoint.\n\nWhen not to use: Not a probe of your own connectivity; it reports the service's upstream nodes.","operationId":"proGetXrplNetworkHealth","tags":["pro"],"x-ttl-seconds":4,"x-max-stale-seconds":60,"parameters":[{"schema":{"type":"string","description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","example":"eyJ4NDAyVmVyc2lvbiI6MiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19LCJwYXlsb2FkIjp7InRyYW5zYWN0aW9uIjoiPGJhc2U2NCBzaWduZWQgdHJhbnNhY3Rpb24+In19"},"required":false,"description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","name":"PAYMENT-SIGNATURE","in":"header"}],"responses":{"200":{"description":"Overall and per-node health from stored probe samples","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42},"PAYMENT-RESPONSE":{"description":"Base64 of the JSON settlement result (`success`, `transaction`, `network`, `payer`). Present only on a 200 whose payment settled.","schema":{"type":"string"},"example":"eyJzdWNjZXNzIjp0cnVlLCJ0cmFuc2FjdGlvbiI6Ijx0cmFuc2FjdGlvbiBzaWduYXR1cmU+IiwibmV0d29yayI6InNvbGFuYTo1ZXlrdDRVc0Z2OFA4TkpkVFJFcFkxdnpxS3FaS3ZkcCIsInBheWVyIjoiPHBheWVyIHdhbGxldCBhZGRyZXNzPiJ9"}},"content":{"application/json":{"example":{"status":"degraded","nodes":[{"member":"ripple-s1","state":"up","latency_ms":180,"ledger_index":100234566,"ledger_age_s":2,"load_factor":1,"error":null,"sampled_at":"2026-10-06T12:00:00.000Z"},{"member":"honeycluster","state":"down","latency_ms":null,"ledger_index":null,"ledger_age_s":null,"load_factor":null,"error":"timeout","sampled_at":"2026-10-06T12:00:00.000Z"}],"ledger_index":100234566,"last_probe_at":"2026-10-06T12:00:00.000Z","meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":1,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"402":{"description":"Payment Required (only while paid access is active; while payments are off the route returns free data): no payment, or a payment that was not accepted (`payment-required`), a settlement that failed (`payment-settlement-failed`) or a payment that was already used (`payment-already-used`). Nothing is served and nothing is kept for the caller; sign a new payment from the options in `PAYMENT-REQUIRED`.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 of the JSON `PaymentRequired` object (see the `PaymentRequired` schema) with the accepted payment options. Sent on 402 answers that can be fixed by paying.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentRequired"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJBIHZhbGlkIHBheW1lbnQgaXMgcmVxdWlyZWQuIiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19XX0="}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payment-required.md","title":"Payment Required","status":402,"detail":"A valid payment is required. Sign one of the accepted payment options and retry.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"403":{"description":"Forbidden: this payer cannot use paid access (`payer-blocked`).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payer-blocked.md","title":"Forbidden","status":403,"detail":"This payer cannot use paid access.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests: the per-IP rate limit was exceeded (`rate-limited`), or this payer reached its daily limit of failed settlements (`payer-limit-reached`, `Retry-After` is the time to 00:00 UTC).","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable: no upstream node could serve the request (`upstream-unavailable`), or paid access is temporarily unavailable (`payments-unavailable`, no `Retry-After`); nothing was charged. `Retry-After` is sent for `upstream-unavailable`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}}}},"/v1/pro/xrpl/health/history":{"get":{"summary":"Bucketed upstream probe history with uptime and latency per node.","description":"Aggregates probe samples into buckets (`1h` -> 300 s, `24h` -> 3600 s, `7d` -> 21600 s). Each bucket lists, per node, `samples`, `up`, `uptime_pct` and `avg_latency_ms`. Buckets without samples are omitted.\n\nWhen to use: To judge reliability over time before depending on the service.\n\nWhen not to use: Not for current state; use the network-health page.","operationId":"proGetXrplHealthHistory","tags":["pro"],"x-ttl-seconds":60,"x-max-stale-seconds":600,"parameters":[{"schema":{"type":"string","enum":["1h","24h","7d"],"default":"1h","description":"History window.","example":"24h"},"required":false,"description":"History window.","name":"window","in":"query"},{"schema":{"type":"string","description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","example":"eyJ4NDAyVmVyc2lvbiI6MiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19LCJwYXlsb2FkIjp7InRyYW5zYWN0aW9uIjoiPGJhc2U2NCBzaWduZWQgdHJhbnNhY3Rpb24+In19"},"required":false,"description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","name":"PAYMENT-SIGNATURE","in":"header"}],"responses":{"200":{"description":"Bucketed probe history","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42},"PAYMENT-RESPONSE":{"description":"Base64 of the JSON settlement result (`success`, `transaction`, `network`, `payer`). Present only on a 200 whose payment settled.","schema":{"type":"string"},"example":"eyJzdWNjZXNzIjp0cnVlLCJ0cmFuc2FjdGlvbiI6Ijx0cmFuc2FjdGlvbiBzaWduYXR1cmU+IiwibmV0d29yayI6InNvbGFuYTo1ZXlrdDRVc0Z2OFA4TkpkVFJFcFkxdnpxS3FaS3ZkcCIsInBheWVyIjoiPHBheWVyIHdhbGxldCBhZGRyZXNzPiJ9"}},"content":{"application/json":{"example":{"window":"24h","bucket_seconds":3600,"buckets":[{"start":"2026-10-06T11:00:00.000Z","members":[{"member":"ripple-s1","samples":30,"up":30,"uptime_pct":100,"avg_latency_ms":175}]}],"meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":0,"cache":"miss","stale":false}},"schema":{"$ref":"#/components/schemas/HealthHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"402":{"description":"Payment Required (only while paid access is active; while payments are off the route returns free data): no payment, or a payment that was not accepted (`payment-required`), a settlement that failed (`payment-settlement-failed`) or a payment that was already used (`payment-already-used`). Nothing is served and nothing is kept for the caller; sign a new payment from the options in `PAYMENT-REQUIRED`.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 of the JSON `PaymentRequired` object (see the `PaymentRequired` schema) with the accepted payment options. Sent on 402 answers that can be fixed by paying.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentRequired"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJBIHZhbGlkIHBheW1lbnQgaXMgcmVxdWlyZWQuIiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19XX0="}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payment-required.md","title":"Payment Required","status":402,"detail":"A valid payment is required. Sign one of the accepted payment options and retry.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"403":{"description":"Forbidden: this payer cannot use paid access (`payer-blocked`).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payer-blocked.md","title":"Forbidden","status":403,"detail":"This payer cannot use paid access.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests: the per-IP rate limit was exceeded (`rate-limited`), or this payer reached its daily limit of failed settlements (`payer-limit-reached`, `Retry-After` is the time to 00:00 UTC).","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable: no upstream node could serve the request (`upstream-unavailable`), or paid access is temporarily unavailable (`payments-unavailable`, no `Retry-After`); nothing was charged. `Retry-After` is sent for `upstream-unavailable`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}}}},"/v1/pro/xrpl/ledger/latest":{"get":{"summary":"Latest validated ledger index, hash and close time.","description":"Returns the index, hash and close time (ISO 8601 or `null`) of the latest validated ledger.\n\nWhen to use: To anchor other readings to a ledger or to check how current the network view is.\n\nWhen not to use: Not for transaction data or account state; use the account endpoint for those.","operationId":"proGetXrplLedgerLatest","tags":["pro"],"x-ttl-seconds":4,"x-max-stale-seconds":60,"parameters":[{"schema":{"type":"string","description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","example":"eyJ4NDAyVmVyc2lvbiI6MiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19LCJwYXlsb2FkIjp7InRyYW5zYWN0aW9uIjoiPGJhc2U2NCBzaWduZWQgdHJhbnNhY3Rpb24+In19"},"required":false,"description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","name":"PAYMENT-SIGNATURE","in":"header"}],"responses":{"200":{"description":"Latest validated ledger","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42},"PAYMENT-RESPONSE":{"description":"Base64 of the JSON settlement result (`success`, `transaction`, `network`, `payer`). Present only on a 200 whose payment settled.","schema":{"type":"string"},"example":"eyJzdWNjZXNzIjp0cnVlLCJ0cmFuc2FjdGlvbiI6Ijx0cmFuc2FjdGlvbiBzaWduYXR1cmU+IiwibmV0d29yayI6InNvbGFuYTo1ZXlrdDRVc0Z2OFA4TkpkVFJFcFkxdnpxS3FaS3ZkcCIsInBheWVyIjoiPHBheWVyIHdhbGxldCBhZGRyZXNzPiJ9"}},"content":{"application/json":{"example":{"ledger_index":100234566,"close_time":"2026-10-06T12:00:01.000Z","ledger_hash":"A1B2C3D4E5F60718293A4B5C6D7E8F90A1B2C3D4E5F60718293A4B5C6D7E8F90","meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":0,"cache":"miss","stale":false}},"schema":{"$ref":"#/components/schemas/LedgerResponse"}}}},"402":{"description":"Payment Required (only while paid access is active; while payments are off the route returns free data): no payment, or a payment that was not accepted (`payment-required`), a settlement that failed (`payment-settlement-failed`) or a payment that was already used (`payment-already-used`). Nothing is served and nothing is kept for the caller; sign a new payment from the options in `PAYMENT-REQUIRED`.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 of the JSON `PaymentRequired` object (see the `PaymentRequired` schema) with the accepted payment options. Sent on 402 answers that can be fixed by paying.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentRequired"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJBIHZhbGlkIHBheW1lbnQgaXMgcmVxdWlyZWQuIiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19XX0="}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payment-required.md","title":"Payment Required","status":402,"detail":"A valid payment is required. Sign one of the accepted payment options and retry.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"403":{"description":"Forbidden: this payer cannot use paid access (`payer-blocked`).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payer-blocked.md","title":"Forbidden","status":403,"detail":"This payer cannot use paid access.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests: the per-IP rate limit was exceeded (`rate-limited`), or this payer reached its daily limit of failed settlements (`payer-limit-reached`, `Retry-After` is the time to 00:00 UTC).","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable: no upstream node could serve the request (`upstream-unavailable`), or paid access is temporarily unavailable (`payments-unavailable`, no `Retry-After`); nothing was charged. `Retry-After` is sent for `upstream-unavailable`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}}}},"/v1/pro/xrpl/orderbook":{"get":{"summary":"CLOB order book for a currency pair with unfunded offers removed.","description":"Returns asks (best price first) and bids as levels `{gets, pays, price}`. Funded amounts are used when the ledger reports them and zero-amount levels are dropped. Price is `pays` per `gets` in human units (XRP, not drops).\n\nWhen to use: To read executable liquidity for a pair on the XRPL central limit order book (CLOB).\n\nWhen not to use: Not for AMM liquidity (use the amm page) and not for a cost estimate (use the slippage page).","operationId":"proGetXrplOrderbook","tags":["pro"],"x-ttl-seconds":4,"x-max-stale-seconds":30,"parameters":[{"schema":{"type":"string","description":"Base currency of the pair.","example":"XRP"},"required":true,"description":"Base currency of the pair.","name":"base","in":"query"},{"schema":{"type":"string","description":"Quote currency of the pair.","example":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},"required":true,"description":"Quote currency of the pair.","name":"quote","in":"query"},{"schema":{"type":"string","description":"Order book levels per side.","example":"10"},"required":false,"description":"Order book levels per side.","name":"depth","in":"query"},{"schema":{"type":"string","description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","example":"eyJ4NDAyVmVyc2lvbiI6MiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19LCJwYXlsb2FkIjp7InRyYW5zYWN0aW9uIjoiPGJhc2U2NCBzaWduZWQgdHJhbnNhY3Rpb24+In19"},"required":false,"description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","name":"PAYMENT-SIGNATURE","in":"header"}],"responses":{"200":{"description":"Funded order book","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42},"PAYMENT-RESPONSE":{"description":"Base64 of the JSON settlement result (`success`, `transaction`, `network`, `payer`). Present only on a 200 whose payment settled.","schema":{"type":"string"},"example":"eyJzdWNjZXNzIjp0cnVlLCJ0cmFuc2FjdGlvbiI6Ijx0cmFuc2FjdGlvbiBzaWduYXR1cmU+IiwibmV0d29yayI6InNvbGFuYTo1ZXlrdDRVc0Z2OFA4TkpkVFJFcFkxdnpxS3FaS3ZkcCIsInBheWVyIjoiPHBheWVyIHdhbGxldCBhZGRyZXNzPiJ9"}},"content":{"application/json":{"example":{"base":"XRP","quote":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","depth":10,"asks":[{"gets":"1500","pays":"3150","price":"2.1"}],"bids":[{"gets":"1000","pays":"2090","price":"2.09"}],"meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":2,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/OrderbookResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"402":{"description":"Payment Required (only while paid access is active; while payments are off the route returns free data): no payment, or a payment that was not accepted (`payment-required`), a settlement that failed (`payment-settlement-failed`) or a payment that was already used (`payment-already-used`). Nothing is served and nothing is kept for the caller; sign a new payment from the options in `PAYMENT-REQUIRED`.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 of the JSON `PaymentRequired` object (see the `PaymentRequired` schema) with the accepted payment options. Sent on 402 answers that can be fixed by paying.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentRequired"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJBIHZhbGlkIHBheW1lbnQgaXMgcmVxdWlyZWQuIiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19XX0="}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payment-required.md","title":"Payment Required","status":402,"detail":"A valid payment is required. Sign one of the accepted payment options and retry.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"403":{"description":"Forbidden: this payer cannot use paid access (`payer-blocked`).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payer-blocked.md","title":"Forbidden","status":403,"detail":"This payer cannot use paid access.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests: the per-IP rate limit was exceeded (`rate-limited`), or this payer reached its daily limit of failed settlements (`payer-limit-reached`, `Retry-After` is the time to 00:00 UTC).","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable: no upstream node could serve the request (`upstream-unavailable`), or paid access is temporarily unavailable (`payments-unavailable`, no `Retry-After`); nothing was charged. `Retry-After` is sent for `upstream-unavailable`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}}}},"/v1/pro/xrpl/slippage":{"get":{"summary":"Slippage and average price for buying an amount of base currency.","description":"Walks the asks of the cached order book to estimate the average price and `slippage_pct` (a percentage; `null` when liquidity is insufficient) of buying `amount` of `base` paying `quote`. For an issued currency the issuer's transfer fee is reported when it can be loaded. The top-level fields describe the CLOB; `venues` compares the CLOB with the AMM pool for the same amount (`best` is the cheaper venue by average price, ties go to the CLOB, no routing split) and `venues.amm_status` is `ok`, `stale`, `no_pool` or `unavailable`. `venues.amm` is `null` when the pair has no pool or the pool could not be read; the response never fails because of the AMM. CLOB slippage is measured against the best ask and AMM slippage against the pool spot price (so it includes the trading fee).\n\nWhen to use: Before placing a market-style trade, to size it against available depth and to see whether the CLOB or the AMM pool is the cheaper venue.\n\nWhen not to use: It is an estimate, not a quote, and it does not split an amount across venues or route through other pairs. To read pool reserves, use the amm page.","operationId":"proGetXrplSlippage","tags":["pro"],"x-ttl-seconds":4,"x-max-stale-seconds":30,"parameters":[{"schema":{"type":"string","description":"Currency to buy.","example":"XRP"},"required":true,"description":"Currency to buy.","name":"base","in":"query"},{"schema":{"type":"string","description":"Currency paid.","example":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},"required":true,"description":"Currency paid.","name":"quote","in":"query"},{"schema":{"type":"string","description":"Order book levels per side.","example":"10"},"required":false,"description":"Order book levels per side.","name":"depth","in":"query"},{"schema":{"type":"string","pattern":"^(?!0+(\\.0+)?$)[0-9]+(\\.[0-9]+)?$","description":"Amount of `base` to buy, as a decimal string.","example":"1000"},"required":true,"description":"Amount of `base` to buy, as a decimal string.","name":"amount","in":"query"},{"schema":{"type":"string","description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","example":"eyJ4NDAyVmVyc2lvbiI6MiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19LCJwYXlsb2FkIjp7InRyYW5zYWN0aW9uIjoiPGJhc2U2NCBzaWduZWQgdHJhbnNhY3Rpb24+In19"},"required":false,"description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","name":"PAYMENT-SIGNATURE","in":"header"}],"responses":{"200":{"description":"Slippage estimate for buying `amount` of base","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42},"PAYMENT-RESPONSE":{"description":"Base64 of the JSON settlement result (`success`, `transaction`, `network`, `payer`). Present only on a 200 whose payment settled.","schema":{"type":"string"},"example":"eyJzdWNjZXNzIjp0cnVlLCJ0cmFuc2FjdGlvbiI6Ijx0cmFuc2FjdGlvbiBzaWduYXR1cmU+IiwibmV0d29yayI6InNvbGFuYTo1ZXlrdDRVc0Z2OFA4TkpkVFJFcFkxdnpxS3FaS3ZkcCIsInBheWVyIjoiPHBheWVyIHdhbGxldCBhZGRyZXNzPiJ9"}},"content":{"application/json":{"example":{"base":"XRP","quote":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","side":"buy","depth":200,"amount":"1000","filled":"1000","partial":false,"insufficient_liquidity":false,"best_price":"2.1","avg_price":"2.1042","slippage_pct":"0.2","transfer_fee_applied":false,"transfer_fee":null,"avg_price_after_fees":null,"venues":{"best":"clob","amm_status":"ok","clob":{"avg_price":"2.1042","cost":"2104.2","slippage_pct":"0.2","insufficient_liquidity":false,"avg_price_after_fees":null},"amm":{"avg_price":"2.1331","cost":"2133.1","slippage_pct":"1.5762","insufficient_liquidity":false,"avg_price_after_fees":null,"spot_price":"2.1","trading_fee":"0.005"}},"meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":2,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/SlippageResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"402":{"description":"Payment Required (only while paid access is active; while payments are off the route returns free data): no payment, or a payment that was not accepted (`payment-required`), a settlement that failed (`payment-settlement-failed`) or a payment that was already used (`payment-already-used`). Nothing is served and nothing is kept for the caller; sign a new payment from the options in `PAYMENT-REQUIRED`.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 of the JSON `PaymentRequired` object (see the `PaymentRequired` schema) with the accepted payment options. Sent on 402 answers that can be fixed by paying.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentRequired"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJBIHZhbGlkIHBheW1lbnQgaXMgcmVxdWlyZWQuIiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19XX0="}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payment-required.md","title":"Payment Required","status":402,"detail":"A valid payment is required. Sign one of the accepted payment options and retry.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"403":{"description":"Forbidden: this payer cannot use paid access (`payer-blocked`).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payer-blocked.md","title":"Forbidden","status":403,"detail":"This payer cannot use paid access.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests: the per-IP rate limit was exceeded (`rate-limited`), or this payer reached its daily limit of failed settlements (`payer-limit-reached`, `Retry-After` is the time to 00:00 UTC).","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable: no upstream node could serve the request (`upstream-unavailable`), or paid access is temporarily unavailable (`payments-unavailable`, no `Retry-After`); nothing was charged. `Retry-After` is sent for `upstream-unavailable`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}}}},"/v1/pro/xrpl/amm/{a}/{b}":{"get":{"summary":"AMM pool reserves and trading fee for an asset pair.","description":"Returns the reserves of both assets in the order requested and the trading fee as a decimal fraction (`0.005` is 0.5 %).\n\nWhen to use: To read AMM pool depth and fee for a pair.\n\nWhen not to use: It does not estimate slippage or compare venues (use the slippage page for the CLOB vs AMM comparison); a pair without a pool returns 404.","operationId":"proGetXrplAmm","tags":["pro"],"x-ttl-seconds":8,"x-max-stale-seconds":60,"parameters":[{"schema":{"type":"string","description":"First asset of the pool.","example":"XRP"},"required":true,"description":"First asset of the pool.","name":"a","in":"path"},{"schema":{"type":"string","description":"Second asset of the pool.","example":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},"required":true,"description":"Second asset of the pool.","name":"b","in":"path"},{"schema":{"type":"string","description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","example":"eyJ4NDAyVmVyc2lvbiI6MiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19LCJwYXlsb2FkIjp7InRyYW5zYWN0aW9uIjoiPGJhc2U2NCBzaWduZWQgdHJhbnNhY3Rpb24+In19"},"required":false,"description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","name":"PAYMENT-SIGNATURE","in":"header"}],"responses":{"200":{"description":"AMM pool reserves and fee","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42},"PAYMENT-RESPONSE":{"description":"Base64 of the JSON settlement result (`success`, `transaction`, `network`, `payer`). Present only on a 200 whose payment settled.","schema":{"type":"string"},"example":"eyJzdWNjZXNzIjp0cnVlLCJ0cmFuc2FjdGlvbiI6Ijx0cmFuc2FjdGlvbiBzaWduYXR1cmU+IiwibmV0d29yayI6InNvbGFuYTo1ZXlrdDRVc0Z2OFA4TkpkVFJFcFkxdnpxS3FaS3ZkcCIsInBheWVyIjoiPHBheWVyIHdhbGxldCBhZGRyZXNzPiJ9"}},"content":{"application/json":{"example":{"asset_a":"XRP","asset_b":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","reserve_a":"250000","reserve_b":"525000","trading_fee":"0.005","meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":4,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/AmmResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"402":{"description":"Payment Required (only while paid access is active; while payments are off the route returns free data): no payment, or a payment that was not accepted (`payment-required`), a settlement that failed (`payment-settlement-failed`) or a payment that was already used (`payment-already-used`). Nothing is served and nothing is kept for the caller; sign a new payment from the options in `PAYMENT-REQUIRED`.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 of the JSON `PaymentRequired` object (see the `PaymentRequired` schema) with the accepted payment options. Sent on 402 answers that can be fixed by paying.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentRequired"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJBIHZhbGlkIHBheW1lbnQgaXMgcmVxdWlyZWQuIiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19XX0="}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payment-required.md","title":"Payment Required","status":402,"detail":"A valid payment is required. Sign one of the accepted payment options and retry.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"403":{"description":"Forbidden: this payer cannot use paid access (`payer-blocked`).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payer-blocked.md","title":"Forbidden","status":403,"detail":"This payer cannot use paid access.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/not-found.md","title":"Not Found","status":404,"detail":"The ledger has no such object (actNotFound).","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests: the per-IP rate limit was exceeded (`rate-limited`), or this payer reached its daily limit of failed settlements (`payer-limit-reached`, `Retry-After` is the time to 00:00 UTC).","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable: no upstream node could serve the request (`upstream-unavailable`), or paid access is temporarily unavailable (`payments-unavailable`, no `Retry-After`); nothing was charged. `Retry-After` is sent for `upstream-unavailable`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}}}},"/v1/pro/xrpl/account/{address}/summary":{"get":{"summary":"XRP balance, sequence, owner count, transfer rate and trust lines (capped) for an account.","description":"Returns the XRP balance as a decimal string, `sequence`, `owner_count`, the account `transfer_rate` (`1000000000` means no fee) and up to 50 trust lines; `lines_truncated` is `true` when there are more.\n\nWhen to use: To inspect an account before building a transaction for it.\n\nWhen not to use: Not for transaction history, reserves or account flags; it is a summary, not a full account dump.","operationId":"proGetXrplAccountSummary","tags":["pro"],"x-ttl-seconds":10,"x-max-stale-seconds":120,"parameters":[{"schema":{"type":"string","description":"Classic XRPL account address.","example":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},"required":true,"description":"Classic XRPL account address.","name":"address","in":"path"},{"schema":{"type":"string","description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","example":"eyJ4NDAyVmVyc2lvbiI6MiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19LCJwYXlsb2FkIjp7InRyYW5zYWN0aW9uIjoiPGJhc2U2NCBzaWduZWQgdHJhbnNhY3Rpb24+In19"},"required":false,"description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","name":"PAYMENT-SIGNATURE","in":"header"}],"responses":{"200":{"description":"Account summary","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42},"PAYMENT-RESPONSE":{"description":"Base64 of the JSON settlement result (`success`, `transaction`, `network`, `payer`). Present only on a 200 whose payment settled.","schema":{"type":"string"},"example":"eyJzdWNjZXNzIjp0cnVlLCJ0cmFuc2FjdGlvbiI6Ijx0cmFuc2FjdGlvbiBzaWduYXR1cmU+IiwibmV0d29yayI6InNvbGFuYTo1ZXlrdDRVc0Z2OFA4TkpkVFJFcFkxdnpxS3FaS3ZkcCIsInBheWVyIjoiPHBheWVyIHdhbGxldCBhZGRyZXNzPiJ9"}},"content":{"application/json":{"example":{"address":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","balance_xrp":"1234.567891","sequence":42,"owner_count":3,"transfer_rate":1000000000,"trust_lines":[{"currency":"USD","issuer":"rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq","balance":"10.5","limit":"1000000"}],"lines_truncated":false,"meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":3,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/AccountSummaryResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"402":{"description":"Payment Required (only while paid access is active; while payments are off the route returns free data): no payment, or a payment that was not accepted (`payment-required`), a settlement that failed (`payment-settlement-failed`) or a payment that was already used (`payment-already-used`). Nothing is served and nothing is kept for the caller; sign a new payment from the options in `PAYMENT-REQUIRED`.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 of the JSON `PaymentRequired` object (see the `PaymentRequired` schema) with the accepted payment options. Sent on 402 answers that can be fixed by paying.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentRequired"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJBIHZhbGlkIHBheW1lbnQgaXMgcmVxdWlyZWQuIiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19XX0="}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payment-required.md","title":"Payment Required","status":402,"detail":"A valid payment is required. Sign one of the accepted payment options and retry.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"403":{"description":"Forbidden: this payer cannot use paid access (`payer-blocked`).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payer-blocked.md","title":"Forbidden","status":403,"detail":"This payer cannot use paid access.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/not-found.md","title":"Not Found","status":404,"detail":"The ledger has no such object (actNotFound).","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests: the per-IP rate limit was exceeded (`rate-limited`), or this payer reached its daily limit of failed settlements (`payer-limit-reached`, `Retry-After` is the time to 00:00 UTC).","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable: no upstream node could serve the request (`upstream-unavailable`), or paid access is temporarily unavailable (`payments-unavailable`, no `Retry-After`); nothing was charged. `Retry-After` is sent for `upstream-unavailable`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}}}},"/v1/pro/xrpl/account/{address}/lines":{"get":{"summary":"One page of an account's trust lines, with an opaque cursor for the next page.","description":"Returns one page of trust lines: peer, canonical currency, balance, limit, peer limit and the `no_ripple`, `freeze` and `authorized` flags of both sides; amounts are decimal strings. `limit` is 10 to 400 lines (default 100), `peer` keeps only lines with that counterparty, and `marker` is an opaque cursor: send it back unchanged to get the next page; it is `null` on the last page and only valid for the address that produced it.\n\nWhen to use: To list every trust line of an account (balances, limits, freeze and authorization flags), page by page.\n\nWhen not to use: For a quick capped overview with the XRP balance, use `/v1/xrpl/account/{address}/summary`; for issued totals of a token, use the token endpoint.","operationId":"proGetXrplAccountLines","tags":["pro"],"x-ttl-seconds":10,"x-max-stale-seconds":120,"parameters":[{"schema":{"type":"string","description":"Classic XRPL account address.","example":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},"required":true,"description":"Classic XRPL account address.","name":"address","in":"path"},{"schema":{"type":"string","description":"Lines per page.","example":"100"},"required":false,"description":"Lines per page.","name":"limit","in":"query"},{"schema":{"type":"string","description":"Only lines with this counterparty.","example":"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B"},"required":false,"description":"Only lines with this counterparty.","name":"peer","in":"query"},{"schema":{"type":"string","description":"Opaque cursor from the previous page's `marker`.","example":"eyJ2IjoxLCJlIjoibGluZXMiLCJhIjoiciIsIm0iOiIxIn0"},"required":false,"description":"Opaque cursor from the previous page's `marker`.","name":"marker","in":"query"},{"schema":{"type":"string","description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","example":"eyJ4NDAyVmVyc2lvbiI6MiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19LCJwYXlsb2FkIjp7InRyYW5zYWN0aW9uIjoiPGJhc2U2NCBzaWduZWQgdHJhbnNhY3Rpb24+In19"},"required":false,"description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","name":"PAYMENT-SIGNATURE","in":"header"}],"responses":{"200":{"description":"One page of trust lines","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42},"PAYMENT-RESPONSE":{"description":"Base64 of the JSON settlement result (`success`, `transaction`, `network`, `payer`). Present only on a 200 whose payment settled.","schema":{"type":"string"},"example":"eyJzdWNjZXNzIjp0cnVlLCJ0cmFuc2FjdGlvbiI6Ijx0cmFuc2FjdGlvbiBzaWduYXR1cmU+IiwibmV0d29yayI6InNvbGFuYTo1ZXlrdDRVc0Z2OFA4TkpkVFJFcFkxdnpxS3FaS3ZkcCIsInBheWVyIjoiPHBheWVyIHdhbGxldCBhZGRyZXNzPiJ9"}},"content":{"application/json":{"example":{"address":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","limit":100,"peer":null,"lines":[{"peer":"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B","currency":"USD","balance":"-10.5","limit":"0","peer_limit":"1000000","no_ripple":true,"no_ripple_peer":false,"freeze":false,"freeze_peer":false,"authorized":false,"peer_authorized":false}],"marker":null,"meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":3,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/AccountLinesResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"402":{"description":"Payment Required (only while paid access is active; while payments are off the route returns free data): no payment, or a payment that was not accepted (`payment-required`), a settlement that failed (`payment-settlement-failed`) or a payment that was already used (`payment-already-used`). Nothing is served and nothing is kept for the caller; sign a new payment from the options in `PAYMENT-REQUIRED`.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 of the JSON `PaymentRequired` object (see the `PaymentRequired` schema) with the accepted payment options. Sent on 402 answers that can be fixed by paying.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentRequired"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJBIHZhbGlkIHBheW1lbnQgaXMgcmVxdWlyZWQuIiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19XX0="}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payment-required.md","title":"Payment Required","status":402,"detail":"A valid payment is required. Sign one of the accepted payment options and retry.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"403":{"description":"Forbidden: this payer cannot use paid access (`payer-blocked`).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payer-blocked.md","title":"Forbidden","status":403,"detail":"This payer cannot use paid access.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/not-found.md","title":"Not Found","status":404,"detail":"The ledger has no such object (actNotFound).","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests: the per-IP rate limit was exceeded (`rate-limited`), or this payer reached its daily limit of failed settlements (`payer-limit-reached`, `Retry-After` is the time to 00:00 UTC).","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable: no upstream node could serve the request (`upstream-unavailable`), or paid access is temporarily unavailable (`payments-unavailable`, no `Retry-After`); nothing was charged. `Retry-After` is sent for `upstream-unavailable`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}}}},"/v1/pro/xrpl/account/{address}/transactions":{"get":{"summary":"One page of an account's most recent validated transactions, newest first.","description":"Returns one page of the account's most recent validated transactions, newest first, in a compact shape: hash, ledger index, close time, transaction type, result code, counterparty (when the transaction names one) and delivered amount as a decimal string (when reported). `limit` is 1 to 50 transactions (default 20) and `marker` is an opaque cursor: send it back unchanged to get the next (older) page; it is `null` on the last page and only valid for the address that produced it. No history depth is promised: history depth depends on the serving node (how far back pages go depends on the ledger history of the node that serves the request), and older pages may be slower because they can be served by a node that keeps a longer history.\n\nWhen to use: To check what an account did recently (payments sent or received, offers, trust line changes) and whether each transaction succeeded.\n\nWhen not to use: For balances and trust lines, use `/v1/xrpl/account/{address}/summary` or `/v1/xrpl/account/{address}/lines`; for full archival history, use a full-history node or indexer: history depth depends on the serving node and older pages may be slower.","operationId":"proGetXrplAccountTransactions","tags":["pro"],"x-ttl-seconds":4,"x-max-stale-seconds":30,"parameters":[{"schema":{"type":"string","description":"Classic XRPL account address.","example":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},"required":true,"description":"Classic XRPL account address.","name":"address","in":"path"},{"schema":{"type":"string","description":"Transactions per page.","example":"20"},"required":false,"description":"Transactions per page.","name":"limit","in":"query"},{"schema":{"type":"string","description":"Opaque cursor from the previous page's `marker`.","example":"eyJ2IjoxLCJlIjoidHgiLCJhIjoiciIsIm0iOjF9"},"required":false,"description":"Opaque cursor from the previous page's `marker`.","name":"marker","in":"query"},{"schema":{"type":"string","description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","example":"eyJ4NDAyVmVyc2lvbiI6MiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19LCJwYXlsb2FkIjp7InRyYW5zYWN0aW9uIjoiPGJhc2U2NCBzaWduZWQgdHJhbnNhY3Rpb24+In19"},"required":false,"description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","name":"PAYMENT-SIGNATURE","in":"header"}],"responses":{"200":{"description":"One page of transactions","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42},"PAYMENT-RESPONSE":{"description":"Base64 of the JSON settlement result (`success`, `transaction`, `network`, `payer`). Present only on a 200 whose payment settled.","schema":{"type":"string"},"example":"eyJzdWNjZXNzIjp0cnVlLCJ0cmFuc2FjdGlvbiI6Ijx0cmFuc2FjdGlvbiBzaWduYXR1cmU+IiwibmV0d29yayI6InNvbGFuYTo1ZXlrdDRVc0Z2OFA4TkpkVFJFcFkxdnpxS3FaS3ZkcCIsInBheWVyIjoiPHBheWVyIHdhbGxldCBhZGRyZXNzPiJ9"}},"content":{"application/json":{"example":{"address":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","limit":20,"transactions":[{"hash":"C53ECF838647FA5A4C780377025FEC7999AB4182590510CA461444B207AB74A9","ledger_index":100234566,"close_time":"2026-10-11T09:30:12.000Z","type":"Payment","result":"tesSUCCESS","counterparty":"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B","delivered":{"asset":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","value":"25.5"}}],"marker":null,"meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":2,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/AccountTransactionsResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"402":{"description":"Payment Required (only while paid access is active; while payments are off the route returns free data): no payment, or a payment that was not accepted (`payment-required`), a settlement that failed (`payment-settlement-failed`) or a payment that was already used (`payment-already-used`). Nothing is served and nothing is kept for the caller; sign a new payment from the options in `PAYMENT-REQUIRED`.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 of the JSON `PaymentRequired` object (see the `PaymentRequired` schema) with the accepted payment options. Sent on 402 answers that can be fixed by paying.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentRequired"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJBIHZhbGlkIHBheW1lbnQgaXMgcmVxdWlyZWQuIiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19XX0="}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payment-required.md","title":"Payment Required","status":402,"detail":"A valid payment is required. Sign one of the accepted payment options and retry.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"403":{"description":"Forbidden: this payer cannot use paid access (`payer-blocked`).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payer-blocked.md","title":"Forbidden","status":403,"detail":"This payer cannot use paid access.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/not-found.md","title":"Not Found","status":404,"detail":"The ledger has no such object (actNotFound).","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests: the per-IP rate limit was exceeded (`rate-limited`), or this payer reached its daily limit of failed settlements (`payer-limit-reached`, `Retry-After` is the time to 00:00 UTC).","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable: no upstream node could serve the request (`upstream-unavailable`), or paid access is temporarily unavailable (`payments-unavailable`, no `Retry-After`); nothing was charged. `Retry-After` is sent for `upstream-unavailable`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}}}},"/v1/pro/xrpl/token/{asset}":{"get":{"summary":"Issuer data for an issued asset: flags, domain, transfer fee and total issued.","description":"Returns the issuer data for an issued asset `CODE.issuer`: issuer flags (`global_freeze`, `no_freeze`, `require_auth`, `default_ripple`), the issuer `domain` decoded to text when set, `transfer_rate` (1000000000 = no fee) and `transfer_fee_pct`, and `obligations`, the total issued of that currency as a decimal string (`\"0\"` when the issuer has not issued it). When the node cannot report obligations, the response is still 200 with `obligations: null` and `obligations_status: \"unavailable\"`. Holder counts are not returned.\n\nWhen to use: Before accepting or sending an issued token: check that the issuer exists, is not frozen, whether holders need authorization, and the transfer fee charged on every transfer between non-issuer accounts.\n\nWhen not to use: For XRP (not an issued asset; 400), for one account's own balances use `/v1/xrpl/account/{address}/lines`, and for prices use `/v1/xrpl/orderbook` or `/v1/xrpl/amm/{a}/{b}`.","operationId":"proGetXrplToken","tags":["pro"],"x-ttl-seconds":10,"x-max-stale-seconds":120,"parameters":[{"schema":{"type":"string","description":"Issued asset as `CODE.issuer`, split on the first dot.","example":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},"required":true,"description":"Issued asset as `CODE.issuer`, split on the first dot.","name":"asset","in":"path"},{"schema":{"type":"string","description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","example":"eyJ4NDAyVmVyc2lvbiI6MiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19LCJwYXlsb2FkIjp7InRyYW5zYWN0aW9uIjoiPGJhc2U2NCBzaWduZWQgdHJhbnNhY3Rpb24+In19"},"required":false,"description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","name":"PAYMENT-SIGNATURE","in":"header"}],"responses":{"200":{"description":"Issuer data for the asset","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42},"PAYMENT-RESPONSE":{"description":"Base64 of the JSON settlement result (`success`, `transaction`, `network`, `payer`). Present only on a 200 whose payment settled.","schema":{"type":"string"},"example":"eyJzdWNjZXNzIjp0cnVlLCJ0cmFuc2FjdGlvbiI6Ijx0cmFuc2FjdGlvbiBzaWduYXR1cmU+IiwibmV0d29yayI6InNvbGFuYTo1ZXlrdDRVc0Z2OFA4TkpkVFJFcFkxdnpxS3FaS3ZkcCIsInBheWVyIjoiPHBheWVyIHdhbGxldCBhZGRyZXNzPiJ9"}},"content":{"application/json":{"example":{"issuer":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","currency":"USD","global_freeze":false,"no_freeze":false,"require_auth":false,"default_ripple":true,"domain":"example.com","transfer_rate":1002000000,"transfer_fee_pct":"0.2","obligations":"1250000.5","obligations_status":"ok","meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":12,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"402":{"description":"Payment Required (only while paid access is active; while payments are off the route returns free data): no payment, or a payment that was not accepted (`payment-required`), a settlement that failed (`payment-settlement-failed`) or a payment that was already used (`payment-already-used`). Nothing is served and nothing is kept for the caller; sign a new payment from the options in `PAYMENT-REQUIRED`.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 of the JSON `PaymentRequired` object (see the `PaymentRequired` schema) with the accepted payment options. Sent on 402 answers that can be fixed by paying.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentRequired"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJBIHZhbGlkIHBheW1lbnQgaXMgcmVxdWlyZWQuIiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19XX0="}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payment-required.md","title":"Payment Required","status":402,"detail":"A valid payment is required. Sign one of the accepted payment options and retry.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"403":{"description":"Forbidden: this payer cannot use paid access (`payer-blocked`).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payer-blocked.md","title":"Forbidden","status":403,"detail":"This payer cannot use paid access.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"404":{"description":"Not Found","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/not-found.md","title":"Not Found","status":404,"detail":"The ledger has no such object (actNotFound).","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests: the per-IP rate limit was exceeded (`rate-limited`), or this payer reached its daily limit of failed settlements (`payer-limit-reached`, `Retry-After` is the time to 00:00 UTC).","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable: no upstream node could serve the request (`upstream-unavailable`), or paid access is temporarily unavailable (`payments-unavailable`, no `Retry-After`); nothing was charged. `Retry-After` is sent for `upstream-unavailable`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}}}},"/v1/pro/xrpl/payment-readiness":{"get":{"summary":"Pre-payment check: can this payment from source to destination succeed now?","description":"Checks, before you sign, whether a payment of `asset` (default `XRP`) from `source` to `destination` can succeed on the validated ledger, and returns a `verdict`: `ready`, `not_ready` (at least one blocking reason) or `unknown` (no blocking reason, but a sub-check could not run; never treat `unknown` as `ready`). A missing account is a reason, not an error: this endpoint never answers 404. Without `amount` the amount-dependent checks are skipped. `spendable_xrp` is the source XRP above its live reserve (base plus owner count times increment, from the server state) and the standard fee; `transfer_fee_pct` is the issuer transfer fee when it applies. Warnings never change the verdict.\n\nReason codes: `source_not_found`, `insufficient_xrp_balance`, `source_line_missing`, `insufficient_token_balance`, `source_line_frozen`, `destination_not_found`, `amount_below_destination_reserve`, `destination_tag_required`, `deposit_not_authorized`, `destination_line_missing`, `destination_line_limit_exceeded`, `destination_line_frozen`, `issuer_not_found`, `issuer_global_freeze`.\n\nWarning codes: `destination_will_be_created`, `transfer_fee`, `high_fee`, `network_degraded`.\n\nSub-check codes: `source_account`, `destination_account`, `deposit_authorized`, `source_line`, `destination_line`, `issuer`, `fee`, `network_health`.\n\nWhen to use: Right before sending a payment: to catch a missing or unfunded destination, a required destination tag, deposit authorization, missing or frozen trust lines, insufficient balance and issuer freezes, in one call.\n\nWhen not to use: To find a multi-hop route or the source amount needed for a cross-currency payment (use the paths endpoint), or to list balances (use `/v1/xrpl/account/{address}/summary`).","operationId":"proGetXrplPaymentReadiness","tags":["pro"],"x-ttl-seconds":4,"x-max-stale-seconds":60,"parameters":[{"schema":{"type":"string","description":"Sending account.","example":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},"required":true,"description":"Sending account.","name":"source","in":"query"},{"schema":{"type":"string","description":"Receiving account.","example":"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B"},"required":true,"description":"Receiving account.","name":"destination","in":"query"},{"schema":{"type":"string","description":"Asset to deliver.","example":"XRP"},"required":false,"description":"Asset to deliver.","name":"asset","in":"query"},{"schema":{"type":"string","pattern":"^(?!0+(\\.0+)?$)[0-9]+(\\.[0-9]+)?$","description":"Amount to deliver, in units of `asset`.","example":"10"},"required":false,"description":"Amount to deliver, in units of `asset`.","name":"amount","in":"query"},{"schema":{"type":"string","description":"Destination tag you will send.","example":"12345"},"required":false,"description":"Destination tag you will send.","name":"destination_tag","in":"query"},{"schema":{"type":"string","description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","example":"eyJ4NDAyVmVyc2lvbiI6MiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19LCJwYXlsb2FkIjp7InRyYW5zYWN0aW9uIjoiPGJhc2U2NCBzaWduZWQgdHJhbnNhY3Rpb24+In19"},"required":false,"description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","name":"PAYMENT-SIGNATURE","in":"header"}],"responses":{"200":{"description":"Readiness verdict for one payment","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42},"PAYMENT-RESPONSE":{"description":"Base64 of the JSON settlement result (`success`, `transaction`, `network`, `payer`). Present only on a 200 whose payment settled.","schema":{"type":"string"},"example":"eyJzdWNjZXNzIjp0cnVlLCJ0cmFuc2FjdGlvbiI6Ijx0cmFuc2FjdGlvbiBzaWduYXR1cmU+IiwibmV0d29yayI6InNvbGFuYTo1ZXlrdDRVc0Z2OFA4TkpkVFJFcFkxdnpxS3FaS3ZkcCIsInBheWVyIjoiPHBheWVyIHdhbGxldCBhZGRyZXNzPiJ9"}},"content":{"application/json":{"example":{"verdict":"not_ready","reasons":["destination_tag_required"],"warnings":[],"checks_failed":[],"spendable_xrp":"98.995","transfer_fee_pct":null,"source":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","destination":"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B","asset":"XRP","amount":"10","destination_tag":null,"meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":2,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/PaymentReadinessResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"402":{"description":"Payment Required (only while paid access is active; while payments are off the route returns free data): no payment, or a payment that was not accepted (`payment-required`), a settlement that failed (`payment-settlement-failed`) or a payment that was already used (`payment-already-used`). Nothing is served and nothing is kept for the caller; sign a new payment from the options in `PAYMENT-REQUIRED`.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 of the JSON `PaymentRequired` object (see the `PaymentRequired` schema) with the accepted payment options. Sent on 402 answers that can be fixed by paying.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentRequired"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJBIHZhbGlkIHBheW1lbnQgaXMgcmVxdWlyZWQuIiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19XX0="}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payment-required.md","title":"Payment Required","status":402,"detail":"A valid payment is required. Sign one of the accepted payment options and retry.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"403":{"description":"Forbidden: this payer cannot use paid access (`payer-blocked`).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payer-blocked.md","title":"Forbidden","status":403,"detail":"This payer cannot use paid access.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests: the per-IP rate limit was exceeded (`rate-limited`), or this payer reached its daily limit of failed settlements (`payer-limit-reached`, `Retry-After` is the time to 00:00 UTC).","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable: no upstream node could serve the request (`upstream-unavailable`), or paid access is temporarily unavailable (`payments-unavailable`, no `Retry-After`); nothing was charged. `Retry-After` is sent for `upstream-unavailable`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}}}},"/v1/pro/xrpl/paths":{"get":{"summary":"Multi-hop payment paths and their source cost.","description":"Runs a live path search (`ripple_path_find`) on the validated ledger for delivering `amount` of `asset` from `source` to `destination`, and returns the `alternatives`: each with the estimated `source_amount` the source would spend (asset and decimal string), `paths_count` and the computed `paths` as compact steps (`account`, `currency`, `issuer`). A call can take up to about 20 seconds, because path finding is heavy for the node. Results are best effort: `paths_may_be_non_optimal` is always `true`, a cheaper path may exist and the amounts are estimates that can change by the time you submit. No alternative is a 200 with `alternatives: []`. A destination account that does not exist gives `alternatives: []` and the warning `destination_not_found`; a source account that does not exist is a 404. Answers are never cached: every call reads the ledger.\n\nWhen to use: Before a cross-currency or multi-hop payment: to see whether a route exists and how much the source would spend to deliver the amount. A call can take up to about 20 seconds and paths may be non-optimal.\n\nWhen not to use: To check whether a direct payment can succeed (use `/v1/xrpl/payment-readiness`), or for the single-hop cost of a trade on one pair (use `/v1/xrpl/slippage`, which compares the order book and the AMM).","operationId":"proGetXrplPaths","tags":["pro"],"parameters":[{"schema":{"type":"string","description":"Sending account.","example":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"},"required":true,"description":"Sending account.","name":"source","in":"query"},{"schema":{"type":"string","description":"Receiving account.","example":"rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B"},"required":true,"description":"Receiving account.","name":"destination","in":"query"},{"schema":{"type":"string","description":"Asset the destination receives.","example":"XRP"},"required":true,"description":"Asset the destination receives.","name":"asset","in":"query"},{"schema":{"type":"string","pattern":"^(?!0+(\\.0+)?$)[0-9]+(\\.[0-9]+)?$","description":"Amount the destination receives, in units of `asset`.","example":"1"},"required":true,"description":"Amount the destination receives, in units of `asset`.","name":"amount","in":"query"},{"schema":{"type":"string","description":"Asset of `send_max`.","example":"XRP"},"required":false,"description":"Asset of `send_max`.","name":"send_max_asset","in":"query"},{"schema":{"type":"string","pattern":"^(?!0+(\\.0+)?$)[0-9]+(\\.[0-9]+)?$","description":"Most the source may spend, in units of `send_max_asset`.","example":"2"},"required":false,"description":"Most the source may spend, in units of `send_max_asset`.","name":"send_max","in":"query"},{"schema":{"type":"string","description":"Assets the source may spend, comma-separated.","example":"XRP"},"required":false,"description":"Assets the source may spend, comma-separated.","name":"source_assets","in":"query"},{"schema":{"type":"string","description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","example":"eyJ4NDAyVmVyc2lvbiI6MiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19LCJwYXlsb2FkIjp7InRyYW5zYWN0aW9uIjoiPGJhc2U2NCBzaWduZWQgdHJhbnNhY3Rpb24+In19"},"required":false,"description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","name":"PAYMENT-SIGNATURE","in":"header"}],"responses":{"200":{"description":"Path alternatives for one payment","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42},"PAYMENT-RESPONSE":{"description":"Base64 of the JSON settlement result (`success`, `transaction`, `network`, `payer`). Present only on a 200 whose payment settled.","schema":{"type":"string"},"example":"eyJzdWNjZXNzIjp0cnVlLCJ0cmFuc2FjdGlvbiI6Ijx0cmFuc2FjdGlvbiBzaWduYXR1cmU+IiwibmV0d29yayI6InNvbGFuYTo1ZXlrdDRVc0Z2OFA4TkpkVFJFcFkxdnpxS3FaS3ZkcCIsInBheWVyIjoiPHBheWVyIHdhbGxldCBhZGRyZXNzPiJ9"}},"content":{"application/json":{"example":{"paths_may_be_non_optimal":true,"warnings":[],"alternatives":[{"source_amount":{"asset":"USD.rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","value":"1.394"},"paths_count":1,"paths":[[{"currency":"XRP"}]]}],"meta":{"ledger_index":100234566,"as_of":"2026-10-06T12:00:03.000Z","age_seconds":0,"cache":"miss","stale":false}},"schema":{"$ref":"#/components/schemas/PathsResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"402":{"description":"Payment Required (only while paid access is active; while payments are off the route returns free data): no payment, or a payment that was not accepted (`payment-required`), a settlement that failed (`payment-settlement-failed`) or a payment that was already used (`payment-already-used`). Nothing is served and nothing is kept for the caller; sign a new payment from the options in `PAYMENT-REQUIRED`.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 of the JSON `PaymentRequired` object (see the `PaymentRequired` schema) with the accepted payment options. Sent on 402 answers that can be fixed by paying.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentRequired"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJBIHZhbGlkIHBheW1lbnQgaXMgcmVxdWlyZWQuIiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19XX0="}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payment-required.md","title":"Payment Required","status":402,"detail":"A valid payment is required. Sign one of the accepted payment options and retry.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"403":{"description":"Forbidden: this payer cannot use paid access (`payer-blocked`).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payer-blocked.md","title":"Forbidden","status":403,"detail":"This payer cannot use paid access.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"404":{"description":"Not Found: the source account does not exist (a missing destination is a 200 with a warning).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/not-found.md","title":"Not Found","status":404,"detail":"The ledger has no such object (actNotFound).","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests: the per-IP rate limit was exceeded (`rate-limited`), or this payer reached its daily limit of failed settlements (`payer-limit-reached`, `Retry-After` is the time to 00:00 UTC).","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable: no upstream node could serve the request (`upstream-unavailable`), or paid access is temporarily unavailable (`payments-unavailable`, no `Retry-After`); nothing was charged. `Retry-After` is sent for `upstream-unavailable`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}}}},"/v1/solana/transfer-readiness":{"get":{"summary":"Will this Solana transfer succeed? A verdict for SOL or an SPL or Token-2022 token.","description":"Checks one planned transfer of SOL or of an SPL Token or Token-2022 token against finalized on-chain state and returns `ready`, every matched blocker and warning code, and the derived figures: the raw amount, whether the destination token account must be created and its rent, the Token-2022 transfer fee and the net amount. Blockers: insufficient_balance, insufficient_sol_for_fees (5,000 lamports for one signature, priority fees excluded, plus the account rent when the destination token account is missing, plus the amount for SOL), source_below_rent_exempt, destination_below_rent_exempt, source_frozen, destination_frozen, non_transferable, mint_paused. Warnings: destination_off_curve, memo_required. The rent-exempt minimum is read live and never hardcoded. Every figure is read at finalized commitment, so it can lag the tip of the chain by about 13 seconds; `meta.slot` is the context slot of the read. The amount is not part of any cache key, so the verdict is computed per request.\n\nWhen to use: Before building or signing a Solana transfer, to learn whether it will fail and what it will cost in rent and fees.\n\nWhen not to use: Not a simulation of the exact transaction (no priority fee, no program logic), not a token price or holder lookup, and not a way to read raw accounts.","operationId":"getSolanaTransferReadiness","tags":["Solana"],"x-ttl-seconds":4,"x-max-stale-seconds":30,"parameters":[{"schema":{"type":"string","description":"Sending wallet.","example":"83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri"},"required":true,"description":"Sending wallet.","name":"source","in":"query"},{"schema":{"type":"string","description":"Receiving wallet (not its token account).","example":"A1TMhSGzQxMr1TboBKtgixKz1sS6REASMxPo1qsyTSJd"},"required":true,"description":"Receiving wallet (not its token account).","name":"destination","in":"query"},{"schema":{"type":"string","description":"`SOL` for native SOL, or the mint address of an SPL Token or Token-2022 token.","example":"SOL"},"required":true,"description":"`SOL` for native SOL, or the mint address of an SPL Token or Token-2022 token.","name":"mint","in":"query"},{"schema":{"type":"string","pattern":"^(?!0+(\\.0+)?$)[0-9]+(\\.[0-9]+)?$","description":"Amount to send in UI units (SOL or tokens, not lamports or raw units).","example":"0.5"},"required":true,"description":"Amount to send in UI units (SOL or tokens, not lamports or raw units).","name":"amount","in":"query"}],"responses":{"200":{"description":"Transfer readiness verdict","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"example":{"ready":true,"blockers":[],"source":"83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri","destination":"A1TMhSGzQxMr1TboBKtgixKz1sS6REASMxPo1qsyTSJd","mint":"SOL","amount":"0.5","amount_raw":"500000000","decimals":9,"token_program":null,"warnings":[],"requires_ata_creation":false,"ata_creation_lamports":null,"transfer_fee":null,"net_amount":"500000000","meta":{"slot":456943158,"commitment":"finalized","as_of":"2026-10-14T12:00:03.000Z","age_seconds":0,"cache":"miss","stale":false}},"schema":{"$ref":"#/components/schemas/SolanaTransferReadinessResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"404":{"description":"Not Found: the `mint` has no account or is not an SPL Token or Token-2022 mint.","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/solana-mint-not-found.md","title":"Not Found","status":404,"detail":"The address is not an SPL Token or Token-2022 mint on Solana.","instance":"/v1/solana/token/x"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"Solana data is temporarily unavailable and no recent cached value exists.","instance":"/v1/solana/token/x"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}},"security":[]}},"/v1/solana/token/{mint}":{"get":{"summary":"Is this Solana token safe to hold or receive? A SAFE, WARN or DANGER verdict.","description":"Decodes an SPL Token or Token-2022 mint (including its extensions) and returns the token program, decimals, exact supply, the authorities, the extension names and a verdict with every matched reason code. DANGER: permanent_delegate, transfer_hook, pausable, default_account_frozen. WARN: mint_authority_set, freeze_authority_set, transfer_fee, mint_close_authority, unknown_extension. SAFE has no reasons. The verdict is the highest level matched. Every figure is read at finalized commitment, so it can lag the tip of the chain by about 13 seconds; `meta.slot` is the context slot of the read. It returns no holders, liquidity, price or metadata.\n\nWhen to use: Before accepting or swapping into an unfamiliar token, to see whether its mint can freeze, mint more, move or tax balances.\n\nWhen not to use: Not a price, liquidity or holder lookup and not an audit of the token's project; it reads only the mint account.","operationId":"getSolanaToken","tags":["Solana"],"x-ttl-seconds":60,"x-max-stale-seconds":600,"parameters":[{"schema":{"type":"string","description":"Mint address of the token.","example":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"},"required":true,"description":"Mint address of the token.","name":"mint","in":"path"}],"responses":{"200":{"description":"Token verdict","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"example":{"verdict":"WARN","reasons":["mint_authority_set","freeze_authority_set"],"mint":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","token_program":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","decimals":6,"supply":"9150000000000000","mint_authority":"BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG","freeze_authority":"7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar","extensions":[],"transfer_fee":null,"meta":{"slot":456943158,"commitment":"finalized","as_of":"2026-10-14T12:00:03.000Z","age_seconds":0,"cache":"miss","stale":false}},"schema":{"$ref":"#/components/schemas/SolanaTokenResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"404":{"description":"Not Found: the address has no account or is not an SPL Token or Token-2022 mint.","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/solana-mint-not-found.md","title":"Not Found","status":404,"detail":"The address is not an SPL Token or Token-2022 mint on Solana.","instance":"/v1/solana/token/x"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"Solana data is temporarily unavailable and no recent cached value exists.","instance":"/v1/solana/token/x"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}},"security":[]}},"/v1/solana/slot/latest":{"get":{"summary":"Latest finalized Solana slot and its block time.","description":"Returns the latest finalized slot and the time of its block (null when the node does not have it yet). Every figure is read at finalized commitment, so it can lag the tip of the chain by about 13 seconds; `meta.slot` is the context slot of the read.\n\nWhen to use: To check how fresh the finalized view of Solana is, or to anchor a read to a slot.\n\nWhen not to use: Not a tip-of-chain feed: it is finalized, not processed or confirmed, and it is cached for 2 seconds.","operationId":"getSolanaSlotLatest","tags":["Solana"],"x-ttl-seconds":2,"x-max-stale-seconds":30,"responses":{"200":{"description":"Latest finalized slot","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"example":{"slot":456943158,"block_time":"2026-10-14T11:59:51.000Z","meta":{"slot":456943158,"commitment":"finalized","as_of":"2026-10-14T12:00:03.000Z","age_seconds":0,"cache":"miss","stale":false}},"schema":{"$ref":"#/components/schemas/SolanaLatestSlotResponse"}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"Solana data is temporarily unavailable and no recent cached value exists.","instance":"/v1/solana/token/x"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}},"security":[]}},"/v1/solana/health":{"get":{"summary":"Whether Solana data is currently being served: latest probe status and finalized slot.","description":"Reports the result of the latest stored probe (`up`, `down`, `unknown`) with its finalized slot and latency, without calling Solana. The status is `unavailable` while Solana data is not configured on this service, and `unknown` before the first probe is stored; in both cases `slot` is null and `meta.slot` is 0 because there is no finalized slot to report. It does not name the upstream provider.\n\nWhen to use: Before relying on the Solana verdict endpoints, or to explain a 503 from them.\n\nWhen not to use: Not a measure of the Solana network itself, only of this service's access to it; use the latest-slot endpoint to see chain progress.","operationId":"getSolanaHealth","tags":["Solana"],"x-ttl-seconds":4,"x-max-stale-seconds":60,"responses":{"200":{"description":"Solana data status","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"example":{"status":"up","slot":456943158,"latency_ms":180,"last_probe_at":"2026-10-14T12:00:00.000Z","meta":{"slot":456943158,"commitment":"finalized","as_of":"2026-10-14T12:00:03.000Z","age_seconds":1,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/SolanaHealthResponse"}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"Solana data is temporarily unavailable and no recent cached value exists.","instance":"/v1/solana/token/x"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}},"security":[]}},"/v1/solana/health/history":{"get":{"summary":"Bucketed history of Solana probe results over 1 hour, 24 hours or 7 days.","description":"Aggregates the stored probes into time buckets with sample count, successful samples, uptime percentage and average latency. It returns whatever samples are stored, even while Solana data is not configured, and never names the upstream provider.\n\nWhen to use: To see whether Solana data was reliable over the last hour, day or week.\n\nWhen not to use: Not a record of chain activity; it describes this service's access to Solana.","operationId":"getSolanaHealthHistory","tags":["Solana"],"x-ttl-seconds":4,"x-max-stale-seconds":60,"parameters":[{"schema":{"type":"string","enum":["1h","24h","7d"],"default":"1h","description":"History window.","example":"24h"},"required":false,"description":"History window.","name":"window","in":"query"}],"responses":{"200":{"description":"Bucketed probe history","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/json":{"example":{"window":"1h","bucket_seconds":300,"buckets":[{"start":"2026-10-14T11:55:00.000Z","samples":2,"up":2,"uptime_pct":100,"avg_latency_ms":175}],"meta":{"slot":456943158,"commitment":"finalized","as_of":"2026-10-14T12:00:03.000Z","age_seconds":0,"cache":"miss","stale":false}},"schema":{"$ref":"#/components/schemas/SolanaHealthHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"Solana data is temporarily unavailable and no recent cached value exists.","instance":"/v1/solana/token/x"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}},"security":[]}},"/v1/pro/solana/transfer-readiness":{"get":{"summary":"Will this Solana transfer succeed? A verdict for SOL or an SPL or Token-2022 token.","description":"Checks one planned transfer of SOL or of an SPL Token or Token-2022 token against finalized on-chain state and returns `ready`, every matched blocker and warning code, and the derived figures: the raw amount, whether the destination token account must be created and its rent, the Token-2022 transfer fee and the net amount. Blockers: insufficient_balance, insufficient_sol_for_fees (5,000 lamports for one signature, priority fees excluded, plus the account rent when the destination token account is missing, plus the amount for SOL), source_below_rent_exempt, destination_below_rent_exempt, source_frozen, destination_frozen, non_transferable, mint_paused. Warnings: destination_off_curve, memo_required. The rent-exempt minimum is read live and never hardcoded. Every figure is read at finalized commitment, so it can lag the tip of the chain by about 13 seconds; `meta.slot` is the context slot of the read. The amount is not part of any cache key, so the verdict is computed per request.\n\nWhen to use: Before building or signing a Solana transfer, to learn whether it will fail and what it will cost in rent and fees.\n\nWhen not to use: Not a simulation of the exact transaction (no priority fee, no program logic), not a token price or holder lookup, and not a way to read raw accounts.","operationId":"proGetSolanaTransferReadiness","tags":["pro"],"x-ttl-seconds":4,"x-max-stale-seconds":30,"parameters":[{"schema":{"type":"string","description":"Sending wallet.","example":"83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri"},"required":true,"description":"Sending wallet.","name":"source","in":"query"},{"schema":{"type":"string","description":"Receiving wallet (not its token account).","example":"A1TMhSGzQxMr1TboBKtgixKz1sS6REASMxPo1qsyTSJd"},"required":true,"description":"Receiving wallet (not its token account).","name":"destination","in":"query"},{"schema":{"type":"string","description":"`SOL` for native SOL, or the mint address of an SPL Token or Token-2022 token.","example":"SOL"},"required":true,"description":"`SOL` for native SOL, or the mint address of an SPL Token or Token-2022 token.","name":"mint","in":"query"},{"schema":{"type":"string","pattern":"^(?!0+(\\.0+)?$)[0-9]+(\\.[0-9]+)?$","description":"Amount to send in UI units (SOL or tokens, not lamports or raw units).","example":"0.5"},"required":true,"description":"Amount to send in UI units (SOL or tokens, not lamports or raw units).","name":"amount","in":"query"},{"schema":{"type":"string","description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","example":"eyJ4NDAyVmVyc2lvbiI6MiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19LCJwYXlsb2FkIjp7InRyYW5zYWN0aW9uIjoiPGJhc2U2NCBzaWduZWQgdHJhbnNhY3Rpb24+In19"},"required":false,"description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","name":"PAYMENT-SIGNATURE","in":"header"}],"responses":{"200":{"description":"Transfer readiness verdict","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42},"PAYMENT-RESPONSE":{"description":"Base64 of the JSON settlement result (`success`, `transaction`, `network`, `payer`). Present only on a 200 whose payment settled.","schema":{"type":"string"},"example":"eyJzdWNjZXNzIjp0cnVlLCJ0cmFuc2FjdGlvbiI6Ijx0cmFuc2FjdGlvbiBzaWduYXR1cmU+IiwibmV0d29yayI6InNvbGFuYTo1ZXlrdDRVc0Z2OFA4TkpkVFJFcFkxdnpxS3FaS3ZkcCIsInBheWVyIjoiPHBheWVyIHdhbGxldCBhZGRyZXNzPiJ9"}},"content":{"application/json":{"example":{"ready":true,"blockers":[],"source":"83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri","destination":"A1TMhSGzQxMr1TboBKtgixKz1sS6REASMxPo1qsyTSJd","mint":"SOL","amount":"0.5","amount_raw":"500000000","decimals":9,"token_program":null,"warnings":[],"requires_ata_creation":false,"ata_creation_lamports":null,"transfer_fee":null,"net_amount":"500000000","meta":{"slot":456943158,"commitment":"finalized","as_of":"2026-10-14T12:00:03.000Z","age_seconds":0,"cache":"miss","stale":false}},"schema":{"$ref":"#/components/schemas/SolanaTransferReadinessResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"402":{"description":"Payment Required (only while paid access is active; while payments are off the route returns free data): no payment, or a payment that was not accepted (`payment-required`), a settlement that failed (`payment-settlement-failed`) or a payment that was already used (`payment-already-used`). Nothing is served and nothing is kept for the caller; sign a new payment from the options in `PAYMENT-REQUIRED`.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 of the JSON `PaymentRequired` object (see the `PaymentRequired` schema) with the accepted payment options. Sent on 402 answers that can be fixed by paying.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentRequired"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJBIHZhbGlkIHBheW1lbnQgaXMgcmVxdWlyZWQuIiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19XX0="}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payment-required.md","title":"Payment Required","status":402,"detail":"A valid payment is required. Sign one of the accepted payment options and retry.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"403":{"description":"Forbidden: this payer cannot use paid access (`payer-blocked`).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payer-blocked.md","title":"Forbidden","status":403,"detail":"This payer cannot use paid access.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"404":{"description":"Not Found: the `mint` has no account or is not an SPL Token or Token-2022 mint.","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/solana-mint-not-found.md","title":"Not Found","status":404,"detail":"The address is not an SPL Token or Token-2022 mint on Solana.","instance":"/v1/solana/token/x"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests: the per-IP rate limit was exceeded (`rate-limited`), or this payer reached its daily limit of failed settlements (`payer-limit-reached`, `Retry-After` is the time to 00:00 UTC).","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable: no upstream node could serve the request (`upstream-unavailable`), or paid access is temporarily unavailable (`payments-unavailable`, no `Retry-After`); nothing was charged. `Retry-After` is sent for `upstream-unavailable`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}}}},"/v1/pro/solana/token/{mint}":{"get":{"summary":"Is this Solana token safe to hold or receive? A SAFE, WARN or DANGER verdict.","description":"Decodes an SPL Token or Token-2022 mint (including its extensions) and returns the token program, decimals, exact supply, the authorities, the extension names and a verdict with every matched reason code. DANGER: permanent_delegate, transfer_hook, pausable, default_account_frozen. WARN: mint_authority_set, freeze_authority_set, transfer_fee, mint_close_authority, unknown_extension. SAFE has no reasons. The verdict is the highest level matched. Every figure is read at finalized commitment, so it can lag the tip of the chain by about 13 seconds; `meta.slot` is the context slot of the read. It returns no holders, liquidity, price or metadata.\n\nWhen to use: Before accepting or swapping into an unfamiliar token, to see whether its mint can freeze, mint more, move or tax balances.\n\nWhen not to use: Not a price, liquidity or holder lookup and not an audit of the token's project; it reads only the mint account.","operationId":"proGetSolanaToken","tags":["pro"],"x-ttl-seconds":60,"x-max-stale-seconds":600,"parameters":[{"schema":{"type":"string","description":"Mint address of the token.","example":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"},"required":true,"description":"Mint address of the token.","name":"mint","in":"path"},{"schema":{"type":"string","description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","example":"eyJ4NDAyVmVyc2lvbiI6MiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19LCJwYXlsb2FkIjp7InRyYW5zYWN0aW9uIjoiPGJhc2U2NCBzaWduZWQgdHJhbnNhY3Rpb24+In19"},"required":false,"description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","name":"PAYMENT-SIGNATURE","in":"header"}],"responses":{"200":{"description":"Token verdict","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42},"PAYMENT-RESPONSE":{"description":"Base64 of the JSON settlement result (`success`, `transaction`, `network`, `payer`). Present only on a 200 whose payment settled.","schema":{"type":"string"},"example":"eyJzdWNjZXNzIjp0cnVlLCJ0cmFuc2FjdGlvbiI6Ijx0cmFuc2FjdGlvbiBzaWduYXR1cmU+IiwibmV0d29yayI6InNvbGFuYTo1ZXlrdDRVc0Z2OFA4TkpkVFJFcFkxdnpxS3FaS3ZkcCIsInBheWVyIjoiPHBheWVyIHdhbGxldCBhZGRyZXNzPiJ9"}},"content":{"application/json":{"example":{"verdict":"WARN","reasons":["mint_authority_set","freeze_authority_set"],"mint":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","token_program":"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","decimals":6,"supply":"9150000000000000","mint_authority":"BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG","freeze_authority":"7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar","extensions":[],"transfer_fee":null,"meta":{"slot":456943158,"commitment":"finalized","as_of":"2026-10-14T12:00:03.000Z","age_seconds":0,"cache":"miss","stale":false}},"schema":{"$ref":"#/components/schemas/SolanaTokenResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"402":{"description":"Payment Required (only while paid access is active; while payments are off the route returns free data): no payment, or a payment that was not accepted (`payment-required`), a settlement that failed (`payment-settlement-failed`) or a payment that was already used (`payment-already-used`). Nothing is served and nothing is kept for the caller; sign a new payment from the options in `PAYMENT-REQUIRED`.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 of the JSON `PaymentRequired` object (see the `PaymentRequired` schema) with the accepted payment options. Sent on 402 answers that can be fixed by paying.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentRequired"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJBIHZhbGlkIHBheW1lbnQgaXMgcmVxdWlyZWQuIiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19XX0="}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payment-required.md","title":"Payment Required","status":402,"detail":"A valid payment is required. Sign one of the accepted payment options and retry.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"403":{"description":"Forbidden: this payer cannot use paid access (`payer-blocked`).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payer-blocked.md","title":"Forbidden","status":403,"detail":"This payer cannot use paid access.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"404":{"description":"Not Found: the address has no account or is not an SPL Token or Token-2022 mint.","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/solana-mint-not-found.md","title":"Not Found","status":404,"detail":"The address is not an SPL Token or Token-2022 mint on Solana.","instance":"/v1/solana/token/x"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests: the per-IP rate limit was exceeded (`rate-limited`), or this payer reached its daily limit of failed settlements (`payer-limit-reached`, `Retry-After` is the time to 00:00 UTC).","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable: no upstream node could serve the request (`upstream-unavailable`), or paid access is temporarily unavailable (`payments-unavailable`, no `Retry-After`); nothing was charged. `Retry-After` is sent for `upstream-unavailable`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}}}},"/v1/pro/solana/slot/latest":{"get":{"summary":"Latest finalized Solana slot and its block time.","description":"Returns the latest finalized slot and the time of its block (null when the node does not have it yet). Every figure is read at finalized commitment, so it can lag the tip of the chain by about 13 seconds; `meta.slot` is the context slot of the read.\n\nWhen to use: To check how fresh the finalized view of Solana is, or to anchor a read to a slot.\n\nWhen not to use: Not a tip-of-chain feed: it is finalized, not processed or confirmed, and it is cached for 2 seconds.","operationId":"proGetSolanaSlotLatest","tags":["pro"],"x-ttl-seconds":2,"x-max-stale-seconds":30,"parameters":[{"schema":{"type":"string","description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","example":"eyJ4NDAyVmVyc2lvbiI6MiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19LCJwYXlsb2FkIjp7InRyYW5zYWN0aW9uIjoiPGJhc2U2NCBzaWduZWQgdHJhbnNhY3Rpb24+In19"},"required":false,"description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","name":"PAYMENT-SIGNATURE","in":"header"}],"responses":{"200":{"description":"Latest finalized slot","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42},"PAYMENT-RESPONSE":{"description":"Base64 of the JSON settlement result (`success`, `transaction`, `network`, `payer`). Present only on a 200 whose payment settled.","schema":{"type":"string"},"example":"eyJzdWNjZXNzIjp0cnVlLCJ0cmFuc2FjdGlvbiI6Ijx0cmFuc2FjdGlvbiBzaWduYXR1cmU+IiwibmV0d29yayI6InNvbGFuYTo1ZXlrdDRVc0Z2OFA4TkpkVFJFcFkxdnpxS3FaS3ZkcCIsInBheWVyIjoiPHBheWVyIHdhbGxldCBhZGRyZXNzPiJ9"}},"content":{"application/json":{"example":{"slot":456943158,"block_time":"2026-10-14T11:59:51.000Z","meta":{"slot":456943158,"commitment":"finalized","as_of":"2026-10-14T12:00:03.000Z","age_seconds":0,"cache":"miss","stale":false}},"schema":{"$ref":"#/components/schemas/SolanaLatestSlotResponse"}}}},"402":{"description":"Payment Required (only while paid access is active; while payments are off the route returns free data): no payment, or a payment that was not accepted (`payment-required`), a settlement that failed (`payment-settlement-failed`) or a payment that was already used (`payment-already-used`). Nothing is served and nothing is kept for the caller; sign a new payment from the options in `PAYMENT-REQUIRED`.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 of the JSON `PaymentRequired` object (see the `PaymentRequired` schema) with the accepted payment options. Sent on 402 answers that can be fixed by paying.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentRequired"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJBIHZhbGlkIHBheW1lbnQgaXMgcmVxdWlyZWQuIiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19XX0="}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payment-required.md","title":"Payment Required","status":402,"detail":"A valid payment is required. Sign one of the accepted payment options and retry.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"403":{"description":"Forbidden: this payer cannot use paid access (`payer-blocked`).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payer-blocked.md","title":"Forbidden","status":403,"detail":"This payer cannot use paid access.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests: the per-IP rate limit was exceeded (`rate-limited`), or this payer reached its daily limit of failed settlements (`payer-limit-reached`, `Retry-After` is the time to 00:00 UTC).","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable: no upstream node could serve the request (`upstream-unavailable`), or paid access is temporarily unavailable (`payments-unavailable`, no `Retry-After`); nothing was charged. `Retry-After` is sent for `upstream-unavailable`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}}}},"/v1/pro/solana/health":{"get":{"summary":"Whether Solana data is currently being served: latest probe status and finalized slot.","description":"Reports the result of the latest stored probe (`up`, `down`, `unknown`) with its finalized slot and latency, without calling Solana. The status is `unavailable` while Solana data is not configured on this service, and `unknown` before the first probe is stored; in both cases `slot` is null and `meta.slot` is 0 because there is no finalized slot to report. It does not name the upstream provider.\n\nWhen to use: Before relying on the Solana verdict endpoints, or to explain a 503 from them.\n\nWhen not to use: Not a measure of the Solana network itself, only of this service's access to it; use the latest-slot endpoint to see chain progress.","operationId":"proGetSolanaHealth","tags":["pro"],"x-ttl-seconds":4,"x-max-stale-seconds":60,"parameters":[{"schema":{"type":"string","description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","example":"eyJ4NDAyVmVyc2lvbiI6MiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19LCJwYXlsb2FkIjp7InRyYW5zYWN0aW9uIjoiPGJhc2U2NCBzaWduZWQgdHJhbnNhY3Rpb24+In19"},"required":false,"description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","name":"PAYMENT-SIGNATURE","in":"header"}],"responses":{"200":{"description":"Solana data status","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42},"PAYMENT-RESPONSE":{"description":"Base64 of the JSON settlement result (`success`, `transaction`, `network`, `payer`). Present only on a 200 whose payment settled.","schema":{"type":"string"},"example":"eyJzdWNjZXNzIjp0cnVlLCJ0cmFuc2FjdGlvbiI6Ijx0cmFuc2FjdGlvbiBzaWduYXR1cmU+IiwibmV0d29yayI6InNvbGFuYTo1ZXlrdDRVc0Z2OFA4TkpkVFJFcFkxdnpxS3FaS3ZkcCIsInBheWVyIjoiPHBheWVyIHdhbGxldCBhZGRyZXNzPiJ9"}},"content":{"application/json":{"example":{"status":"up","slot":456943158,"latency_ms":180,"last_probe_at":"2026-10-14T12:00:00.000Z","meta":{"slot":456943158,"commitment":"finalized","as_of":"2026-10-14T12:00:03.000Z","age_seconds":1,"cache":"hit","stale":false}},"schema":{"$ref":"#/components/schemas/SolanaHealthResponse"}}}},"402":{"description":"Payment Required (only while paid access is active; while payments are off the route returns free data): no payment, or a payment that was not accepted (`payment-required`), a settlement that failed (`payment-settlement-failed`) or a payment that was already used (`payment-already-used`). Nothing is served and nothing is kept for the caller; sign a new payment from the options in `PAYMENT-REQUIRED`.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 of the JSON `PaymentRequired` object (see the `PaymentRequired` schema) with the accepted payment options. Sent on 402 answers that can be fixed by paying.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentRequired"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJBIHZhbGlkIHBheW1lbnQgaXMgcmVxdWlyZWQuIiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19XX0="}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payment-required.md","title":"Payment Required","status":402,"detail":"A valid payment is required. Sign one of the accepted payment options and retry.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"403":{"description":"Forbidden: this payer cannot use paid access (`payer-blocked`).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payer-blocked.md","title":"Forbidden","status":403,"detail":"This payer cannot use paid access.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests: the per-IP rate limit was exceeded (`rate-limited`), or this payer reached its daily limit of failed settlements (`payer-limit-reached`, `Retry-After` is the time to 00:00 UTC).","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable: no upstream node could serve the request (`upstream-unavailable`), or paid access is temporarily unavailable (`payments-unavailable`, no `Retry-After`); nothing was charged. `Retry-After` is sent for `upstream-unavailable`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}}}},"/v1/pro/solana/health/history":{"get":{"summary":"Bucketed history of Solana probe results over 1 hour, 24 hours or 7 days.","description":"Aggregates the stored probes into time buckets with sample count, successful samples, uptime percentage and average latency. It returns whatever samples are stored, even while Solana data is not configured, and never names the upstream provider.\n\nWhen to use: To see whether Solana data was reliable over the last hour, day or week.\n\nWhen not to use: Not a record of chain activity; it describes this service's access to Solana.","operationId":"proGetSolanaHealthHistory","tags":["pro"],"x-ttl-seconds":4,"x-max-stale-seconds":60,"parameters":[{"schema":{"type":"string","enum":["1h","24h","7d"],"default":"1h","description":"History window.","example":"24h"},"required":false,"description":"History window.","name":"window","in":"query"},{"schema":{"type":"string","description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","example":"eyJ4NDAyVmVyc2lvbiI6MiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19LCJwYXlsb2FkIjp7InRyYW5zYWN0aW9uIjoiPGJhc2U2NCBzaWduZWQgdHJhbnNhY3Rpb24+In19"},"required":false,"description":"Base64 of the JSON x402 v2 payment payload, at most 8192 bytes. Without it the route answers 402 with the accepted payment options, but only while paid access is active; while payments are off the route returns free data with or without the header. One payment covers exactly one call.","name":"PAYMENT-SIGNATURE","in":"header"}],"responses":{"200":{"description":"Bucketed probe history","headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42},"PAYMENT-RESPONSE":{"description":"Base64 of the JSON settlement result (`success`, `transaction`, `network`, `payer`). Present only on a 200 whose payment settled.","schema":{"type":"string"},"example":"eyJzdWNjZXNzIjp0cnVlLCJ0cmFuc2FjdGlvbiI6Ijx0cmFuc2FjdGlvbiBzaWduYXR1cmU+IiwibmV0d29yayI6InNvbGFuYTo1ZXlrdDRVc0Z2OFA4TkpkVFJFcFkxdnpxS3FaS3ZkcCIsInBheWVyIjoiPHBheWVyIHdhbGxldCBhZGRyZXNzPiJ9"}},"content":{"application/json":{"example":{"window":"1h","bucket_seconds":300,"buckets":[{"start":"2026-10-14T11:55:00.000Z","samples":2,"up":2,"uptime_pct":100,"avg_latency_ms":175}],"meta":{"slot":456943158,"commitment":"finalized","as_of":"2026-10-14T12:00:03.000Z","age_seconds":0,"cache":"miss","stale":false}},"schema":{"$ref":"#/components/schemas/SolanaHealthHistoryResponse"}}}},"400":{"description":"Bad Request","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/invalid-parameters.md","title":"Bad Request","status":400,"detail":"One or more parameters are invalid.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"402":{"description":"Payment Required (only while paid access is active; while payments are off the route returns free data): no payment, or a payment that was not accepted (`payment-required`), a settlement that failed (`payment-settlement-failed`) or a payment that was already used (`payment-already-used`). Nothing is served and nothing is kept for the caller; sign a new payment from the options in `PAYMENT-REQUIRED`.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 of the JSON `PaymentRequired` object (see the `PaymentRequired` schema) with the accepted payment options. Sent on 402 answers that can be fixed by paying.","schema":{"type":"string","contentEncoding":"base64","contentMediaType":"application/json","contentSchema":{"$ref":"#/components/schemas/PaymentRequired"}},"example":"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJBIHZhbGlkIHBheW1lbnQgaXMgcmVxdWlyZWQuIiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9hcGkuY3JpcHRvbmxhYnMuY29tL3YxL3Byby94cnBsL2ZlZSJ9LCJhY2NlcHRzIjpbeyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhc3NldCI6Ikh6d3FiS1p3OEh4TU42YkYyeUZaTnJodDNjMmlYWHpwS2NGdTd1QkVES3RyIiwiYW1vdW50IjoiNTAwMCIsInBheVRvIjoiPHJlY2lwaWVudCB0b2tlbiBvd25lciBhZGRyZXNzPiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwicmVzb3VyY2UiOiJodHRwczovL2FwaS5jcmlwdG9ubGFicy5jb20vdjEvcHJvL3hycGwvZmVlIiwiZXh0cmEiOnsiZmVlUGF5ZXIiOiI8ZmFjaWxpdGF0b3IgZmVlIHBheWVyIGFkZHJlc3M+In19XX0="}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payment-required.md","title":"Payment Required","status":402,"detail":"A valid payment is required. Sign one of the accepted payment options and retry.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"403":{"description":"Forbidden: this payer cannot use paid access (`payer-blocked`).","content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/payer-blocked.md","title":"Forbidden","status":403,"detail":"This payer cannot use paid access.","instance":"/v1/pro/xrpl/fee"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"429":{"description":"Too Many Requests: the per-IP rate limit was exceeded (`rate-limited`), or this payer reached its daily limit of failed settlements (`payer-limit-reached`, `Retry-After` is the time to 00:00 UTC).","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5},"RateLimit-Limit":{"description":"Requests allowed per window for this IP and tier (advisory).","schema":{"type":"integer"},"example":120},"RateLimit-Remaining":{"description":"Requests left in the current window (advisory).","schema":{"type":"integer"},"example":119},"RateLimit-Reset":{"description":"Seconds until the current window resets (advisory).","schema":{"type":"integer"},"example":42}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/rate-limited.md","title":"Too Many Requests","status":429,"detail":"Rate limit exceeded for this IP. Retry after the indicated delay.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"503":{"description":"Service Unavailable: no upstream node could serve the request (`upstream-unavailable`), or paid access is temporarily unavailable (`payments-unavailable`, no `Retry-After`); nothing was charged. `Retry-After` is sent for `upstream-unavailable`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"},"example":5}},"content":{"application/problem+json":{"example":{"type":"https://api.criptonlabs.com/errors/upstream-unavailable.md","title":"Service Unavailable","status":503,"detail":"No upstream XRPL node could serve this request and no recent cached value exists.","instance":"/v1/example"},"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}},"default":{"description":"RFC 9457 problem details","content":{"application/problem+json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status","detail","instance"],"additionalProperties":{}}}}}}}}},"webhooks":{}}