{"openapi":"3.1.0","info":{"title":"Claimora","version":"0.1.0"},"paths":{"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Health Get"}}}}}}},"/login":{"post":{"summary":"Admin Login","description":"Check the admin password, then set the session cookie.","operationId":"admin_login_login_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_login_login_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Dashboard","description":"Domain cards and a short claim search. Registered before the MCP mount.","operationId":"dashboard__get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"domain","in":"query","required":false,"schema":{"type":"string","default":"","title":"Domain"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/credits":{"get":{"summary":"Credits Page","description":"Public USDC addresses and the paid-call price. No session.","operationId":"credits_page_credits_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/pay":{"get":{"summary":"Pay Page","description":"Old payment URL. The page lives at /credits.","operationId":"pay_page_pay_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/disclaimer":{"get":{"summary":"Disclaimer Page","description":"Public disclaimer. No session.","operationId":"disclaimer_page_disclaimer_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/privacy":{"get":{"summary":"Privacy Page","description":"Public privacy note. No session.","operationId":"privacy_page_privacy_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/terms":{"get":{"summary":"Terms Page","description":"Public credits terms. No session.","operationId":"terms_page_terms_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/usage":{"get":{"summary":"Usage Page","description":"Public cost and speed estimates. Call counts stay on /admin.","operationId":"usage_page_usage_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/contribute":{"get":{"summary":"Contribute Page","description":"Public contribution forms. No session and no extract.","operationId":"contribute_page_contribute_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Contribute Form","description":"Store a contribution or list claims already extracted for one paper.","operationId":"contribute_form_contribute_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_contribute_form_contribute_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pay/payments":{"post":{"summary":"Pay Watch","description":"Poll one transfer. The response leaves the secret empty.","operationId":"pay_watch_pay_payments_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayWatch"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentView"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pay/payments/{tx_hash}":{"get":{"summary":"Pay Payment Status","description":"Stored status for a transfer. This response never includes the secret.","operationId":"pay_payment_status_pay_payments__tx_hash__get","parameters":[{"name":"tx_hash","in":"path","required":true,"schema":{"type":"string","title":"Tx Hash"}},{"name":"network","in":"query","required":false,"schema":{"type":"string","default":"","title":"Network"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentView"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pay/solana/transfer":{"post":{"summary":"Pay Solana Transfer","description":"Build an unsigned USDC transfer for Phantom.","operationId":"pay_solana_transfer_pay_solana_transfer_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolanaPrepare"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SolanaPrepared"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pay/cardano/transfer":{"post":{"summary":"Pay Cardano Transfer","description":"Build an unsigned USDCx transfer for Eternl. The receiver is the configured address.","operationId":"pay_cardano_transfer_pay_cardano_transfer_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardanoPrepare"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardanoPrepared"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pay/cardano/assemble":{"post":{"summary":"Pay Cardano Assemble","description":"Attach Eternl's witness set. This does not broadcast the transaction.","operationId":"pay_cardano_assemble_pay_cardano_assemble_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardanoAssemble"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardanoAssembled"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pay/cardano/submit":{"post":{"summary":"Pay Cardano Submit","description":"Broadcast a transaction Eternl already signed, when the wallet has no submit call.","operationId":"pay_cardano_submit_pay_cardano_submit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardanoSubmit"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardanoSubmitted"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pay/cardano/address":{"post":{"summary":"Pay Cardano Address","description":"Turn Eternl's hex address into addr1 text.","operationId":"pay_cardano_address_pay_cardano_address_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardanoHex"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Pay Cardano Address Pay Cardano Address Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pay/balance":{"post":{"summary":"Pay Balance","description":"Remaining balance. The caller must send the secret. The secret is not echoed.","operationId":"pay_balance_pay_balance_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecretLookup"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BalanceBody"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pay/usage":{"get":{"summary":"Pay Usage","description":"Remaining free calls and paid balance. The call is not counted.","operationId":"pay_usage_pay_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageBody"}}}}}},"post":{"summary":"Pay Usage","description":"Remaining free calls and paid balance. The call is not counted.","operationId":"pay_usage_pay_usage_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageBody"}}}}}}},"/pay/challenge":{"post":{"summary":"Pay Challenge","description":"Message the connected wallet signs before a secret is shown.","operationId":"pay_challenge_pay_challenge_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecretChallenge"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Pay Challenge Pay Challenge Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pay/secret":{"post":{"summary":"Pay Secret","description":"Show a new secret after the wallet signature checks out.","operationId":"pay_secret_pay_secret_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecretProof"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecretReveal"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pay/wallet":{"post":{"summary":"Pay Wallet","description":"Connected credit view. The response does not include a secret.","operationId":"pay_wallet_pay_wallet_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletQuery"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletDashBody"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pay/sync":{"post":{"summary":"Pay Sync","description":"Look for one new transfer from a connected wallet. No secret is returned.","operationId":"pay_sync_pay_sync_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletQuery"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentView"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin":{"get":{"summary":"Admin Home","description":"Wallets, graph totals, and logged MCP calls. No chain lookup.","operationId":"admin_home_admin_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/spot-check":{"post":{"summary":"Admin Spot Check","description":"Store one spot-check accuracy. The date is the UTC time of this request.","operationId":"admin_spot_check_admin_spot_check_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_spot_check_admin_spot_check_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/wallets":{"get":{"summary":"Admin Wallets","description":"Receiving addresses and the manual credit form.","operationId":"admin_wallets_admin_wallets_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Admin Wallets Credit","description":"Record a balance or token for one transaction hash. No chain check.","operationId":"admin_wallets_credit_admin_wallets_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_admin_wallets_credit_admin_wallets_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/assets/hero2.jpg":{"get":{"summary":"Hero Image","description":"Public title image. `/admin` is the page that asks for a password.","operationId":"hero_image_assets_hero2_jpg_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/static/claimora-card-1200x630.jpg":{"get":{"summary":"Card Image","description":"Public Open Graph and Twitter card. Crawlers load this from the page head.","operationId":"card_image_static_claimora_card_1200x630_jpg_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/static/{name}":{"get":{"summary":"Favicon File","description":"Public favicon set generated from the orange C icon.","operationId":"favicon_file_static__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"BalanceBody":{"properties":{"balance":{"type":"string","title":"Balance"},"unit":{"type":"string","title":"Unit"}},"type":"object","required":["balance","unit"],"title":"BalanceBody","description":"Remaining balance for one secret."},"Body_admin_login_login_post":{"properties":{"password":{"type":"string","title":"Password","default":""}},"type":"object","title":"Body_admin_login_login_post"},"Body_admin_spot_check_admin_spot_check_post":{"properties":{"accuracy":{"type":"string","title":"Accuracy","default":""}},"type":"object","title":"Body_admin_spot_check_admin_spot_check_post"},"Body_admin_wallets_credit_admin_wallets_post":{"properties":{"identifier":{"type":"string","title":"Identifier","default":""},"tx_hash":{"type":"string","title":"Tx Hash","default":""},"kind":{"type":"string","title":"Kind","default":""},"amount":{"type":"string","title":"Amount","default":""},"network":{"type":"string","title":"Network","default":""}},"type":"object","title":"Body_admin_wallets_credit_admin_wallets_post"},"Body_contribute_form_contribute_post":{"properties":{"tab":{"type":"string","title":"Tab","default":""},"source":{"type":"string","title":"Source","default":""},"link_1":{"type":"string","title":"Link 1","default":""},"link_2":{"type":"string","title":"Link 2","default":""},"link_3":{"type":"string","title":"Link 3","default":""},"link_4":{"type":"string","title":"Link 4","default":""},"link_5":{"type":"string","title":"Link 5","default":""},"claim":{"type":"string","title":"Claim","default":""},"note":{"type":"string","title":"Note","default":""},"doi":{"type":"string","title":"Doi","default":""},"quote":{"type":"string","title":"Quote","default":""},"domain":{"type":"string","title":"Domain","default":""},"contact":{"type":"string","title":"Contact","default":""},"paper":{"type":"string","title":"Paper","default":""}},"type":"object","title":"Body_contribute_form_contribute_post"},"CardanoAssemble":{"properties":{"transaction":{"type":"string","title":"Transaction","default":""},"witnesses":{"type":"string","title":"Witnesses","default":""}},"type":"object","title":"CardanoAssemble","description":"Unsigned transaction plus the witness set Eternl returned."},"CardanoAssembled":{"properties":{"transaction":{"type":"string","title":"Transaction"},"tx_hash":{"type":"string","title":"Tx Hash"}},"type":"object","required":["transaction","tx_hash"],"title":"CardanoAssembled","description":"Signed transaction and its hash. This route does not broadcast it."},"CardanoHex":{"properties":{"hex":{"type":"string","title":"Hex","default":""}},"type":"object","title":"CardanoHex","description":"CIP-30 address bytes, hex encoded."},"CardanoPrepare":{"properties":{"amount":{"type":"string","title":"Amount","default":""},"utxos":{"items":{"type":"string"},"type":"array","title":"Utxos"},"change_hex":{"type":"string","title":"Change Hex","default":""}},"type":"object","title":"CardanoPrepare","description":"Eternl asks for an unsigned USDCx transfer of this amount."},"CardanoPrepared":{"properties":{"transaction":{"type":"string","title":"Transaction"}},"type":"object","required":["transaction"],"title":"CardanoPrepared","description":"Unsigned transaction the wallet signs. No secret is included."},"CardanoSubmit":{"properties":{"transaction":{"type":"string","title":"Transaction","default":""}},"type":"object","title":"CardanoSubmit","description":"Signed transaction to broadcast when the wallet cannot submit it."},"CardanoSubmitted":{"properties":{"tx_hash":{"type":"string","title":"Tx Hash"}},"type":"object","required":["tx_hash"],"title":"CardanoSubmitted","description":"Hash of a broadcast Cardano transaction."},"CreditedPaymentBody":{"properties":{"tx_hash":{"type":"string","title":"Tx Hash"},"amount":{"type":"string","title":"Amount"},"unit":{"type":"string","title":"Unit"},"network":{"type":"string","title":"Network"}},"type":"object","required":["tx_hash","amount","unit","network"],"title":"CreditedPaymentBody","description":"One credited payment shown on the connected pay view."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"PayWatch":{"properties":{"network":{"type":"string","title":"Network","default":""},"tx_hash":{"type":"string","title":"Tx Hash","default":""},"wallet":{"type":"string","title":"Wallet","default":""}},"type":"object","title":"PayWatch","description":"A wallet transfer to track. The secret is not part of the request."},"PaymentView":{"properties":{"status":{"type":"string","title":"Status"},"tx_hash":{"type":"string","title":"Tx Hash"},"network":{"type":"string","title":"Network"},"wallet":{"type":"string","title":"Wallet"},"amount":{"type":"string","title":"Amount"},"unit":{"type":"string","title":"Unit"},"secret":{"type":"string","title":"Secret","default":""},"detail":{"type":"string","title":"Detail","default":""}},"type":"object","required":["status","tx_hash","network","wallet","amount","unit"],"title":"PaymentView","description":"One tracked payment. The secret stays empty until the wallet signs for it."},"SecretChallenge":{"properties":{"network":{"type":"string","title":"Network","default":""},"wallet":{"type":"string","title":"Wallet","default":""},"action":{"type":"string","title":"Action","default":""}},"type":"object","title":"SecretChallenge","description":"Ask for the message a connected wallet must sign."},"SecretLookup":{"properties":{"secret":{"type":"string","title":"Secret","default":""}},"type":"object","title":"SecretLookup","description":"Balance check. The response does not repeat the secret."},"SecretProof":{"properties":{"network":{"type":"string","title":"Network","default":""},"wallet":{"type":"string","title":"Wallet","default":""},"action":{"type":"string","title":"Action","default":""},"message":{"type":"string","title":"Message","default":""},"signature":{"type":"string","title":"Signature","default":""},"key":{"type":"string","title":"Key","default":""}},"type":"object","title":"SecretProof","description":"A wallet signature over a server challenge. The secret is not sent."},"SecretReveal":{"properties":{"secret":{"type":"string","title":"Secret"},"balance":{"type":"string","title":"Balance"},"unit":{"type":"string","title":"Unit"}},"type":"object","required":["secret","balance","unit"],"title":"SecretReveal","description":"Plaintext secret returned once, plus the balance it can spend."},"SolanaPrepare":{"properties":{"sender":{"type":"string","title":"Sender","default":""},"amount":{"type":"string","title":"Amount","default":""}},"type":"object","title":"SolanaPrepare","description":"Phantom asks for an unsigned USDC transfer of this amount."},"SolanaPrepared":{"properties":{"transaction":{"type":"string","title":"Transaction"},"sender":{"type":"string","title":"Sender"}},"type":"object","required":["transaction","sender"],"title":"SolanaPrepared","description":"Unsigned transaction the wallet signs. No secret is included."},"UsageBody":{"properties":{"metered":{"type":"boolean","title":"Metered"},"connected_id":{"type":"string","title":"Connected Id","default":""},"wallet":{"type":"string","title":"Wallet","default":""},"remaining_free_calls":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Remaining Free Calls"},"paid_balance":{"type":"string","title":"Paid Balance","default":""},"remaining_calls":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Remaining Calls"},"reset_at":{"type":"string","title":"Reset At","default":""}},"type":"object","required":["metered"],"title":"UsageBody","description":"Remaining free calls and paid balance. The secret is not included."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WalletDashBody":{"properties":{"network":{"type":"string","title":"Network"},"wallet":{"type":"string","title":"Wallet"},"credit_balance":{"type":"string","title":"Credit Balance"},"credit_unit":{"type":"string","title":"Credit Unit"},"wallet_balance":{"type":"string","title":"Wallet Balance"},"wallet_unit":{"type":"string","title":"Wallet Unit"},"wallet_detail":{"type":"string","title":"Wallet Detail","default":""},"payments":{"items":{"$ref":"#/components/schemas/CreditedPaymentBody"},"type":"array","title":"Payments"},"issued":{"type":"boolean","title":"Issued","default":false}},"type":"object","required":["network","wallet","credit_balance","credit_unit","wallet_balance","wallet_unit","payments"],"title":"WalletDashBody","description":"Credit balance, wallet token balance, and the latest credited payments."},"WalletQuery":{"properties":{"network":{"type":"string","title":"Network","default":""},"wallet":{"type":"string","title":"Wallet","default":""},"stake":{"type":"string","title":"Stake","default":""}},"type":"object","title":"WalletQuery","description":"A connected wallet. The secret is not part of the request."}}}}