{"openapi":"3.1.0","info":{"title":"ELYFUEL API","version":"1.0.0","description":"HYPE gas sponsorship infrastructure for Elysium. Amounts are wei strings. Errors: { error: { code, message } }."},"servers":[{"url":"/"}],"components":{"securitySchemes":{"wallet":{"type":"http","scheme":"bearer","description":"Token from POST /api/v1/auth/verify"}}},"paths":{"/api/v1/network/status":{"get":{"summary":"Chain connectivity, finality lag, worker health, payout switches and the disclosed treasury address","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/network/stats":{"get":{"summary":"Verified totals: funded, distributed, active campaigns, sponsored wallets, confirmed transfers","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/network/graph":{"get":{"summary":"Projects with their non-draft campaigns and balances (Fuel Radar)","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/network/events":{"get":{"summary":"Recent committed events, newest first. Query: after, limit","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/events/stream":{"get":{"summary":"Server-sent events stream of committed events. Resume with Last-Event-ID","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/site":{"get":{"summary":"Public site details: the $FUEL contract address and the custodial treasury address","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/treasury":{"get":{"summary":"Custodial treasury address, live balance and what it owes campaigns","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/projects":{"get":{"summary":"Active projects. Query: limit, offset","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}},"post":{"summary":"Register a project; the signed-in wallet becomes its owner","security":[{"wallet":[]}],"description":"Requires a wallet session (Sign-In with Ethereum).","requestBody":{"required":true,"content":{"application/json":{"example":{"slug":"string","name":"string","description":"string","website":"https URL","domain":"example.xyz"}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/projects/{slug}":{"get":{"summary":"One project and its campaigns","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/campaigns":{"get":{"summary":"Campaigns. Query: status, project, limit, offset","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/campaigns/{id}":{"get":{"summary":"One campaign with balances and rules","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/campaigns/{id}/transactions":{"get":{"summary":"Confirmed deposits and payouts for a campaign, with explorer links","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/campaigns/{id}/deposits":{"get":{"summary":"Deposits (pending, confirmed, rejected) for a campaign","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/wallets/{address}/eligibility":{"get":{"summary":"Every rule of every live campaign evaluated for a wallet. Query: campaign","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/wallets/{address}/sponsorships":{"get":{"summary":"A wallet's sponsorship history","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/sponsorships":{"get":{"summary":"Confirmed sponsorships network-wide. Query: campaign, limit, offset","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/sponsorships/{id}":{"get":{"summary":"One sponsorship and its status","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/receipts/{id}":{"get":{"summary":"Receipt for a payout confirmed on chain","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/auth/nonce":{"post":{"summary":"Issue a single-use Sign-In with Ethereum nonce","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/auth/verify":{"post":{"summary":"Exchange a signed SIWE message for a bearer session token","requestBody":{"required":true,"content":{"application/json":{"example":{"message":"string","signature":"0x…"}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/auth/logout":{"post":{"summary":"Revoke the current session","security":[{"wallet":[]}],"description":"Requires a wallet session (Sign-In with Ethereum).","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/me":{"get":{"summary":"Signed-in wallet, operator flag and owned projects","security":[{"wallet":[]}],"description":"Requires a wallet session (Sign-In with Ethereum).","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/sponsorships/request":{"post":{"summary":"Request this campaign's gas allowance for the signed-in wallet. Idempotent per key","security":[{"wallet":[]}],"description":"Requires a wallet session (Sign-In with Ethereum).","requestBody":{"required":true,"content":{"application/json":{"example":{"campaignId":"uuid","idempotencyKey":"string 8–64"}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/deposits":{"post":{"summary":"Register a funding transaction sent to the treasury (calldata elyfuel:<ref>)","requestBody":{"required":true,"content":{"application/json":{"example":{"txHash":"0x…"}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/projects/{slug}/verify-domain":{"post":{"summary":"Check the elyfuel-verification TXT record on the project domain","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"wallet":[]}],"description":"Requires a wallet session (Sign-In with Ethereum).","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/projects/{slug}/manage":{"get":{"summary":"Owner view: domain token, all campaigns including drafts","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"wallet":[]}],"description":"Requires a wallet session (Sign-In with Ethereum).","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/projects/{slug}/campaigns":{"post":{"summary":"Create a campaign (starts as draft)","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"wallet":[]}],"description":"Requires a wallet session (Sign-In with Ethereum).","requestBody":{"required":true,"content":{"application/json":{"example":{"name":"string","perClaimHype":"0.005","maxClaimsPerWallet":1,"cooldownSeconds":86400,"eligibility":{"mode":"allowlist | open","minTxCount":0,"maxBalanceHype":"0.001","eoaOnly":true},"allowlist":["0x…"]}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/campaigns/{id}/manage":{"get":{"summary":"Owner view: requests, allowlist, ledger","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"wallet":[]}],"description":"Requires a wallet session (Sign-In with Ethereum).","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/campaigns/{id}/status":{"post":{"summary":"Activate, pause or end a campaign","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"wallet":[]}],"description":"Requires a wallet session (Sign-In with Ethereum).","requestBody":{"required":true,"content":{"application/json":{"example":{"status":"active | paused | ended"}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/campaigns/{id}/allowlist":{"post":{"summary":"Add or remove allowlisted wallets","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"wallet":[]}],"description":"Requires a wallet session (Sign-In with Ethereum).","requestBody":{"required":true,"content":{"application/json":{"example":{"add":["0x…"],"remove":["0x…"]}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/campaigns/{id}/withdrawals":{"post":{"summary":"Request a withdrawal of unreserved budget to the owner wallet (operator-approved)","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"wallet":[]}],"description":"Requires a wallet session (Sign-In with Ethereum).","requestBody":{"required":true,"content":{"application/json":{"example":{"amountHype":"0.5"}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/projects/{slug}/webhooks":{"get":{"summary":"List webhooks","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"wallet":[]}],"description":"Requires a wallet session (Sign-In with Ethereum).","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}},"post":{"summary":"Create a webhook; the signing secret is returned once","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"wallet":[]}],"description":"Requires a wallet session (Sign-In with Ethereum).","requestBody":{"required":true,"content":{"application/json":{"example":{"url":"https://…","events":["sponsorship.confirmed"]}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/webhooks/{id}":{"delete":{"summary":"Disable a webhook","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"wallet":[]}],"description":"Requires a wallet session (Sign-In with Ethereum).","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/admin/overview":{"get":{"summary":"Queue counts, treasury solvency, ledger reconciliation, unattributed deposits","security":[{"wallet":[]}],"description":"Requires a session from an operator wallet.","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/admin/payouts":{"get":{"summary":"Payouts by status. Query: status","security":[{"wallet":[]}],"description":"Requires a session from an operator wallet.","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/admin/payouts/{id}/review":{"post":{"summary":"Approve or reject a payout in review","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"wallet":[]}],"description":"Requires a session from an operator wallet.","requestBody":{"required":true,"content":{"application/json":{"example":{"decision":"approve | reject","note":"string"}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/admin/site":{"get":{"summary":"Site details plus where the treasury key comes from and whether it can be replaced","security":[{"wallet":[]}],"description":"Requires a session from an operator wallet.","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}},"post":{"summary":"Set the $FUEL contract address and/or the treasury key (encrypted at rest, never returned)","security":[{"wallet":[]}],"description":"Requires a session from an operator wallet.","requestBody":{"required":true,"content":{"application/json":{"example":{"tokenCa":"0x… or base58","treasuryKey":"0x…64 hex","confirm":"SET MAINNET TREASURY KEY (mainnet only)"}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/admin/settings":{"post":{"summary":"Arm/disarm payout signing, open/close requests","security":[{"wallet":[]}],"description":"Requires a session from an operator wallet.","requestBody":{"required":true,"content":{"application/json":{"example":{"payoutsArmed":true,"requestsOpen":true,"confirm":"ARM MAINNET PAYOUTS (mainnet only)"}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/admin/campaigns/{id}/status":{"post":{"summary":"Pause, resume or end any campaign","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"wallet":[]}],"description":"Requires a session from an operator wallet.","requestBody":{"required":true,"content":{"application/json":{"example":{"status":"paused"}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/admin/projects/{slug}/status":{"post":{"summary":"Suspend or restore a project","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"wallet":[]}],"description":"Requires a session from an operator wallet.","requestBody":{"required":true,"content":{"application/json":{"example":{"status":"suspended"}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/admin/deposits/{id}/assign":{"post":{"summary":"Credit an unattributed confirmed deposit to a campaign","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"security":[{"wallet":[]}],"description":"Requires a session from an operator wallet.","requestBody":{"required":true,"content":{"application/json":{"example":{"campaignId":"uuid"}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}},"/api/v1/admin/audit":{"get":{"summary":"Audit log","security":[{"wallet":[]}],"description":"Requires a session from an operator wallet.","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Sign-in required"},"429":{"description":"Rate limited"}}}}}}