{"openapi":"3.1.0","info":{"title":"FlareWatch Public API","version":"1.0.0","description":"Read-only REST access to FlareWatch's Flare & Songbird analytics: validator scores, FTSO data-provider metrics, network stats, and prices. No API key required (rate-limited). For richer, tool-native access use the MCP server at /api/mcp (npm @flarewatch/mcp).\n\n**Versioning:** this is API v1. The unversioned paths below serve v1 and are stable. A breaking change ships under a new major version, never in place. Deprecations are announced at least 90 days ahead and signaled on responses with the standard `Deprecation` and `Sunset` headers (RFC 8594) pointing at the migration notes on the developer portal, so an agent integrating today will never be broken without warning.\n\n**Rate limits:** every response carries the IETF-draft `RateLimit-Limit`, `RateLimit-Remaining`, and `RateLimit-Reset` (seconds) headers so you can self-throttle; a 429 additionally returns `Retry-After`. See the developer portal at /developers.","contact":{"name":"FlareWatch","email":"hello@flarewatch.io","url":"https://www.flarewatch.io/en/support"},"license":{"name":"Proprietary","url":"https://www.flarewatch.io/en/privacy"}},"x-api-versioning":{"current":"v1","scheme":"Unversioned URLs serve v1; breaking changes ship under a new major version.","deprecationPolicy":"Deprecations announced >=90 days ahead via the Deprecation + Sunset response headers (RFC 8594); migration notes at /developers."},"servers":[{"url":"https://www.flarewatch.io","description":"Production (v1)"}],"externalDocs":{"description":"Developer portal","url":"https://www.flarewatch.io/developers"},"paths":{"/api/pay/quote":{"get":{"operationId":"getPaymentTerms","summary":"Machine-readable payment terms (agentic payments)","description":"How agents pay for FlareWatch capacity and paid endpoints. Two rails: deposit USDT0 on Flare (sending wallet is credited never-expiring compute units) and per-request x402 via EIP-3009 ReceiveWithAuthorization sent in a PAYMENT-SIGNATURE (x402 v2) or X-PAYMENT (v1) header. Unpaid requests answer 402 with x402Version and a root-level accepts[] in the body, plus v2 requirements base64-encoded in the PAYMENT-REQUIRED header, so standard x402 client libraries work without adaptation. Also served at /.well-known/x402.","tags":["payments"],"responses":{"200":{"description":"Payment terms: accepts[] (schemes), paid_endpoints[] catalog, balance_url.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentTerms"},"example":{"version":1,"provisioned":true,"paid_endpoints":[{"path":"/api/paid/wallet-intelligence","price_micro_usd":10000,"description":"Classified activity summary for any Flare wallet: reward/DeFi/transfer breakdown, income totals, DeFi protocols touched, FTSO delegations."}],"policy":{"refunds":"none","finality":"All payments are final. Test free first: POST /api/pay/verify.","credits_expiry":"never"},"balance_url":"https://www.flarewatch.io/api/rpc/balance","docs_url":"https://www.flarewatch.io/llms.txt"}}}},"429":{"description":"Rate limited — structured error + RateLimit headers."}}}},"/api/pay/verify":{"post":{"operationId":"verifyPaymentDryRun","summary":"FREE dry-run verification of an x402 payment payload","description":"Validates the authorization that would go base64-encoded into PAYMENT-SIGNATURE or X-PAYMENT (signature, window, amount policy) WITHOUT burning the nonce or settling. Integration-test your signing code at zero cost; the response states exactly what the paywall would decide and why.","tags":["payments"],"requestBody":{"required":true,"description":"The authorization you would sign, as flat JSON (not base64, not nested). Optional `path` selects which paid endpoint's price to verify against; the default is the only paid endpoint.","content":{"application/json":{"schema":{"type":"object","required":["from","to","value","validAfter","validBefore","nonce","signature"],"properties":{"from":{"type":"string"},"to":{"type":"string"},"value":{"type":"string","description":"Raw units, 6 decimals. Must equal the price exactly."},"validAfter":{"type":"integer"},"validBefore":{"type":"integer"},"nonce":{"type":"string","description":"Random 32 bytes, hex."},"signature":{"type":"string","description":"65-byte r||s||v hex."},"path":{"type":"string"}}},"example":{"from":"0x1111111111111111111111111111111111111111","to":"0xc34b4fcb184dfef47141f764e79d0e15de15acbc","value":"10000","validAfter":0,"validBefore":1788000000,"nonce":"0xabababababababababababababababababababababababababababababababab","signature":"0xcdcd…65-bytes…1b"}}}},"responses":{"200":{"description":"The verdict the paywall would reach. Note 200 means the check RAN, not that the payment is valid — read `valid`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyResult"},"examples":{"rejected":{"summary":"A payload the paywall would refuse, and why","value":{"valid":false,"verified_against":{"path":"/api/paid/wallet-intelligence","price_micro_usd":10000},"reason":"payer balance below authorized value","exact_rail":"ok","note":"Dry run only — nonce NOT burned; the same payload in X-PAYMENT on a paid endpoint will spend."}},"accepted":{"summary":"A payload that would be accepted","value":{"valid":true,"verified_against":{"path":"/api/paid/wallet-intelligence","price_micro_usd":10000},"from":"0x1111111111111111111111111111111111111111","value_raw":"10000","exact_rail":"ok","note":"Dry run only — nonce NOT burned; the same payload in X-PAYMENT on a paid endpoint will spend."}}}}}},"400":{"description":"Malformed body."},"429":{"description":"Rate limited — structured error + RateLimit headers."}}}},"/api/paid/wallet-intelligence":{"get":{"operationId":"getWalletIntelligence","summary":"PAID $0.01 — classified activity summary for any Flare wallet","description":"The FlareWatch classification engine as a keyless machine API: activity breakdown by category/type, income event totals, DeFi protocols touched, live FTSO delegations. Pay per-request via PAYMENT-SIGNATURE / X-PAYMENT (x402 exact) or spend deposited credits via X-Api-Key. Unpaid requests receive 402 with spec-shaped terms regardless of query params, so discovery never requires guessing valid arguments.","tags":["payments","paid"],"parameters":[{"name":"address","in":"query","required":true,"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"description":"Flare C-chain wallet address."}],"responses":{"200":{"description":"Classified wallet summary. Successful responses carry a PAYMENT-RESPONSE header reporting what became of the authorization.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletIntelligence"},"example":{"address":"0x973b0c5b0b0d1b9f0a8a7c1d2e3f4a5b6c7d8e9f","paid_via":"exact","classified_events":412,"by_category":{"reward":168,"defi":97,"transfer":147},"by_type":{"ftso_delegation_reward":121,"staking_reward":47,"liquidity_add":34,"liquidity_remove":29,"swap":34,"transfer_in":71,"transfer_out":76},"income":{"events":168,"flr_denominated_total":4821.663},"defi_protocols":["Enosys","Mystic (CDP)","SparkDEX"],"ftso_delegations":[{"provider":"0x0000000000000000000000000000000000000001","name":"Example Provider A","percent":50},{"provider":"0x0000000000000000000000000000000000000002","name":"Example Provider B","percent":50}],"methodology":"https://flarewatch.io/llms.txt"}}}},"400":{"description":"Bad address — only reachable once payment has been presented; unpaid callers get 402 instead."},"402":{"description":"Payment required. Returned for ANY unpaid request, including one with missing or malformed query params, so terms are discoverable without first guessing valid arguments.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"},"example":{"x402Version":1,"error":"Payment required.","accepts":[{"scheme":"exact","network":"base","maxAmountRequired":"10000","resource":"https://www.flarewatch.io/api/paid/wallet-intelligence","description":"Classified activity summary for any Flare wallet: reward/DeFi/transfer breakdown, income totals, DeFi protocols touched, FTSO delegations.","mimeType":"application/json","payTo":"0xa728d6674239f68c767f36484d1a37fa79fa7af7","maxTimeoutSeconds":3600,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"name":"USD Coin","version":"2","chainId":8453,"decimals":6,"symbol":"USDC"}}]}}}},"429":{"description":"Rate limited — structured error + RateLimit headers."}}}},"/api/paid/tax-reconciliation":{"get":{"operationId":"getTaxReconciliation","summary":"PAID $0.50 — provenanced tax reconciliation for one wallet and tax year","description":"A per-event ledger where every line states the RULE that classified it, the evidence that rule matched, and the dated RATE that valued it. Each event is valued at the published rate for its OWN date, not a single rate for the year. The fiat total is WITHHELD rather than estimated if any income event cannot be honestly valued — token amounts, which are chain facts, are returned regardless. A reconstruction with its workings shown; not tax advice and not a determination.","tags":["payments","paid"],"parameters":[{"name":"address","in":"query","required":true,"schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"description":"Flare C-chain wallet address."},{"name":"year","in":"query","required":true,"schema":{"type":"integer","minimum":2023},"description":"Tax year. Completed years sit inside the published rate coverage; see rate_coverage on the response."}],"responses":{"200":{"description":"Reconciliation document plus the full per-event ledger.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaxReconciliation"},"example":{"tax_year":2025,"paid_via":"exact","document":{"wallet":"0x973b899fe1422efddebe1d54e9a6487a70966ac5","period":{"from":"2025-01-10","to":"2025-12-20"},"headline":{"kind":"stated","value":42.09,"currency":"USD","basis":"5 of 5 income events, each valued at the rate for its own date. Classified under ruleset 1.2.0; every line states the rule that produced it.","qualifications":[]},"amounts":{"WFLR":2237},"statement":{"whatThisIsNot":"Not tax advice, not a filing, and not a determination of how anything should be treated.","rulesetVersion":"1.2.0"},"gaps":[]},"lines":[{"date":"2025-06-15","txHash":"0x…","tokenSymbol":"WFLR","amount":455,"category":"ftso_reward","isIncome":true,"ruleId":"R19-zerovalue-reward-claim","ruleDescription":"A zero-value token claim whose parent transaction called an FTSO reward contract, or used a known claim selector.","ruleEvidence":"parent tx to=0xc8f55c…, selector=0x8e33aba5","valuation":{"value":8.2932,"currency":"USD","rate":0.01822684,"rateDate":"2025-06-15","source":"historical-table","isPlaceholder":false}}],"rate_coverage":{"firstDate":"2023-02-28","lastDate":"2026-08-30","days":1280}}}}},"400":{"description":"Bad address or year — only reachable once payment has been presented."},"402":{"description":"Payment required — spec-shaped terms, returned regardless of query params.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"},"example":{"x402Version":1,"error":"Payment required.","accepts":[]}}}},"429":{"description":"Rate limited — structured error + RateLimit headers."}}}},"/api/stats":{"get":{"operationId":"getPlatformStats","summary":"Platform stats","description":"Aggregate FlareWatch coverage counters — wallets tracked, FLR rewards tracked, validators scored, DeFi positions and protocols supported.","tags":["Network"],"responses":{"200":{"description":"Platform coverage counters.","content":{"application/json":{"schema":{"type":"object","properties":{"walletsTracked":{"type":"integer"},"flrRewardsTracked":{"type":"number"},"validatorsScored":{"type":"integer"},"defiPositionsTracked":{"type":"integer"},"defiProtocolsSupported":{"type":"integer"}},"additionalProperties":true},"example":{"walletsTracked":238,"flrRewardsTracked":6526508,"validatorsScored":179,"defiPositionsTracked":137,"defiProtocolsSupported":11}}}},"400":{"description":"Invalid request (e.g. malformed NodeID).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Back off and retry, or use the MCP server for heavy use.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data cache temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/cache/prices":{"get":{"operationId":"getPrices","summary":"FLR / SGB prices","description":"Latest FLR and SGB prices (FTSO-primary, CoinGecko fallback) plus multi-currency and market-cap data. Cached ~60s.","tags":["Prices"],"responses":{"200":{"description":"Price cache payload.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceCache"},"example":{"flr":{"usd":0.00651672,"gbp":0.0048164682884273,"eur":0.005627027873027107,"usd_market_cap":567839960.4478356,"usd_24h_change":3.616785273527259,"market_cap_rank":96},"xrp":{"usd":1.414945,"gbp":1.0457772809586365,"eur":1.2217703006727831},"songbird":{"usd":0.0041,"usd_market_cap":0,"usd_24h_change":0},"fx":{"gbp":0.739,"eur":0.8634,"aud":1.3968,"jpy":160.15,"cad":1.3908},"priceSource":{"flr":"ftso","xrp":"ftso","sgb":"ftso"},"degraded":false,"updatedAt":1788000000000}}}},"400":{"description":"Invalid request (e.g. malformed NodeID).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Back off and retry, or use the MCP server for heavy use.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data cache temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/cache/ftso-providers":{"get":{"operationId":"listFtsoProvidersFlare","summary":"FTSO providers (Flare)","description":"Scored FTSO data providers on Flare — fee, reward rate, accuracy (primary/secondary band), vote power, delegator count, and the FlareWatch composite score. `updatedAt` is epoch ms.","tags":["FTSO"],"responses":{"200":{"description":"Scored Flare FTSO providers.","content":{"application/json":{"schema":{"type":"object","properties":{"providers":{"type":"array","items":{"$ref":"#/components/schemas/FtsoProvider"}},"providerCount":{"type":"integer"},"updatedAt":{"type":"integer","description":"Epoch milliseconds."}},"required":["providers","providerCount","updatedAt"]},"example":{"providers":[{"name":"FlareBase","entityAddress":"0x8372deecfe2a7b700031ab2b455df6b02b9c0cc1","delegationAddress":"0xac2884a4479bf7c21aa0462d52bc9c76c3a9a3dd","score":88,"isV2":true,"isAnomaly":false,"rewardRate":0.01353386195778169,"annualRatePct":1.4113884613115193,"delegationFee":20,"votePower":268391079.1390049,"delegatorCount":537,"accuracy":99.73,"accuracyPrimary":81.94,"distributed":451645.82410115947}],"providerCount":1,"updatedAt":1788000000000}}}},"400":{"description":"Invalid request (e.g. malformed NodeID).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Back off and retry, or use the MCP server for heavy use.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data cache temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/cache/sgb-ftso-providers":{"get":{"operationId":"listFtsoProvidersSongbird","summary":"FTSO providers (Songbird)","description":"Scored FTSO data providers on Songbird. Same shape as the Flare endpoint.","tags":["FTSO"],"responses":{"200":{"description":"Scored Songbird FTSO providers.","content":{"application/json":{"schema":{"type":"object","properties":{"providers":{"type":"array","items":{"$ref":"#/components/schemas/FtsoProvider"}},"providerCount":{"type":"integer"},"updatedAt":{"type":"integer","description":"Epoch milliseconds."}}},"example":{"providers":[{"name":"Example Songbird Provider","entityAddress":"0x0000000000000000000000000000000000000001","delegationAddress":"0x0000000000000000000000000000000000000002","score":81,"isV2":true,"isAnomaly":false,"delegationFee":20,"delegatorCount":64,"accuracy":99.41,"accuracyPrimary":78.2}],"providerCount":1,"updatedAt":1788000000000}}}},"400":{"description":"Invalid request (e.g. malformed NodeID).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Back off and retry, or use the MCP server for heavy use.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data cache temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/validators/{nodeID}/score-breakdown":{"get":{"operationId":"getValidatorScore","summary":"Validator score breakdown","description":"Full FlareWatch score for one Flare validator: composite score, per-dimension breakdown, the inputs each dimension was computed from, algorithm version, and recent score history.","tags":["Validators"],"parameters":[{"name":"nodeID","in":"path","required":true,"description":"Flare P-Chain NodeID in cb58 form, e.g. NodeID-6aKkPwTjFa3A5SH9H678r48MmNwyKFjQj.","schema":{"type":"string","pattern":"^NodeID-[1-9A-HJ-NP-Za-km-z]+$"}}],"responses":{"200":{"description":"Validator score + breakdown.","content":{"application/json":{"schema":{"type":"object","properties":{"nodeID":{"type":"string"},"displayName":{"type":"string"},"flareWatchScore":{"type":"number"},"algorithmVersion":{"type":"string"},"scoreBreakdown":{"$ref":"#/components/schemas/ScoreBreakdown"},"scoreInputs":{"type":"object","additionalProperties":true},"scoreComputedAtMs":{"type":"integer"}},"required":["nodeID","flareWatchScore"]},"example":{"nodeID":"NodeID-6aKkPwTjFa3A5SH9H678r48MmNwyKFjQj","displayName":"Example Validator","flareWatchScore":84.2,"algorithmVersion":"4.7","scoreBreakdown":{"uptime":{"score":9.8,"weight":10,"detail":"99.8% over the scoring window"},"fee":{"score":8,"weight":10,"detail":"20% delegation fee"}},"scoreInputs":{"uptimePct":99.8,"delegationFeePct":20,"selfBondFlr":18000000},"scoreComputedAtMs":1788000000000}}}},"400":{"description":"Invalid request (e.g. malformed NodeID).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Back off and retry, or use the MCP server for heavy use.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data cache temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/validators/name-map":{"get":{"operationId":"getValidatorNameMap","summary":"Validator + provider name map","description":"Identifier → display name, for labelling raw on-chain identifiers. Keys are of TWO kinds: P-Chain node IDs and FTSO entity/delegation addresses. IMPORTANT: every key is LOWERCASED, so look up with `key.toLowerCase()` — a canonical cb58 `NodeID-…` or a checksummed `0x…` will miss every time.","tags":["Validators"],"responses":{"200":{"description":"Identifier → name map.","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer","description":"Number of entries in `map`."},"map":{"type":"object","description":"Lowercased identifier → entry. Keys are either `nodeid-…` (P-Chain, lowercased) or `0x…` (FTSO entity/delegation address, lowercased).","additionalProperties":{"type":"object","properties":{"name":{"type":"string"},"logo":{"type":"string","nullable":true},"source":{"type":"string","description":"Where the label came from, e.g. flaremetrics."}},"required":["name"]}}},"required":["count","map"]},"example":{"count":316,"map":{"nodeid-nhdocbjv2qnaqdffw6zesxcgg9cwjxt77":{"name":"Example Validator","logo":null,"source":"flaremetrics"},"0x90d6fb8672f16cb5d6c5f2bb771f09d2628d0083":{"name":"Flare.Space","logo":"https://raw.githubusercontent.com/TowoLabs/ftso-signal-providers/master/assets/0x111246F191a2A20012723369d3CEc77777E774E9.png","source":"flaremetrics"}}}}}},"400":{"description":"Invalid request (e.g. malformed NodeID).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited. Back off and retry, or use the MCP server for heavy use.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Data cache temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","description":"Structured error. `error` is human-readable; `code` is a stable machine-readable identifier a client can branch on; `hint` (when present) says how to recover.","properties":{"error":{"type":"string","description":"Human-readable message."},"code":{"type":"string","description":"Stable machine-readable code, e.g. RATE_LIMITED, INVALID_NODE_ID, CACHE_UNAVAILABLE, VALIDATOR_NOT_FOUND, INTERNAL_ERROR."},"hint":{"type":"string","description":"How to resolve, when actionable."}},"required":["error","code"]},"PriceEntry":{"type":"object","description":"Price for one asset across currencies. Fields are null when a source is unavailable.","properties":{"usd":{"type":["number","null"]},"eur":{"type":["number","null"]},"gbp":{"type":["number","null"]},"aud":{"type":["number","null"]},"jpy":{"type":["number","null"]},"cad":{"type":["number","null"]},"usd_market_cap":{"type":["number","null"]},"usd_24h_change":{"type":["number","null"]},"source":{"type":["string","null"],"description":"e.g. 'ftso' or 'coingecko'."}}},"PriceCache":{"type":"object","properties":{"flr":{"$ref":"#/components/schemas/PriceEntry"},"sgb":{"$ref":"#/components/schemas/PriceEntry"},"xrp":{"$ref":"#/components/schemas/PriceEntry"},"degraded":{"type":"boolean","description":"True when one or more upstream price sources failed."},"source":{"type":"string","enum":["cache","live"],"description":"Whether served from KV cache or a live rebuild."}}},"FtsoProvider":{"type":"object","description":"One scored FTSO data provider. Additional metric fields may be present.","properties":{"name":{"type":"string"},"address":{"type":"string","description":"Provider EVM address."},"fee":{"type":"number","description":"Delegation fee percent."},"rewardRate":{"type":["number","null"],"description":"Reward rate per epoch."},"votePower":{"type":"number"},"delegatorCount":{"type":["integer","null"],"description":"Distinct wallets currently delegating (on-chain census); null when no fresh census."},"flareWatchScore":{"type":"number","description":"0-100 FlareWatch FTSO composite score."}},"additionalProperties":true},"ScoreDimension":{"type":"object","properties":{"score":{"type":"number","description":"Points earned on this dimension."},"max":{"type":"number","description":"Maximum points for this dimension."},"label":{"type":"string"},"detail":{"type":"string","description":"Human-readable explanation of the value."}},"required":["score","max","label"]},"ScoreBreakdown":{"type":"object","description":"Per-dimension breakdown of the validator score (9 additive dimensions + penalties). See /methodology.","properties":{"uptime":{"$ref":"#/components/schemas/ScoreDimension"},"netYield":{"$ref":"#/components/schemas/ScoreDimension"},"fee":{"$ref":"#/components/schemas/ScoreDimension"},"operatorQuality":{"$ref":"#/components/schemas/ScoreDimension"},"mirrorParticipation":{"$ref":"#/components/schemas/ScoreDimension"},"capacity":{"$ref":"#/components/schemas/ScoreDimension"},"trust":{"$ref":"#/components/schemas/ScoreDimension"},"delivery":{"$ref":"#/components/schemas/ScoreDimension"},"timeRemaining":{"$ref":"#/components/schemas/ScoreDimension"},"penalties":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"deduction":{"type":"number"},"detail":{"type":"string"}}}}}},"WalletIntelligence":{"type":"object","description":"Classified activity summary for one Flare wallet — the output of the same classification engine the dashboard uses.","properties":{"address":{"type":"string","description":"The wallet queried, lowercased."},"paid_via":{"type":"string","enum":["exact","credits"],"description":"Which rail paid for this call: x402 per-request, or deposited compute units."},"classified_events":{"type":"integer","description":"Total transfer/transaction events the engine classified for this wallet."},"by_category":{"type":"object","additionalProperties":{"type":"integer"},"description":"Event counts keyed by category (e.g. reward, defi, transfer)."},"by_type":{"type":"object","additionalProperties":{"type":"integer"},"description":"Event counts keyed by the finer-grained type within a category."},"income":{"type":"object","description":"Income-classified subset. flr_denominated_total counts FLR and WFLR only — it is an amount, never a fiat valuation, because this endpoint reports classifications and does not price claims.","properties":{"events":{"type":"integer"},"flr_denominated_total":{"type":"number"}}},"defi_protocols":{"type":"array","items":{"type":"string"},"description":"Distinct DeFi protocols this wallet interacted with, sorted."},"ftso_delegations":{"type":"array","description":"Live FTSO delegations read from chain at request time.","items":{"type":"object","properties":{"provider":{"type":"string"},"name":{"type":"string"},"percent":{"type":"number"}}}},"methodology":{"type":"string","description":"Where the classification rules are documented."}}},"PaymentRequired":{"type":"object","description":"The 402 body. Spec-shaped for x402: x402Version and accepts[] sit at the ROOT in camelCase, so standard client libraries (x402-fetch, x402-axios, the Go SDK) parse it without adaptation. v2 clients can instead read base64 requirements from the PAYMENT-REQUIRED response header. The richer `terms` block is FlareWatch's own superset and is not part of the x402 spec.","properties":{"x402Version":{"type":"integer","enum":[1]},"error":{"type":"string"},"accepts":{"type":"array","items":{"type":"object","properties":{"scheme":{"type":"string","enum":["exact"]},"network":{"type":"string","description":"flare or base."},"maxAmountRequired":{"type":"string","description":"Price in the asset's raw units (6 decimals)."},"resource":{"type":"string"},"description":{"type":"string"},"mimeType":{"type":"string"},"payTo":{"type":"string"},"maxTimeoutSeconds":{"type":"integer","description":"Derive validBefore = now + this. It exceeds the 1800s minimum validity the verifier enforces, so there is headroom for clock skew."},"asset":{"type":"string"},"extra":{"type":"object","description":"EIP-712 domain fields for the asset: name, version, chainId, decimals, symbol. chainId is included because it cannot be inferred for networks outside x402's registry, and is required to build the typed data."}}}},"terms":{"type":"object","description":"FlareWatch superset: both rails, deposit-credit terms, refund policy."}}},"PaymentTerms":{"type":"object","description":"Machine-readable terms for both rails, also served at /.well-known/x402.","properties":{"version":{"type":"integer"},"provisioned":{"type":"boolean"},"accepts":{"type":"array","items":{"type":"object"}},"paid_endpoints":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"price_micro_usd":{"type":"integer"},"description":{"type":"string"}}}},"policy":{"type":"object","description":"Refund and pricing policy. Payments are final; this is stated up front rather than discovered."},"balance_url":{"type":"string"},"docs_url":{"type":"string"}}},"VerifyResult":{"type":"object","description":"Outcome of a FREE dry run. The nonce is not burned and nothing settles.","properties":{"valid":{"type":"boolean"},"reason":{"type":"string","description":"Present when valid=false: exactly what the paywall would object to."},"from":{"type":"string"},"value_raw":{"type":"string"},"verified_against":{"type":"object","properties":{"path":{"type":"string"},"price_micro_usd":{"type":"integer"}}},"exact_rail":{"type":"string","enum":["ok","unset","malformed"]},"note":{"type":"string"}}},"TaxReconciliation":{"type":"object","description":"A reconciliation document plus its per-event ledger. The headline is a discriminated union: a figure always arrives with the basis that justifies it, or it is withheld with a reason — there is no variant that yields a bare number.","properties":{"tax_year":{"type":"integer"},"paid_via":{"type":"string","enum":["exact","credits"]},"document":{"type":"object","properties":{"wallet":{"type":"string"},"period":{"type":"object","nullable":true},"headline":{"type":"object","description":"kind=stated carries value+basis; kind=withheld carries reason+insteadUse; kind=none is a real zero."},"amounts":{"type":"object","additionalProperties":{"type":"number"},"description":"Per-token income AMOUNTS. Chain facts — present even when the fiat total is withheld."},"statement":{"type":"object","description":"What this document is and is not. Always present."},"gaps":{"type":"array","items":{"type":"string"}}}},"lines":{"type":"array","items":{"type":"object"},"description":"Per-event ledger; each line carries ruleId, ruleEvidence and a dated valuation."},"rate_coverage":{"type":"object","description":"Published rate bounds, so a caller can predict a withheld total."}}}}},"tags":[{"name":"Validators","description":"Flare validator scores."},{"name":"FTSO","description":"FTSO data-provider metrics."},{"name":"Network","description":"Network + platform stats."},{"name":"Prices","description":"FLR / SGB market data."}]}