{"openapi":"3.0.3","info":{"version":"8.20.0","title":"Flux Decentralized Cloud API","termsOfService":"https://cdn.runonflux.io/Flux_Terms_of_Service.pdf","contact":{"name":"InFlux Technologies USA LLC — Flux Development Team","email":"development@runonflux.com","url":"https://docs.runonflux.com"},"license":{"name":"GNU AGPLv3","url":"https://www.gnu.org/licenses/agpl-3.0.en.html"},"x-logo":{"url":"https://raw.githubusercontent.com/runonflux/fluxdocs/master/flux_logo.png"},"description":"# Flux API Documentation\n\nWelcome to the comprehensive API reference for **Flux**, the world's leading decentralized Web3 cloud computing platform. This documentation covers all available API endpoints for interacting with the Flux network, nodes, and decentralized applications.\n\n\n## About Flux\n\n**Flux** is a decentralized Web3 cloud infrastructure powered by globally distributed, user-operated nodes. Built for scalability and censorship resistance, Flux eliminates single points of failure while providing enterprise-grade computing resources for deploying and managing applications.\n\n\n### Key Features\n\n- **🌐 Decentralized Infrastructure**: ~6,400 confirmed FluxNodes worldwide providing 52,000+ CPU cores, 170TB+ RAM and 3PB+ SSD storage across three tiers (Cumulus, Nimbus, Stratus)\n- **⚡ High Performance**: Enterprise-grade computing with automatic placement, fault-domain spreading and high availability\n- **🔐 Secure by Design**: Multiple authentication methods, enterprise app encryption and runtime tampering detection\n- **💰 Cost Effective**: Competitive pricing compared to traditional cloud providers\n- **🚀 Developer Friendly**: Docker-based deployments with comprehensive API support\n- **🛡️ ArcaneOS**: Hardened, attested node operating system with hardware-backed key custody\n\n*Network figures are a live snapshot; query `GET /daemon/getfluxnodecount` or\n[stats.runonflux.io](https://stats.runonflux.io) for current totals.*\n\n\n## API Architecture\n\nThe Flux API uses a **seven-level permission model** to ensure secure and controlled access. Every endpoint in this document ends its description with the level it requires:\n\n| Permission Level | Description | Authentication Required |\n|------------------|-------------|-------------------------|\n| **Public** | Open access endpoints | ❌ No |\n| **User** (`user`) | Any FluxID with a valid signature and a live session | ✅ Yes |\n| **FluxTeam** (`fluxteam`) | Flux Team and Flux Support identities | ✅ Yes |\n| **Admin** (`admin`) | The operator of *this* node (`initial.zelid` in its config) | ✅ Yes |\n| **AdminAndFluxTeam** (`adminandfluxteam`) | Node operator **or** Flux Team | ✅ Yes |\n| **AppOwner** (`appowner`) | The FluxID that registered the application | ✅ Yes |\n| **AppOwnerAbove** (`appownerorfluxteam`) | Application owner **or** Flux Team | ✅ Yes |\n\nEvery privilege is a set of identities and asks whether the caller is one of\nthem — the compounds read **OR**, never AND. `admin` is a hardware role: the\nnode operator administers the machine and is *not* a party to a customer's\napplication, so app verbs (`appstart`, `appremove`, `appkill`, `redeploy`, …)\nrequire **AppOwnerAbove** rather than Admin.\n\n\n### Request Methods\n\n- **GET**: Most endpoints support GET requests with parameters as query strings or path variables\n- **POST**: Used for endpoints requiring large payloads or sensitive data\n- **WebSocket**: Used for real-time communication and simplified authentication flows\n\n\n## Supported Wallet Authentication\n\nFlux supports multiple modern authentication methods for maximum flexibility and security:\n\n\n### 🛡️ SSP Wallet\n\n**Secure, Simple, Powerful** - The next-generation 2FA wallet with enterprise security:\n\n- **True 2-of-2 Multi-Signature**: Requires both browser extension and mobile app authorization\n- **Advanced Security**: BIP48 derivation, Account Abstraction (ERC-4337), Schnorr signatures\n- **Multi-Chain Support**: Bitcoin, Ethereum, Polygon, BSC, Avalanche, and 15+ blockchains\n- **WalletConnect v2**: Connect to thousands of dApps seamlessly\n- **Professional Audit**: Thoroughly audited by security experts in 2025\n\n**Installation**:\n- Chrome Extension: [SSP Wallet - Chrome Web Store](https://chromewebstore.google.com/detail/ssp-wallet/mgfbabcnedcejkfibpafadgkhmkifhbd)\n- Mobile App: Available on iOS App Store and Google Play Store\n- Website: [sspwallet.io](https://sspwallet.io)\n\n\n### 🔑 ZelCore Wallet\n\n**Multi-Asset Cryptocurrency Wallet** - The original Flux ecosystem wallet:\n\n- **Self-Custodial**: Full control over your private keys\n- **Decentralized 2FA (d2FA)**: Unique blockchain-based two-factor authentication\n- **Multi-Chain**: Support for 80+ blockchains and thousands of assets\n- **Hardware Integration**: Connect with hardware wallets for enhanced security\n- **Deep Linking**: Native `zel:` protocol support\n\n**Installation**: [zelcore.io](https://zelcore.io)\n\n\n### 🦊 MetaMask Integration\n\n**Ethereum Ecosystem Wallet** - Popular browser extension wallet:\n\n- **Ethereum Native**: Full Ethereum and EVM chain support\n- **Sign-In with Ethereum (SIWE)**: ERC-4361 standard compliance\n- **Wide Adoption**: Most popular Web3 wallet with extensive dApp support\n- **Domain Binding**: Advanced phishing protection\n\n**Installation**: [metamask.io](https://metamask.io)\n\n\n### 🔗 WalletConnect v2\n\n**Universal Wallet Connection Protocol** - Connect any compatible wallet:\n\n- **700+ Wallets**: Support for hundreds of popular wallets\n- **Cross-Platform**: Mobile, desktop, and web wallet compatibility\n- **Secure Bridge**: Encrypted communication between wallet and dApp\n- **QR Code Connection**: Simple mobile wallet connection\n\n\n### 📧 Traditional Authentication\n\n**Email-Based Login** - For users preferring traditional authentication:\n\n- **Firebase Integration**: Google Firebase authentication backend\n- **Email/Password**: Standard username/password login\n- **Google OAuth**: Sign in with Google account\n- **Account Recovery**: Standard password reset flows\n\n\n## Getting Started\n\nFollow these steps to start using the Flux API:\n\n\n### 1. Choose Your Authentication Method\n\nSelect from the supported wallet options above based on your development needs and user preferences. All methods are supported by the FluxOS API.\n\n\n### 2. Set Up Your Wallet\n\nInstall and configure your chosen wallet:\n- Download from official sources only\n- Secure your seed phrase or recovery information\n- Enable two-factor authentication where available\n- Test with small amounts first\n\n\n### 3. Obtain Authentication Credentials\n\nFollow the **Authentication** section in this API documentation to:\n- Generate login phrases\n- Sign authentication messages\n- Obtain session tokens\n- Set up API headers\n\n\n### 4. Configure API Headers\n\nAuthenticated requests carry a single `zelidauth` header. It is a\n**URL-encoded query string**, not JSON:\n\n```\nzelidauth: zelid=<address>&signature=<urlencoded-signature>&loginPhrase=<phrase>\n```\n\nA complete example:\n\n```\nzelidauth: zelid=1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC&signature=H%2BZB3oSrsw6XkBxxlbwk33LEBJYvqtbMIm2kL9JzuoXMC6pSZd0lBHdnhJYzMTXv81zZQ7G%2FpkK1NvYN7cNF0GE%3D&loginPhrase=1574991374806spbcvsuwerl52tppx9dw5khuz8rew13mkq86gg8r2c\n```\n\n**Signatures are base64 and routinely contain `+`, `/` and `=`** — all three\nchange meaning inside a query string, so the signature must be URL-encoded or\nthe request will be refused as unauthentic.\n\n\n### 5. Start Making API Calls\n\nTest your setup with public endpoints first, then proceed to authenticated endpoints once your credentials are properly configured.\n\n\n## AI Agents and MCP\n\n**Flux Cloud MCP** is an [MCP](https://modelcontextprotocol.io) server that lets AI agents use Flux Cloud through this API: quote an app in US dollars, deploy it, pay for it, watch it come up, read its logs, update it and cancel it. It works with Claude, ChatGPT, Cursor, VS Code, Windsurf and other MCP hosts. Source: [RunOnFlux/flux-cloud-mcp](https://github.com/RunOnFlux/flux-cloud-mcp).\n\n**Hosted, nothing to install.** Add it as a remote MCP server (Streamable HTTP):\n\n```\nhttps://mcp.runonflux.com/mcp\n```\n\nIn Claude Code: `claude mcp add --transport http flux-cloud https://mcp.runonflux.com/mcp`. In VS Code and Cursor, use **Connect MCP** at the bottom of the sidebar.\n\nThe hosted server holds no keys. Read-only tools need none; tools that sign or pay take the keys as call arguments, used for that call only and never stored. Create a dedicated pair with `flux_generate_keys` and fund it with only what a deployment needs.\n\n**Local, keys stay on your machine.** For larger budgets, run the server locally:\n\n```bash\nclaude mcp add flux-cloud -s user \\\n  -e FLUX_ID_PRIVATE_KEY=<wif> -e FLUX_PAYMENT_PRIVATE_KEY=<wif> \\\n  -- npx -y @runonflux/flux-cloud-mcp\n```\n\n**Any other AI tool** can read this reference as [markdown](https://docs.runonflux.io/fluxapi.md), listed in [llms.txt](https://docs.runonflux.io/llms.txt).\n\n\n## Support & Community\n\n- **Documentation**: [docs.runonflux.com](https://docs.runonflux.com)\n- **Discord Community**: [discord.gg/runonflux](https://discord.gg/runonflux)\n- **GitHub**: [github.com/RunOnFlux](https://github.com/RunOnFlux)\n- **Twitter/X**: [@RunOnFlux](https://x.com/runonflux)\n- **Website**: [runonflux.com](https://runonflux.com)\n\n\n---\n\n\nFluxOS is free software published under the GNU AGPLv3. Flux, FluxOS,\nFluxNode and ArcaneOS are projects of **InFlux Technologies USA LLC**.\n© 2026 InFlux Technologies USA LLC.\n\n\n**🚀 Ready to build on the decentralized web? Let's get started!**\n\n\n## Important Notes\n\n- Login phrases expire after 15 minutes\n- Session tokens are valid for up to 14 days\n- Always use HTTPS in production environments\n- Signature values must be URL-encoded inside the `zelidauth` header\n\n\n## Response Envelope & Error Handling\n\n**This is the single most important thing to know about the Flux API.**\n\nA request that reaches a handler is answered **at HTTP 200**, in the body —\n*including when the answer is a failure*:\n\n```json\n{ \"status\": \"success\", \"data\": { ... } }\n{ \"status\": \"error\",   \"data\": { \"code\": 401, \"name\": \"Unauthorized\", \"message\": \"...\" } }\n```\n\nThe `code` inside an error body is a **FluxOS code, not a wire status**. A\nremoved endpoint answers HTTP 200 with `data.code: 410`; an unauthorised call\nanswers HTTP 200 with `data.code: 401`. A client that branches on\n`response.ok` or `response.status` will read every one of these as a success.\n\n```javascript\nconst res = await fetch(url, { headers: { zelidauth } });\nconst body = await res.json();\nif (body.status !== 'success') {      // <- the check that matters\n  throw new Error(body.data?.message ?? 'Flux API error');\n}\n```\n\nThe in-band shape exists so that a transport failure cannot impersonate a\nservice answer. Wire statuses are therefore reserved for refusals that happen\n**before** a handler runs, and for a handful of endpoints that deliberately\nspeak HTTP semantics:\n\n| Status | Where it comes from |\n|--------|---------------------|\n| `403` | `requireHttps` — an ArcaneOS endpoint reached over plain HTTP |\n| `503` / `400` | route guards — the node has not finished booting, has not yet obtained the network policy (routes that pull images), or query parameters were sent to a route that rejects them |\n| `413` | a request body too large to accept |\n| `404` | a resource that does not exist to be addressed (an unknown operation id, a stream that is not enabled) |\n| `202` | an endpoint that started long-running work — see below |\n\nEndpoints that use wire statuses say so in their own `responses` section.\nEverything else answers 200 and puts the outcome in `status`.\n\n**Request bodies.** Every `POST` under `/daemon`, `/benchmark`, `/id` and\n`/zelid` reads the raw body itself and parses it as JSON. Send that JSON\nwith `Content-Type: text/plain` (any type other than `application/json`\nworks): FluxOS mounts a JSON body parser that consumes `application/json`\nbodies before these handlers run, and such a request is never answered.\n\n\n## Long-Running Operations\n\nWork whose duration scales with the data — copying, compressing or extracting\ninside an application volume — does not block the request. It answers\n**`202 Accepted`** with a `jobId`, a `Location` header pointing at the status\nresource and a `Retry-After` header:\n\n```json\n{ \"status\": \"success\",\n  \"data\": { \"jobId\": \"op_2f8f...\", \"statusUrl\": \"/apps/operations/op_2f8f...\", \"status\": \"Running\" } }\n```\n\nPoll `GET /apps/operations/{jobId}` until `data.status` reaches a terminal\nvalue. **Completion is read from that field, never from the HTTP code** — a\nfailed operation is still a successful poll.\n\n| `status` | Meaning |\n|----------|---------|\n| `Running` | still working; respect `Retry-After` |\n| `Succeeded` | finished |\n| `Failed` | the work could not be done — `error` carries an RFC 9457 problem object |\n| `Canceled` | the caller asked for it via `DELETE /apps/operations/{jobId}` |\n| `Evicted` | the node took the work away — neither the caller's request nor their input was at fault |\n\nCancellation is **best effort**: the flag is raised and the worker stops at\nits next checkpoint, so `status` stays `Running` until it does.\n\nUnknown, expired and not-yours are one answer (`404`) — a `jobId` must not\nreveal whether someone else has an operation running.\n\n\n## Node-Scoped vs Network-Scoped Calls\n\nEvery endpoint in this specification is served by **an individual FluxNode**.\nThe `https://api.runonflux.io` gateway load-balances across confirmed nodes,\nso it is the right target for network-wide data (blockchain state, global\napplication specifications, node lists) and the wrong target for anything\nthat reports or changes the state of one machine.\n\nCall a specific node directly — `https://<node-ip>:16127` — for:\n\n- node status, benchmark, tier, DOS state, clock drift, peers, topology\n- the applications installed *on that node*, their logs, monitoring and volumes\n- anything marked **Admin** or **AdminAndFluxTeam**, which is authorised\n  against *that node's* operator FluxID\n- the FluxShare, Syncthing, backup/restore and volume-browser surfaces\n\nNode API calls are **not rate-limited by FluxOS itself**. The public gateway\nmay apply its own limits.\n\n\n## Deprecated & Removed Endpoints\n\nEndpoints marked `deprecated` in this document still work; endpoints\ndescribed as **Removed** answer an error body with `code: 410`.\n\n| Kind | Endpoints |\n|------|-----------|\n| **Removed** (answer `code: 410`) | `/apps/apppause`, `/apps/appunpause`, `/apps/appmonitorstream`, `/apps/startmonitoring`, `/apps/stopmonitoring` |\n| **Deleted** (no longer routed) | `/flux/cruxid`, `/flux/adjustcruxid`, `/flux/rebuildhome`, `/explorer/fluxtxs`, `/apps/installtemporarylocalapp`, `POST /apps/fluxshare/upload` |\n| **Deleted in 8.19.0** | The daemon's wallet and shielded-pool RPCs; Syncthing's proxied read, debug, event and control routes; FluxShare upload, share, rename and delete; `/flux/blockedports`, `/flux/blockedrepositories` and their `adjust…` routes. See API Version Information. |\n| **Renamed** | `/flux/rebuildhome` → `/flux/rebuildui` |\n| **Aliases** | every `/zelid/*` route aliases the matching `/id/*` route; every `/daemon/*zelnode*` route aliases its `*fluxnode*` counterpart; `/flux/zelid` aliases `/flux/id`; `/benchmark/signzelnodetransaction` aliases `/benchmark/signfluxnodetransaction`; `/flux/broadcastmessageto{outgoing,incoming}` both delegate to `/flux/broadcastmessage` |\n\n\n## Authentication Workflows\n\n\n### 🔐 Complete Authentication Flow\n\n**Step 1: Get Login Phrase**\n```bash\ncurl -X GET \"https://api.runonflux.io/id/loginphrase\"\n```\n\n**Step 2: Sign the Login Phrase**\n- **SSP Wallet**: Use browser extension + mobile app to sign the message\n- **ZelCore**: Use the wallet's message signing feature  \n- **MetaMask**: Use `personal_sign` method\n- **Hardware Wallet**: Sign via hardware device integration\n\n**Step 3: Verify Login** \n```bash\ncurl -X POST \"https://api.runonflux.io/id/verifylogin\" \\\n  -H \"Content-Type: text/plain\" \\\n  -d '{\n    \"zelid\": \"your-wallet-address\",\n    \"loginPhrase\": \"phrase-from-step-1\", \n    \"signature\": \"your-signature-from-step-2\"\n  }'\n```\n\n**Step 4: Use Authentication Header**\n```bash\ncurl -X GET \"https://api.runonflux.io/id/loggedsessions\" \\\n  -H \"zelidauth: zelid=your-address&signature=your-signature&loginPhrase=your-phrase\"\n```\n\n\n### 📱 SSP Wallet Integration Guide\n\n**Browser Extension Setup:**\n1. Install SSP Wallet Chrome Extension\n2. Install SSP Key mobile app (iOS/Android)\n3. Pair devices using QR code\n4. Fund wallet with small amount for testing\n\n**Signing Messages with SSP:**\n```javascript\n// Connect to SSP Wallet\nif (window.ssp) {\n  const accounts = await window.ssp.request({\n    method: 'wallet_requestPermissions',\n    params: [{ wallet_accounts: {} }]\n  });\n  \n  // Sign login phrase\n  const signature = await window.ssp.request({\n    method: 'personal_sign',\n    params: [loginPhrase, accounts[0]]\n  });\n}\n```\n\n\n### 🦊 MetaMask Integration Guide\n\n**Connect and Sign:**\n```javascript\n// Connect MetaMask\nconst accounts = await ethereum.request({\n  method: 'eth_requestAccounts'\n});\n\n// Sign login phrase\nconst signature = await ethereum.request({\n  method: 'personal_sign',\n  params: [loginPhrase, accounts[0]]\n});\n\n// Use Ethereum address as zelid\nconst zelid = accounts[0];\n```\n\n\n### 🔑 ZelCore Wallet Integration\n\n**Deep Link Integration:**\n```javascript\n// Generate ZelCore deep link for signing\nconst zelcoreUrl = `zel:?action=sign&message=${encodeURIComponent(loginPhrase)}&icon=https://yourapp.com/icon.png&callback=${encodeURIComponent('https://yourapp.com/auth/callback')}`;\n\n// Open ZelCore for signing\nwindow.location.href = zelcoreUrl;\n```\n\n**WebSocket Integration:**\n```javascript\n// Listen for ZelCore signature via WebSocket\nconst ws = new WebSocket(`wss://api.runonflux.io/ws/id/${loginPhrase}`);\n\nws.onmessage = (event) => {\n  const authData = JSON.parse(event.data);\n  if (authData.status === 'success') {\n    // Authentication successful\n    console.log('Signed in with FluxID:', authData.data.zelid);\n  }\n};\n```\n\n\n### 🔗 WalletConnect v2 Integration\n\n**Setup WalletConnect:**\n```javascript\nimport { SignClient } from '@walletconnect/sign-client';\n\nconst signClient = await SignClient.init({\n  projectId: 'your-walletconnect-project-id',\n  metadata: {\n    name: 'Your Flux App',\n    description: 'Flux Network Integration',\n    url: 'https://yourapp.com',\n    icons: ['https://yourapp.com/logo.png']\n  }\n});\n\n// Connect to wallet\nconst { uri, approval } = await signClient.connect({\n  requiredNamespaces: {\n    eip155: {\n      methods: ['personal_sign'],\n      chains: ['eip155:1'],\n      events: ['chainChanged', 'accountsChanged']\n    }\n  }\n});\n\n// Sign message when connected\nconst signature = await signClient.request({\n  topic: session.topic,\n  chainId: 'eip155:1',\n  request: {\n    method: 'personal_sign',\n    params: [loginPhrase, address]\n  }\n});\n```\n\n\n### 📧 Traditional Email Authentication\n\n**Firebase Integration:**\n```javascript\nimport { getAuth, signInWithEmailAndPassword } from 'firebase/auth';\n\n// Email/password login\nconst auth = getAuth();\nconst userCredential = await signInWithEmailAndPassword(auth, email, password);\n\n// Get ID token for API authentication\nconst idToken = await userCredential.user.getIdToken();\n\n// Use token in API calls\nfetch('https://api.runonflux.io/protected-endpoint', {\n  headers: {\n    'Authorization': `Bearer ${idToken}`,\n    'Content-Type': 'application/json'\n  }\n});\n```\n\n\n### ⚠️ Common Integration Issues\n\n**Login Phrase Expiration:**\n```javascript\n// Always check phrase timestamp\nconst phraseTimestamp = parseInt(loginPhrase.substring(0, 13));\nconst now = Date.now();\nconst age = now - phraseTimestamp;\n\nif (age > 15 * 60 * 1000) { // 15 minutes\n  throw new Error('Login phrase expired, get a new one');\n}\n```\n\n**Signature URL Encoding:**\n```javascript\n// Always URL encode signatures for headers\nconst encodedSignature = encodeURIComponent(signature);\nconst authHeader = `zelid=${zelid}&signature=${encodedSignature}&loginPhrase=${loginPhrase}`;\n```\n\n**Error Handling:**\n```javascript\ntry {\n  const response = await fetch('/api/authenticated-endpoint', {\n    headers: { 'zelidauth': authHeader }\n  });\n  \n  if (response.status === 401) {\n    // Re-authenticate user\n    redirectToLogin();\n  }\n} catch (error) {\n  console.error('API call failed:', error);\n}\n```\n\n\n## API Version Information\n\n**Current Version**: 8.20.0\n\n**Version Notes**:\n- All endpoints documented in this specification are available in FluxOS **8.20.0**\n- This documentation reflects the current stable API implementation and is generated against `ZelBack/src/routes.js` of the [Flux repository](https://github.com/runonflux/flux)\n- For the latest changes and updates, refer to the [Flux GitHub repository](https://github.com/runonflux/flux)\n\n**Changes in 8.19.0 and 8.20.0**\n\n| Area | What changed |\n|------|--------------|\n| **Wallet RPCs** | A fluxnode has no wallet, so FluxOS no longer routes the daemon's wallet and shielded-pool RPCs (balances, sending, signing, key import and export, `z_*`). Raw transactions can still be created, decoded and broadcast. |\n| **Syncthing** | FluxOS no longer proxies Syncthing's REST API: its read, debug, event and control routes are gone. The configuration and database `POST`s, `/syncthing/deviceid`, the metrics and the peer diagnostics remain. |\n| **FluxShare** | A node is no longer a personal file host: upload, share, rename and delete are gone, and so is the share-token link. The operator can still list and download what a node holds with `/apps/fluxshare/getfolder` and `/apps/fluxshare/getfile`. |\n| **Blocked ports and repositories** | The operator's lists are retired with their routes; the signed network policy carries the blocked lists. |\n| **Network policy** | Routes that pull images (`installapplocally`, `testappinstall`, `redeploy`, `redeploycomponent`) answer `503` until the node holds the signed network policy, and `/flux/enterpriseappowners` reads its owners from it. |\n| **Node fitness** | `GET /flux/health` is new: the checks that also gate `GET /id/loginphrase`. Syncthing refuses a phrase only on a node whose Syncthing FluxOS supervises, once it is measured unhealthy. |\n| **Payments** | `/payment/*` is a relay between a page and the wallet it opens: the transaction id the wallet posts goes to the waiting page, and nothing is verified or recorded. |\n| **Privileges** | The Flux team can restart FluxOS (`/flux/restart`: **AdminAndFluxTeam**); backup routes only reach the named application's own volume. |\n| **Syncthing folders** | `POST /apps/promotedfolders` is new: what each receive-only folder holds, so peers elect the node that holds the data. |\n| **Pricing** (8.20.0) | Synced (`g:`) applications pay the full price, and USD prices end in .49 or .99. |\n| **Volume files** (8.20.0) | `POST /apps/compressobject` archives a list of entries. |\n\n**Notable changes since 6.6.x**\n\n| Area | What changed |\n|------|--------------|\n| **Long-running operations** | Volume and file operations no longer block the request. They return a `jobId`; poll `GET /apps/operations/{jobId}` and cancel with `DELETE /apps/operations/{jobId}`. |\n| **Volume file management** | `POST /apps/moveobject`, `/apps/copyobject`, `/apps/compressobject` and `/apps/extractobject` operate inside an application's persistent volume. |\n| **Placement** | `POST /apps/placementfeasibility` answers whether a prospective specification can be placed, and `GET /apps/placementlocations` publishes the live node/fault-domain/tier geography. |\n| **Network observability** | `GET /flux/topology`, `/flux/networkhealth`, `/flux/peerhistory`, `/flux/unstablenodes`, `/flux/peers` and the SSE `GET /flux/eventstream`. |\n| **Tampering detection** | `GET /apps/tamperingevents` reports containers whose running image no longer matches the registered specification. |\n| **ArcaneOS** | `GET /arcane/authchallenge` and `POST /arcane/configsync` for hardware-attested node configuration. Available only on ArcaneOS nodes. |\n| **Syncthing** | Metrics, health summary, metrics history and peer sync diagnostics endpoints, plus the full configuration write surface. |\n| **Deprecations** | Every `/zelid/*` route is a deprecated alias of the matching `/id/*` route, and every `/daemon/*zelnode*` route a deprecated alias of its `*fluxnode*` counterpart. `/flux/cruxid`, `/flux/adjustcruxid`, `/flux/rebuildhome`, `/explorer/fluxtxs` and `/apps/installtemporarylocalapp` were removed. |"},"externalDocs":{"description":"Flux Documentation & Resources Hub","url":"https://docs.runonflux.com"},"tags":[{"name":"Authentication","description":"**Authentication & Authorization Endpoints**\nEssential API endpoints for secure authentication and authorization with the Flux network.  These endpoints handle login phrase generation, message signing verification, and session  management for all supported wallet types including SSP Wallet, ZelCore, MetaMask, and  WalletConnect integrations.\n**Key Features:** - Multi-wallet authentication support - Secure login phrase generation - Cryptographic signature verification  - Session token management - 5-tier permission system integration"},{"name":"ID","description":"**Identity & User Management**\nComprehensive identity management endpoints that handle user authentication, authorization  levels, and identity verification across multiple blockchain addresses (Bitcoin P2PKH,  Ethereum, FluxID). These endpoints manage user sessions, permissions, and access control  throughout the Flux ecosystem.\n**Supported Address Types:** - Bitcoin P2PKH addresses - Ethereum addresses   - FluxID addresses - Multi-signature addresses"},{"name":"Daemon","description":"**Flux Daemon Operations**\nCore blockchain daemon endpoints for interacting with the underlying Flux blockchain node. These endpoints provide access to blockchain data, mining information, network statistics, and node management functions. Essential for node operators and  developers building blockchain-integrated applications. A fluxnode has no wallet: FluxOS exposes no wallet or shielded-pool RPCs (removed in 8.19.0).\n**Core Functions:** - Blockchain state queries - Raw transaction creation, decoding and broadcasting - Network information - Mining and staking operations"},{"name":"Benchmark","description":"**Node Performance & Benchmarking**\nEndpoints for monitoring and managing Flux node performance benchmarks. These APIs provide access to hardware specifications, performance metrics, benchmark results, and node tier qualification status. Critical for node operators to ensure optimal performance and  maintain network participation requirements.\n**Monitoring Capabilities:** - Hardware specification reporting - Performance benchmark execution - Node tier status verification - Resource utilization metrics - Network connectivity testing"},{"name":"Flux","description":"**Flux Network Operations**\nCore network endpoints for interacting with the broader Flux decentralized network. These APIs provide access to network statistics, node information, consensus data, and network-wide operations that facilitate the decentralized cloud infrastructure.\n**Network Services:** - Node discovery and registry - Network consensus information - Global network statistics - Peer-to-peer communication - Distributed coordination"},{"name":"Apps","description":"**Decentralized Application Management**\nComprehensive endpoints for deploying, managing, and monitoring decentralized applications  (dApps) on the Flux network. These APIs handle the complete application lifecycle from  deployment to scaling, including Docker container management, resource allocation, and  global distribution across the Flux node network.\n**Application Services:** - Docker-based app deployment - Application lifecycle management - Resource scaling and allocation - Multi-region distribution - Application marketplace integration - Performance monitoring and analytics"},{"name":"Explorer","description":"**Blockchain Explorer Services**\nBlockchain exploration endpoints providing detailed access to on-chain data, transaction  history, address information, and network analytics. These APIs power blockchain explorers and provide developers with comprehensive blockchain data access for building analytics and monitoring applications.\n**Explorer Features:** - Transaction history and details - Address balance and activity - Block information and statistics - Network-wide analytics - Search and filtering capabilities"},{"name":"Syncthing","description":"**Distributed File Synchronization**\nEndpoints for managing Syncthing-based distributed file synchronization services. These APIs enable secure, decentralized file sharing and synchronization across Flux nodes, providing reliable data distribution and backup capabilities for decentralized applications and user data.\n**Synchronization Services:** - Peer-to-peer file synchronization - Distributed storage management - Conflict resolution - Encryption and security - Bandwidth optimization"},{"name":"Fluxshare","description":"**Decentralized File Sharing**\nAdvanced file sharing and storage endpoints built on the Flux decentralized network. FluxShare provides secure, distributed file storage with redundancy, encryption, and global accessibility. Ideal for building decentralized storage applications and content distribution networks.\n**Storage Features:** - Distributed file storage - Redundancy and fault tolerance - End-to-end encryption - Global content distribution - Access control and sharing permissions"},{"name":"Backup/Restore","description":"**Application Backup & Recovery**\nComprehensive backup and disaster recovery endpoints for Flux applications and data. These APIs provide automated backup creation, version management, and restoration capabilities to ensure data integrity and business continuity for decentralized applications running on the Flux network.\n**Backup Services:** - Automated backup scheduling - Version control and history - Cross-region replication   - Point-in-time recovery - Disaster recovery orchestration"},{"name":"Volume Browser","description":"**Persistent Storage Management**\nAdvanced volume and persistent storage management endpoints for containerized applications. These APIs provide comprehensive file system operations, storage allocation, and data management capabilities for applications requiring persistent data storage across the distributed Flux network.\n**Storage Management:** - Volume provisioning and management - File system operations - Storage quota enforcement - Data migration and replication - Performance optimization"},{"name":"IOUtils","description":"**File System Operations & Utilities**\nLow-level file system operation endpoints providing essential I/O utilities for application development and system administration. These APIs offer direct file manipulation, directory management, and system utilities required for advanced application deployment and management on Flux nodes.\n**I/O Operations:** - File and directory management - Permission and ownership control - Data transfer utilities - System resource monitoring - Batch operation support"},{"name":"ArcaneOS","description":"**Hardened Node Operating System**\nEndpoints exposed only by nodes running ArcaneOS, the hardened FluxOS appliance image. They cover attested configuration synchronisation, where the node's identity keys are held by the operating system rather than by FluxOS. Every other node answers these routes with `501 Not Implemented`.\n**ArcaneOS Capabilities:** - Hardware-backed key custody - Challenge/response configuration sync via `flux-configd` - Watchdog-managed CloudUI - HTTPS-only endpoints"},{"name":"Payments","description":"**Wallet Payment Callbacks**\nA rendezvous between a web page and a wallet it opens. The page mints a payment id on a node, listens on that node's `/ws/payment/<paymentId>` WebSocket, and gives the wallet a callback to `POST /payment/verifypayment?paymentid=<paymentId>`; the transaction id the wallet posts there is delivered to the waiting page. The node relays the transaction id as a claim and records nothing: it is not a payment verification.\n**Payment Services:** - Payment id issuance, rate-limited per caller - Wallet callback relay to the waiting browser"}],"x-tagGroups":[{"name":"Getting Started","tags":["Authentication","ID"]},{"name":"Applications","tags":["Apps","Volume Browser","IOUtils"]},{"name":"Node Operations","tags":["Flux","Benchmark","ArcaneOS"]},{"name":"Blockchain","tags":["Daemon","Explorer"]},{"name":"Storage & Sync","tags":["Syncthing","Fluxshare","Backup/Restore"]},{"name":"Commerce","tags":["Payments"]}],"servers":[{"url":"https://api.runonflux.io","description":"Production API Gateway - global load-balanced endpoint. Requests are served by whichever confirmed FluxNode the gateway routes to, so node-scoped endpoints (anything that reports or changes the state of one machine) should be called against a specific node instead."},{"url":"https://{nodeip}:16127","description":"Direct Flux Node Connection - Connect directly to specific node","variables":{"nodeip":{"description":"Flux node IP address or hostname","default":"localhost"}}},{"url":"http://localhost:16127","description":"Local Development Node - For local testing"},{"url":"https://explorer.runonflux.io","description":"Explorer API - Blockchain data and statistics"},{"url":"https://stats.runonflux.io","description":"Network Statistics API - Real-time network metrics"}],"paths":{"/id/loginphrase":{"get":{"tags":["Authentication","ID"],"summary":"Obtain login phrase","description":"Obtain valid Login Phrase for signing into Flux. Login Phrase is at least 40 characters, first 13 characters is server timestamp and is valid for 15 minutes.\n\nA phrase is issued only to a node that passes the same fitness checks as `GET /flux/health`, run in this order: local database, Syncthing, Docker, tier hardware, DOS state, applications DOS state. The first failing check is answered instead of a phrase as an error body; a DOS failure carries `name` `DOS` or `CONNERROR` and the DOS score as `code`. Since 8.19.0 the Syncthing check refuses only a node whose Syncthing FluxOS supervises (a local Syncthing on a node that is not ArcaneOS), and only once Syncthing has been measured unhealthy; a node that has not yet measured it is not refused. `GET /id/emergencyphrase` issues a phrase without these checks. **Public**","operationId":"loginPhrase","security":[],"x-codeSamples":[{"lang":"curl","source":"curl -X GET \"https://api.runonflux.io/id/loginphrase\"\n"},{"lang":"JavaScript","source":"const response = await fetch('https://api.runonflux.io/id/loginphrase');\nconst data = await response.json();\nconsole.log(data.data); // Login phrase string\n"},{"lang":"Node.js","source":"const https = require('https');\n\nconst options = {\n  hostname: 'api.runonflux.io',\n  path: '/id/loginphrase',\n  method: 'GET'\n};\n\nconst req = https.request(options, (res) => {\n  let data = '';\n  res.on('data', chunk => data += chunk);\n  res.on('end', () => {\n    const result = JSON.parse(data);\n    console.log(result.data);\n  });\n});\nreq.end();\n"},{"lang":"Python","source":"import requests\n\nresponse = requests.get('https://api.runonflux.io/id/loginphrase')\ndata = response.json()\nlogin_phrase = data['data']\nprint(login_phrase)\n"},{"lang":"PHP","source":"<?php\n$response = file_get_contents('https://api.runonflux.io/id/loginphrase');\n$data = json_decode($response, true);\n$loginPhrase = $data['data'];\necho $loginPhrase;\n?>\n"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"loginphrase"}}},"example":{"status":"success","data":"1574994809615gj4ct52kzz695twl0l27np0ivkmvu2ow4lbtpwk2nvf2k"}}}}}}},"/id/emergencyphrase":{"get":{"tags":["ID"],"summary":"Obtain emergency login phrase","description":"Obtain an emergency Login Phrase for signing into Flux, issued without the node-fitness checks of `GET /id/loginphrase`. Valid for 15 minutes. **Public**","operationId":"emergencyLoginPhrase","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"loginphrase"}}},"example":{"status":"success","data":"1587939091067l06vdyv5wtl80q5aj0npi3vyyig869ogf7o7jxfpu68r"}}}}}}},"/id/verifylogin":{"post":{"tags":["Authentication","ID"],"summary":"Login into Flux","description":"Login into Flux by submitting correct FluxID, login phrase and signature. Note that to get the signature of the signed message you would need to do the signing on Zelcore or your BTC wallet or your ETH wallet. If success status response is returned, we can use the supplied data(zelid, loginPhrase, signature) as zelidauth header as part of api calls that require a user to be logged in. Additionally it is possible to listen for a response on websocket. ws://{Flux_IP}:16127/ws/id/{loginPhrase}. **Public**","operationId":"verifyLogin","security":[],"x-codeSamples":[{"lang":"curl","source":"curl -X POST \"https://api.runonflux.io/id/verifylogin\" \\\n  -H \"Content-Type: text/plain\" \\\n  -d '{\n    \"zelid\": \"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC\",\n    \"loginPhrase\": \"1574994809615gj4ct52kzz695twl0l27np0ivkmvu2ow4lbtpwk2nvf2k\",\n    \"signature\": \"IAMZBB0p8aQ6A0Zt8uUKFLdWvPJlBypuczhaM6/R+s5bI72NQs/TPF1KYywvJlumMZyvLmk7JelDwaQbfTjqtSs=\"\n  }'\n"},{"lang":"JavaScript","source":"const loginData = {\n  zelid: \"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC\",\n  loginPhrase: \"1574994809615gj4ct52kzz695twl0l27np0ivkmvu2ow4lbtpwk2nvf2k\", \n  signature: \"IAMZBB0p8aQ6A0Zt8uUKFLdWvPJlBypuczhaM6/R+s5bI72NQs/TPF1KYywvJlumMZyvLmk7JelDwaQbfTjqtSs=\"\n};\n\nconst response = await fetch('https://api.runonflux.io/id/verifylogin', {\n  method: 'POST',\n  headers: { 'Content-Type': 'text/plain' },\n  body: JSON.stringify(loginData)\n});\n\nconst result = await response.json();\nconsole.log(result);\n"},{"lang":"Python","source":"import requests\nimport json\n\nlogin_data = {\n    \"zelid\": \"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC\",\n    \"loginPhrase\": \"1574994809615gj4ct52kzz695twl0l27np0ivkmvu2ow4lbtpwk2nvf2k\",\n    \"signature\": \"IAMZBB0p8aQ6A0Zt8uUKFLdWvPJlBypuczhaM6/R+s5bI72NQs/TPF1KYywvJlumMZyvLmk7JelDwaQbfTjqtSs=\"\n}\n\nresponse = requests.post(\n    'https://api.runonflux.io/id/verifylogin',\n    headers={'Content-Type': 'text/plain'},\n    data=json.dumps(login_data)\n)\n\nresult = response.json()\nprint(result)\n"}],"requestBody":{"content":{"text/plain":{"schema":{"$ref":"#/components/schemas/FluxIDLogin"},"example":{"loginPhrase":"1575012988077darschvve5ag82g8e8sgeij4sn61842ya7ovxi9r3kba","zelid":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC","signature":"IAMZBB0p8aQ6A0Zt8uUKFLdWvPJlBypuczhaM6/R+s5bI72NQs/TPF1KYywvJlumMZyvLmk7JelDwaQbfTjqtSs="}}},"description":"FluxID login object","required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"status","enum":["success","error"]},"data":{"type":"object","properties":{"message":{"type":"string","description":"explanation of status"},"zelid":{"type":"string","description":"supplied FluxID or bitcoin P2PKH address or ethereum address"},"loginPhrase":{"type":"string","description":"valid and active loginPhrase"},"signature":{"type":"string","description":"signature of loginPhrase signed with zelid/btc/eth address"},"privilage":{"type":"string","description":"Granted Flux privilege. The field is spelled `privilage` on the wire.","enum":["user","fluxteam","admin"]},"createdAt":{"type":"string","format":"date-time","description":"Session start (the login phrase timestamp)"},"expireAt":{"type":"string","format":"date-time","description":"Session expiry, 14 days after createdAt"}}}}},"example":{"status":"success","data":{"message":"Successfully logged in","zelid":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC","loginPhrase":"1575012988077darschvve5ag82g8e8sgeij4sn61842ya7ovxi9r3kba","signature":"IAMZBB0p8aQ6A0Zt8uUKFLdWvPJlBypuczhaM6/R+s5bI72NQs/TPF1KYywvJlumMZyvLmk7JelDwaQbfTjqtSs=","privilage":"admin","createdAt":"2019-11-29T07:36:28.077Z","expireAt":"2019-12-13T07:36:28.077Z"}}}}}}}},"/id/providesign":{"post":{"tags":["Authentication","ID"],"summary":"Provide Signature","description":"Provide requested signature from signed message to return data. **Public**","operationId":"provideSign","security":[],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"address":{"type":"string","description":"FluxID or any P2PKH Bitcoin address or Ethereum address"},"message":{"type":"string","description":"Login phrase message that was provided by GET /id/loginphrase"},"signature":{"type":"string","description":"Signature of signed loginPhrase with zelid/btc/eth address"}}},"example":{"address":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC","message":"1575012988077darschvve5ag82g8e8sgeij4sn61842ya7ovxi9r3kba","signature":"IAMZBB0p8aQ6A0Zt8uUKFLdWvPJlBypuczhaM6/R+s5bI72NQs/TPF1KYywvJlumMZyvLmk7JelDwaQbfTjqtSs="}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"signature":{"type":"string","description":"Signature of signed loginPhrase with FluxID"},"identifier":{"type":"string","description":"FluxID, P2PKH or Ethereum address followed by the last 13 characters of the signed message"},"createdAt":{"type":"string","description":"Start date and time of vaild message"},"expireAt":{"type":"string","description":"End date and and time of valid message"},"_id":{"type":"string","description":"ObjectID"}}}}},"example":{"status":"success","data":{"signature":"IAMZBB0p8aQ6A0Zt8uUKFLdWvPJlBypuczhaM6/R+s5bI72NQs/TPF1KYywvJlumMZyvLmk7JelDwaQbfTjqtSs=","identifier":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uCya7ovxi9r3kba","createdAt":"2020-09-12T11:28:28.457Z","expireAt":"2020-09-12T11:43:28.457Z","_id":"5f6cb0bcb7e30e24063e1777"}}}}}}}},"/id/loggedsessions":{"get":{"tags":["ID"],"summary":"Obtain all logged sessions of FluxID.","description":"Gets all currently active logged sessions in Flux tied to given FluxID. **User**","operationId":"loggedSessions","security":[{"FluxID":[]}],"x-codeSamples":[{"lang":"curl","source":"curl -X GET \"https://api.runonflux.io/id/loggedsessions\" \\\n  -H \"zelidauth: zelid=1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC&signature=IAMZBB0p8aQ6A0Zt8uUKFLdWvPJlBypuczhaM6%2FR%2Bs5bI72NQs%2FTPF1KYywvJlumMZyvLmk7JelDwaQbfTjqtSs%3D&loginPhrase=1574994809615gj4ct52kzz695twl0l27np0ivkmvu2ow4lbtpwk2nvf2k\"\n"},{"lang":"JavaScript","source":"const authHeader = 'zelid=1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC&signature=' + \n  encodeURIComponent('IAMZBB0p8aQ6A0Zt8uUKFLdWvPJlBypuczhaM6/R+s5bI72NQs/TPF1KYywvJlumMZyvLmk7JelDwaQbfTjqtSs=') +\n  '&loginPhrase=1574994809615gj4ct52kzz695twl0l27np0ivkmvu2ow4lbtpwk2nvf2k';\n\nconst response = await fetch('https://api.runonflux.io/id/loggedsessions', {\n  headers: { 'zelidauth': authHeader }\n});\n\nconst result = await response.json();\nconsole.log(result);\n"},{"lang":"Python","source":"import requests\nfrom urllib.parse import quote\n\nauth_header = (\n    f\"zelid=1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC&\"\n    f\"signature={quote('IAMZBB0p8aQ6A0Zt8uUKFLdWvPJlBypuczhaM6/R+s5bI72NQs/TPF1KYywvJlumMZyvLmk7JelDwaQbfTjqtSs=')}&\"\n    f\"loginPhrase=1574994809615gj4ct52kzz695twl0l27np0ivkmvu2ow4lbtpwk2nvf2k\"\n)\n\nresponse = requests.get(\n    'https://api.runonflux.io/id/loggedsessions',\n    headers={'zelidauth': auth_header}\n)\n\nresult = response.json()\nprint(result)\n"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"zelid":{"type":"string","description":"associated FluxID"},"loginPhrase":{"type":"string","description":"login phrase used for session"},"createdAt":{"type":"string","format":"date-time","description":"Session start"},"expireAt":{"type":"string","format":"date-time","description":"Session expiry"}}}}}},"example":{"status":"success","data":[{"zelid":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC","loginPhrase":"1566749385160npvtiku0z7yqsxgenyvzfmfrz7pyxrxvflv3sfztbc"},{"zelid":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC","loginPhrase":"1566822581693fuuo3oi0sqdvab9h8baavc0kdawxvbwjgdbjsy5tk739m"},{"zelid":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC","loginPhrase":"1566970790344nhd5tjwyphq4l1azf5o64axfz75b8892poo853ivbfc"},{"zelid":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC","loginPhrase":"15673514189266fzehz9q1ujvw4fg5lsko9q6qrfji3iwfg9hkblx5dpm"},{"zelid":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC","loginPhrase":"1575011828315mzqenqvi9ixaq0yr34g8jtvwgcs3d33cf1ies0myd"},{"zelid":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC","loginPhrase":"1575012988077darschvve5ag82g8e8sgeij4sn61842ya7ovxi9r3kba"}]}}}}}}},"/id/logoutcurrentsession":{"get":{"tags":["ID"],"summary":"Logs out current session","description":"This call logs out currently logged session which is determined by the supplied authentication header. **User**","operationId":"logoutCurrentSession","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Successfully logged out"}}}}}}}},"/id/logoutallsessions":{"get":{"tags":["ID"],"summary":"Logs out all sessions","description":"This call logs out all logged sessions which are determined by the supplied authentication header. **User**","operationId":"logoutAllSession","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Successfully logged out all sessions"}}}}}}}},"/id/loggedusers":{"get":{"tags":["ID"],"summary":"Gets information about logged users","description":"This call gets basic infromation about currently logged sessions of all users. **Admin**","operationId":"loggedUsers","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"zelid":{"type":"string","description":"users FluxID"},"loginPhrase":{"type":"string","description":"login phrase used for session"},"createdAt":{"type":"string","format":"date-time","description":"Session start"},"expireAt":{"type":"string","format":"date-time","description":"Session expiry"}}}}}},"example":{"status":"success","data":[{"zelid":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC","loginPhrase":"1566749385160npvtiku0z7yqsxgenyvzfmfrz7pyxrxvflv3sfztbc"},{"zelid":"1E1NSwDHtvCziYP4CtgiDMcgvgZL64PhkR","loginPhrase":"1575805361736fdk6ak6yn5lgiuebz1oumh9z8rhyw0kf744f1sk2yd43"}]}}}}}}},"/id/activeloginphrases":{"get":{"tags":["ID"],"summary":"Lists active login phrases","description":"This call lists the login phrases that are currently active: issued by `GET /id/loginphrase` or `GET /id/emergencyphrase` less than 15 minutes ago and not yet used. A phrase is removed when it is used to log in successfully. **Admin**","operationId":"activeLoginPhrases","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"loginPhrase":{"type":"string","description":"active login phrase"},"createdAt":{"type":"string","description":"timestamp of loginPhrase creation in server time."},"expireAt":{"type":"string","description":"expiration timestamp of loginPhrase. After this time, the loginPhrase cannot be used anymore."}}}}}},"example":{"status":"success","data":[{"loginPhrase":"1575865221315yqilps02mx0e1tmf5ymtcry8mbzk4u3k3v17tdsxif6","createdAt":"2019-12-09T04:20:21.315Z","expireAt":"2019-12-09T04:35:21.315Z"},{"loginPhrase":"1575865221315yqilps02mx0e1tmf5ymtcry8mbzk4u3k3v17tdsxif6","createdAt":"2019-12-09T04:20:21.315Z","expireAt":"2019-12-09T04:35:21.315Z"}]}}}}}}},"/id/logoutallusers":{"get":{"tags":["ID"],"summary":"Logs out all users","description":"This call logs out all logged users (including fluxteam, admins). **Admin**","operationId":"logoutAllUsers","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Successfully logged out all users"}}}}}}}},"/id/logoutspecificsession":{"post":{"tags":["Authentication","ID"],"summary":"Logs out a specific session","security":[{"FluxID":[]}],"description":"Logs out the session whose `loginPhrase` is sent in the body. Any logged-in FluxID may call it; the session is found by its login phrase alone, so knowing a session's login phrase is what allows logging it out. There is no separate admin path. **User**","operationId":"logoutSpecificSession","requestBody":{"content":{"text/plain":{"schema":{"type":"object","properties":{"loginPhrase":{"description":"Login Phrase of session we want to log out.","type":"string","minLength":40,"example":"1574991374806spbcvsuwerl52tppx9dw5khuz8rew13mkq86gg8r2c"}}},"example":{"loginPhrase":"1575012988077darschvve5ag82g8e8sgeij4sn61842ya7ovxi9r3kba"}}},"description":"Object containing loginPhrase","required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Session successfully logged out"}}}}}}}},"/id/checkprivilege":{"post":{"tags":["ID"],"summary":"Checks the privilege level of user","security":[],"description":"Checks the privilege level of the session described in the body. Answers `success` with `message` `admin` (this node's operator), `fluxteam` or `user`, checked in that order, or `error` with `message` `none` when the session is not valid or a field is missing. **Public**","operationId":"checkLoggedUser","requestBody":{"content":{"text/plain":{"schema":{"type":"object","required":["zelid","loginPhrase","signature"],"properties":{"zelid":{"type":"string","description":"FluxID"},"loginPhrase":{"type":"string","description":"Login phrase of the session"},"signature":{"type":"string","description":"Signature of signed loginPhrase with FluxID"}}},"example":{"zelid":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC","loginPhrase":"1575012988077darschvve5ag82g8e8sgeij4sn61842ya7ovxi9r3kba","signature":"IAMZBB0p8aQ6A0Zt8uUKFLdWvPJlBypuczhaM6/R+s5bI72NQs/TPF1KYywvJlumMZyvLmk7JelDwaQbfTjqtSs="}}},"description":"Object containing privilege level","required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"admin"}}}}}}}},"/flux/startdaemon":{"get":{"tags":["Flux"],"summary":"Starts Flux daemon","description":"Tries to start Flux daemon running on the Flux node the call is run against without any extra parameters. **AdminAndFluxTeam**","operationId":"startdaemon","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Daemon successfully started"}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/flux/restartdaemon":{"get":{"tags":["Flux"],"summary":"Restarts Flux daemon","description":"Tries to restart Flux daemon running on the Flux node the call is run against. Flux daemon is firstly stopped and then started without any extra parameters. **AdminAndFluxTeam**","operationId":"restartdaemon","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Daemon successfully restarted"}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/flux/entermaster":{"get":{"tags":["Flux"],"summary":"Switch to master branch of FluxOS","description":"Tries to switch to master branch of FluxOS. **FluxTeam**","operationId":"FluxEnterMaster","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Master branch successfully entered"}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/flux/enterdevelopment":{"get":{"tags":["Flux"],"summary":"Switch to development branch of FluxOS","description":"Tries to switch to development branch of FluxOS. **FluxTeam**","operationId":"FluxEnterDevelopment","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Development branch successfully entered"}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/flux/reindexdaemon":{"get":{"tags":["Flux"],"summary":"Reindexes Flux daemon","description":"Tries to reindex Flux daemon running on the Flux node the call is run against. Flux daemon is firstly stopped and then started with reindex flag. **Admin**","operationId":"reindexFluxB","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Daemon successfully reindexing"}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/flux/updateflux":{"get":{"tags":["Flux"],"summary":"Updates Flux to the latest version","description":"Updates Flux to the latest version available according to github master branch. Flux will restart its services after the update. **AdminAndFluxTeam**","operationId":"updateFlux","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Flux successfully updating"}}}}}}}},"/flux/hardupdateflux":{"get":{"tags":["Flux"],"summary":"Perform hard update to the latest version","description":"Hard updates to latest version by removing node_modules and package-lock.json before executing git reset --hard and git pull. This may resolve any issues that may arise from Flux not being able to update using the `GET /flux/updateflux` call. Flux will restart its services after the update. **AdminAndFluxTeam**","operationId":"hardUpdateFlux","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Flux successfully updating"}}}}}}}},"/flux/updatedaemon":{"get":{"tags":["Flux"],"summary":"Updates Flux daemon","description":"Updates the Flux daemon of Flux node to the latest available version according to official Flux APT repository. Flux daemon is restarted with no extra parameters during this update. **AdminAndFluxTeam**","operationId":"updateDaemon","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Daemon successfully updated"}}}}}}}},"/flux/updatebenchmark":{"get":{"tags":["Flux"],"summary":"Updates Benchmark daemon","description":"Updates the Benchmark daemon of Flux node to the latest available version according to official Flux APT repository. Benchmark daemon is restarted with no extra parameters during this update. **AdminAndFluxTeam**","operationId":"updateBenchmark","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Benchmark successfully updated"}}}}}}}},"/flux/daemondebug":{"get":{"tags":["Flux"],"summary":"Returns with the Flux debug log","description":"Returns with the debug log located in Flux data directory. **AdminAndFluxTeam**","operationId":"fluxDebug","security":[{"FluxID":[]}],"responses":{"200":{"description":"The log file itself, sent as a download (attachment `debug.log`), not a JSON envelope. An unauthorised call is answered with the JSON error envelope.","content":{"text/plain":{"schema":{"type":"string","description":"Debug log"},"example":"2020-05-09 11:27:30 Flux version v4.0.1-32bd16d-dirty (2020-03-20 19:05:39 +0000) 2020-05-09 11:27:30 AppInit2: parameter interaction: -externalip set -> setting -discover=0 2020-05-09 11:27:30 Using BerkeleyDB version Berkeley DB 6.2.23: (March 28, 2016) 2020-05-09 11:27:30 Default data directory /home/user/.flux 2020-05-09 11:27:30 Using data directory /home/user/.flux/ 2020-05-09 11:27:30 Using config file /home/user/.flux/flux.conf 2020-05-09 11:27:30 Using at most 256 connections (1024 file descriptors available) 2020-05-09 11:27:30 Using 2 threads for script verification 2020-05-09 11:27:30 scheduler thread start 2020-05-09 11:27:30 Loading Sapling (Spend) parameters from /home/user/.zcash-params/sapling-spend.params 2020-05-09 11:27:30 Loading Sapling (Output) parameters from /home/user/.zcash-params/sapling-output.params 2020-05-09 11:27:30 Loading Sapling (Sprout Groth16) parameters from /home/user/.zcash-params/sprout-groth16.params 2020-05-09 11:27:34 Loaded Sapling parameters in 4.129045s seconds. 2020-05-09 11:27:34 Binding RPC on address 0.0.0.0 port 16124 failed. 2020-05-09 11:27:34 HTTP: creating work queue of depth 16 2020-05-09 11:27:34 HTTP: starting 4 worker threads 2020-05-09 11:27:34 Using wallet wallet.dat 2020-05-09 11:27:34 init message: Verifying wallet..."}}}}}},"/flux/benchmarkdebug":{"get":{"tags":["Flux"],"summary":"Returns with the Benchmark debug log","description":"Returns with the debug log located in fluxbenchmark directory. **AdminAndFluxTeam**","operationId":"benchmarkDebuf","security":[{"FluxID":[]}],"responses":{"200":{"description":"The log file itself, sent as a download (attachment `debug.log`), not a JSON envelope. An unauthorised call is answered with the JSON error envelope.","content":{"text/plain":{"schema":{"type":"string","description":"Debug log"},"example":"2020-05-13 16:59:02 Benchmark version v1.0.0-beta1-53e0ea2-dirty (2020-04-25 13:03:38 +0800) 2020-05-13 16:59:02 Using OpenSSL version OpenSSL 1.1.1a  20 Nov 2018 2020-05-13 16:59:02 HTTP: creating work queue of depth 16 2020-05-13 16:59:02 HTTP: starting 4 worker threads 2020-05-13 16:59:02 Bound to [::]:16225 2020-05-13 16:59:02 Bound to 0.0.0.0:16225 2020-05-13 16:59:02 init message: Done loading 2020-05-13 16:59:02 Starting Fluxnodes Benchmarking Thread 2020-05-13 16:59:03 Path: /home/user/flux/ZelBack 2020-05-13 16:59:03 ---Flux usage: 0.23012 2020-05-13 16:59:03 ---package evaluator system setup starting 2020-05-13 16:59:03 ---package evaluator already installed 2020-05-13 16:59:03 ---package evaluator found version: 1.0.11 2020-05-13 16:59:03 ---package evaluator system setup completed 2020-05-13 16:59:03 ---Starting computer specs test 2020-05-13 16:59:08 ---Found cores: 2 2020-05-13 16:59:08 ---Found ram: 3.8 2020-05-13 16:59:08 ---Found HDD: 38.200001 G 2020-05-13 16:59:08 ---Found HDD: 12.000000 G 2020-05-13 16:59:08 ---Found DD_WRITE: 675.628 2020-05-13 16:59:08 ---Finished computer specs test 2020-05-13 16:59:08 ---Starting package evaluator test 2020-05-13 16:59:29 ---Found eps v1: 157.185 2020-05-13 16:59:29 ---Finished package evaluator test"}}}}}},"/flux/taildaemondebug":{"get":{"tags":["Flux"],"summary":"Returns last lines of Flux debug log","description":"Returns last 100 lines known in the Flux debug log. **AdminAndFluxTeam**","operationId":"tailFluxDebug","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"2020-09-12 01:41:43 keypool reserve 6\n2020-09-12 01:41:43 keypool return 6\n2020-09-12 01:41:47 UpdateTip: new best=00000001445f7d700c03f4815cbd3504ba4b133f33493fa0513dfb34a904c024 height=684556  log2_work=45.426889  tx=4126528 date=2020-09-12 01:40:03 progress=0.999999 cache=55.5MiB(15859tx)\n2020-09-12 01:41:48 keypool reserve 6\n2020-09-12 01:41:48 keypool return 6\n2020-09-12 01:41:51 keypool reserve 6\n2020-09-12 01:41:51 keypool return 6\n2020-09-12 01:41:56 peer=80 using obsolete version 170006; disconnecting\n2020-09-12 01:41:56 ProcessMessages(version, 103 bytes) FAILED peer=80\n2020-09-12 01:41:56 keypool reserve 6\n2020-09-12 01:41:56 keypool return 6\n2020-09-12 01:42:02 keypool reserve 6\n2020-09-12 01:42:02 keypool return 6\n2020-09-12 01:42:07 keypool reserve 6\n2020-09-12 01:42:07 keypool return 6\n2020-09-12 01:42:12 keypool reserve 6\n2020-09-12 01:42:12 keypool return 6\n2020-09-12 01:42:17 keypool reserve 6\n2020-09-12 01:42:17 keypool return 6\n2020-09-12 01:42:22 keypool reserve 6\n2020-09-12 01:42:22 keypool return 6\n2020-09-12 01:42:27 keypool reserve 6\n2020-09-12 01:42:27 keypool return 6\n2020-09-12 01:42:32 keypool reserve 6\n2020-09-12 01:42:32 keypool return 6\n2020-09-12 01:42:37 keypool reserve 6\n2020-09-12 01:42:37 keypool return 6\n2020-09-12 01:42:42 keypool reserve 6\n2020-09-12 01:42:42 keypool return 6\n2020-09-12 01:42:47 keypool reserve 6\n2020-09-12 01:42:47 keypool return 6\n2020-09-12 01:42:49 keypool reserve 6\n2020-09-12 01:42:49 keypool return 6\n2020-09-12 01:42:52 keypool reserve 6\n2020-09-12 01:42:52 keypool return 6\n2020-09-12 01:42:57 keypool reserve 6\n2020-09-12 01:42:57 keypool return 6\n2020-09-12 01:43:02 keypool reserve 6\n2020-09-12 01:43:02 keypool return 6\n2020-09-12 01:43:07 keypool reserve 6\n2020-09-12 01:43:07 keypool return 6\n2020-09-12 01:43:12 keypool reserve 6\n2020-09-12 01:43:12 keypool return 6\n2020-09-12 01:43:17 keypool reserve 6\n2020-09-12 01:43:17 keypool return 6\n2020-09-12 01:43:22 keypool reserve 6\n2020-09-12 01:43:22 keypool return 6\n2020-09-12 01:43:27 keypool reserve 6\n2020-09-12 01:43:27 keypool return 6\n2020-09-12 01:43:32 keypool reserve 6\n2020-09-12 01:43:32 keypool return 6\n2020-09-12 01:43:37 keypool reserve 6\n2020-09-12 01:43:37 keypool return 6\n2020-09-12 01:43:42 keypool reserve 6\n2020-09-12 01:43:42 keypool return 6\n2020-09-12 01:43:47 keypool reserve 6\n2020-09-12 01:43:47 keypool return 6\n2020-09-12 01:43:52 keypool reserve 6\n2020-09-12 01:43:52 keypool return 6\n2020-09-12 01:43:57 keypool reserve 6\n2020-09-12 01:43:57 keypool return 6\n2020-09-12 01:44:02 keypool reserve 6\n2020-09-12 01:44:02 keypool return 6\n2020-09-12 01:44:07 keypool reserve 6\n2020-09-12 01:44:07 keypool return 6\n2020-09-12 01:44:12 keypool reserve 6\n2020-09-12 01:44:12 keypool return 6\n2020-09-12 01:44:17 keypool reserve 6\n2020-09-12 01:44:17 keypool return 6\n2020-09-12 01:44:17 peer=81 using obsolete version 170013; disconnecting\n2020-09-12 01:44:17 ProcessMessages(version, 103 bytes) FAILED peer=81\n2020-09-12 01:44:22 keypool reserve 6\n2020-09-12 01:44:22 keypool return 6\n2020-09-12 01:44:27 keypool reserve 6\n2020-09-12 01:44:27 keypool return 6\n2020-09-12 01:44:29 remove: Remove fluxnode tx from mempool 4fea691828378a1cfabfe43ca29b527aea98c81a9ecb3e12a70a53d2eed2c924\n2020-09-12 01:44:29 UpdateTip: new best=000000747c5d711cb2ae3187797051307b10c2732299cdc2cb8078b1cef91d7d height=684557  log2_work=45.426889  tx=4126534 date=2020-09-12 01:43:47 progress=1.000000 cache=55.5MiB(15862tx)\n2020-09-12 01:44:29 Fluxnode found nothing to do: COutPoint(9c8af320e5, 0)\n2020-09-12 01:44:30 AcceptToMemoryPool: Adding fluxnode transaction to mempool: COutPoint(a5b2a9ebbb, 0) hash: 928f795ecc704c3f0411512ebe3f2732f4f1d94f4dd9239147c8d6cbdf80228e\n2020-09-12 01:44:30 AcceptToMemoryPool: Adding fluxnode transaction to mempool: COutPoint(87b6472d8d, 0) hash: c66fada272ddd909aa20a413e8dfa8ecb9e80bdfabe06fe21ca8216923d8fab6\n2020-09-12 01:44:30 AcceptToMemoryPool: Adding fluxnode transaction to mempool: COutPoint(0aed717593, 0) hash: 090c77f6793fffcfd876c8952b351d4e9bfe40c5795b59480730e8ae3d5edfa4\n2020-09-12 01:44:30 AcceptToMemoryPool: Adding fluxnode transaction to mempool: COutPoint(805d696dda, 0) hash: cb2ba22ca622332c02e5855c1d0f176606a19a59269280e800bce5bcc2b44e1c\n2020-09-12 01:44:30 AcceptToMemoryPool: Adding fluxnode transaction to mempool: COutPoint(35b4698aad, 0) hash: 71edaec39542cc5cf13faa3e181fb98c94d0027a15f3ba90851a9f73c21c91c2\n2020-09-12 01:44:30 AcceptToMemoryPool: Adding fluxnode transaction to mempool: COutPoint(49fa5b457d, 0) hash: 9ef9da575da26ff4dde7a9eb8b339ca0621c28b924fee46865c196b8259903ad\n2020-09-12 01:44:31 AcceptToMemoryPool: Adding fluxnode transaction to mempool: COutPoint(b5bcdabfe4, 0) hash: f854454ad5f32d69b91c778e88d23ec67d695a1d0791c2b97fc4c7d7dfca2220\n2020-09-12 01:44:32 keypool reserve 6\n2020-09-12 01:44:32 keypool return 6\n2020-09-12 01:44:36 AcceptToMemoryPool: Adding fluxnode transaction to mempool: COutPoint(b5dd6b1a79, 0) hash: cc4c40dc30e54b2ef18f4b7ece987292bac2a8248f763bcd60574d610c811c52\n2020-09-12 01:44:36 keypool reserve 6\\n2020-09-12 01:44:36 keypool return 6\n2020-09-12 01:44:36 AcceptToMemoryPool: Adding fluxnode transaction to mempool: COutPoint(57f9033b47, 0) hash: 0218861ec9783cc45731d3fb1d87858a9d0e7b5bbc48f6d34ac01065db66e140\n2020-09-12 01:44:38 AcceptToMemoryPool: Adding fluxnode transaction to mempool: COutPoint(2c122a59b8, 0) hash: f071f20767d1a55783c21e4e754e7d12e18e2729f28935d1db2b13f482d82b91\n2020-09-12 01:44:38 AcceptToMemoryPool: Adding fluxnode transaction to mempool: COutPoint(936393fea0, 0) hash: 8c623265e5e33dfad68967ff14d31d03dd4c62565e2fd97916903cefb780334a\n2020-09-12 01:44:39 AcceptToMemoryPool: Adding fluxnode transaction to mempool: COutPoint(e27995065e, 0) hash: ca7c2362a43ce53c0c95221e2333393724601480e14ba9b330d8fd3ecfc9c4da\n2020-09-12 01:44:41 keypool reserve 6\n2020-09-12 01:44:41 keypool return 6\n2020-09-12 01:44:46 keypool reserve 6\n2020-09-12 01:44:46 keypool return 6\n2020-09-12 01:44:49 keypool reserve 6\n2020-09-12 01:44:49 keypool return 6"}}}}}}}},"/flux/tailbenchmarkdebug":{"get":{"tags":["Flux"],"summary":"Returns last lines of Benchmark debug log","description":"Returns last 100 lines known in the Benchmark debug log. **AdminAndFluxTeam**","operationId":"tailBenchmarkDebug","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"2020-09-12 00:03:39 ---Using Historical eps: 167.846\n2020-09-12 00:03:39 ---Finished package evaluator test\n2020-09-12 00:23:25 Shutdown: In progress...\n2020-09-12 00:23:25 StopRPC: waiting for async rpc workers to stop\n2020-09-12 00:23:25 Shutdown: done\n2020-09-12 00:24:09\n2020-09-12 00:24:09 Benchmark version v1.0.0-beta1-b16e73c-dirty (2020-07-16 22:58:47 +0200)\n2020-09-12 00:24:09 Using OpenSSL version OpenSSL 1.1.1a  20 Nov 2018\n2020-09-12 00:24:09 HTTP: creating work queue of depth 16\n2020-09-12 00:24:09 HTTP: starting 4 worker threads\n2020-09-12 00:24:09 Bound to [::]:16225\n2020-09-12 00:24:09 Bound to 0.0.0.0:16225\n2020-09-12 00:24:09 init message: Done loading\n2020-09-12 00:24:09 Starting Fluxnodes Benchmarking Thread\n2020-09-12 00:24:10 Path: /home/user/flux/ZelBack\n2020-09-12 00:25:10 ---Flux usage: 0.44897\n2020-09-12 00:25:10 ---package evaluator system setup starting\n2020-09-12 00:25:10 ---package evaluator already installed\n2020-09-12 00:25:10 ---package evaluator found version: 1.0.11\n2020-09-12 00:25:10 ---package evaluator system setup completed\n2020-09-12 00:25:10 ---Starting computer specs test\n2020-09-12 00:25:15 ---Found cores: 2\n2020-09-12 00:25:15 ---Found ram: 3.8\n2020-09-12 00:25:15 ---Found HDD: 38.200001 G\n2020-09-12 00:25:15 ---Found HDD: 13.000000 G\n2020-09-12 00:25:15 ---Found DD_WRITE: 745.264\n2020-09-12 00:25:15 ---Finished computer specs test\n2020-09-12 00:25:15 ---Starting package evaluator test\n2020-09-12 00:25:35 ---Found eps v1: 176.479\n2020-09-12 00:25:35 ---Finished package evaluator test\n2020-09-12 00:55:45 ---Restarting benchmarks\n2020-09-12 00:55:46 Path: /home/user/flux/ZelBack\n2020-09-12 00:55:46 ---Flux usage: 0.16616\n2020-09-12 00:55:46 ---package evaluator system setup starting\n2020-09-12 00:55:46 ---package evaluator already installed\n2020-09-12 00:55:46 ---package evaluator found version: 1.0.11\n2020-09-12 00:55:46 ---package evaluator system setup completed\n2020-09-12 00:55:46 ---Starting computer specs test\n2020-09-12 00:55:46 ---Found cores: 2\n2020-09-12 00:55:46 ---Found ram: 3.8\n2020-09-12 00:55:46 ---Found HDD: 38.200001 G\n2020-09-12 00:55:46 ---Found HDD: 13.000000 G\n2020-09-12 00:55:46 ---Using Historical DD_WRITE: 745.264\n2020-09-12 00:55:46 ---Finished computer specs test\n2020-09-12 00:55:46 ---Starting package evaluator test\n2020-09-12 00:55:46 ---Using Historical eps: 176.479\n2020-09-12 00:55:46 ---Finished package evaluator test\n2020-09-12 01:25:56 ---Restarting benchmarks\n2020-09-12 01:25:57 Path: /home/user/flux/ZelBack\n2020-09-12 01:25:57 ---Flux usage: 0.21791\n2020-09-12 01:25:57 ---package evaluator system setup starting\n2020-09-12 01:25:57 ---package evaluator already installed\n2020-09-12 01:25:57 ---package evaluator found version: 1.0.11\n2020-09-12 01:25:57 ---package evaluator system setup completed\n2020-09-12 01:25:57 ---Starting computer specs test\n2020-09-12 01:25:57 ---Found cores: 2\n2020-09-12 01:25:57 ---Found ram: 3.8\n2020-09-12 01:25:57 ---Found HDD: 38.200001 G\n2020-09-12 01:25:57 ---Found HDD: 13.000000 G\n2020-09-12 01:25:57 ---Using Historical DD_WRITE: 745.264\n2020-09-12 01:25:57 ---Finished computer specs test\n2020-09-12 01:25:57 ---Starting package evaluator test\n2020-09-12 01:25:57 ---Using Historical eps: 176.479\n2020-09-12 01:25:57 ---Finished package evaluator test\n2020-09-12 01:56:07 ---Restarting benchmarks\n2020-09-12 01:56:08 Path: /home/user/flux/ZelBack\n2020-09-12 01:56:08 ---Flux usage: 0.19594\n2020-09-12 01:56:08 ---package evaluator system setup starting\n2020-09-12 01:56:08 ---package evaluator already installed\n2020-09-12 01:56:08 ---package evaluator found version: 1.0.11\n2020-09-12 01:56:08 ---package evaluator system setup completed\n2020-09-12 01:56:08 ---Starting computer specs test\n2020-09-12 01:56:08 ---Found cores: 2\n2020-09-12 01:56:08 ---Found ram: 3.8\n2020-09-12 01:56:08 ---Found HDD: 38.200001 G\n2020-09-12 01:56:08 ---Found HDD: 13.000000 G\n2020-09-12 01:56:08 ---Using Historical DD_WRITE: 745.264\n2020-09-12 01:56:08 ---Finished computer specs test\n2020-09-12 01:56:08 ---Starting package evaluator test\n2020-09-12 01:56:28 ---Found eps v1: 167.138\n2020-09-12 01:56:28 ---Finished package evaluator test"}}}}}}}},"/flux/errorlog":{"get":{"tags":["Flux"],"summary":"Returns with the Flux error log","description":"Returns with the error log located in flux directory. **AdminAndFluxTeam**","operationId":"fluxErrorLog","security":[{"FluxID":[]}],"responses":{"200":{"description":"The log file itself, sent as a download (attachment `error.log`), not a JSON envelope. An unauthorised call is answered with the JSON error envelope.","content":{"text/plain":{"schema":{"type":"string","description":"Error log"},"example":"2020-05-13T11:43:35.223Z          {} 2020-05-13T16:58:20.492Z {\"code\":\"ECONNREFUSED\",\"name\":\"Error\",\"message\":\"connect ECONNREFUSED 127.0.0.1:16124\"} 2020-05-13T16:58:20.494Z {} 2020-05-13T16:58:29.181Z {\"code\":\"ECONNREFUSED\",\"name\":\"Error\",\"message\":\"connect ECONNREFUSED 127.0.0.1:16124\"} 2020-05-13T16:59:03.686Z {\"code\":-28,\"name\":\"Error\",\"message\":\"Loading fluxnode payment cache...\"} 2020-05-13T20:51:36.484Z          {} 2020-05-14T07:15:38.355Z          {} 2020-05-14T12:18:38.695Z          {} 2020-05-14T13:30:35.112Z {\"code\":\"ECONNREFUSED\",\"name\":\"Error\",\"message\":\"connect ECONNREFUSED 127.0.0.1:16124\"} 2020-05-14T13:30:35.114Z {} 2020-05-14T13:30:38.782Z          {} 2020-05-14T13:31:09.309Z {\"code\":-28,\"name\":\"Error\",\"message\":\"Loading fluxnode payment cache...\"} 2020-05-14T13:37:30.205Z {\"code\":\"ECONNREFUSED\",\"name\":\"Error\",\"message\":\"connect ECONNREFUSED 127.0.0.1:16124\"} 2020-05-14T13:38:10.519Z {\"code\":-28,\"name\":\"Error\",\"message\":\"Loading fluxnode payment cache...\"} 2020-05-14T13:58:08.810Z          {} 2020-05-14T14:49:30.295Z {\"code\":\"ECONNREFUSED\",\"name\":\"Error\",\"message\":\"connect ECONNREFUSED 127.0.0.1:16124\"} 2020-05-14T14:49:32.669Z {\"code\":\"ECONNREFUSED\",\"name\":\"Error\",\"message\":\"connect ECONNREFUSED 127.0.0.1:16124\"} 2020-05-14T14:49:32.672Z {} 2020-05-14T14:50:10.807Z {\"code\":-28,\"name\":\"Error\",\"message\":\"Loading fluxnode payment cache...\"} 2020-05-14T16:19:39.197Z          {}"}}}}}},"/flux/tailerrorlog":{"get":{"tags":["Flux"],"summary":"Returns last lines of Flux error log","description":"Returns last 100 lines known in the Flux error log. **AdminAndFluxTeam**","operationId":"tailFluxErrorLog","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"2020-09-11T18:36:17.339Z          {}\n2020-09-11T18:36:17.452Z          {}\n2020-09-11T18:36:17.553Z          {}\n2020-09-11T18:36:17.776Z          {}\n2020-09-11T18:36:17.898Z          {}\n2020-09-11T18:36:18.102Z          {}\n2020-09-11T18:36:18.207Z          {}\n2020-09-11T18:36:18.711Z          {}\n2020-09-11T18:36:18.812Z          {}\n2020-09-11T18:36:18.915Z          {}\n2020-09-11T18:36:19.016Z          {}\n2020-09-11T18:36:19.218Z          {}\n2020-09-11T18:36:19.318Z          {}\n2020-09-11T18:36:19.521Z          {}\n2020-09-11T18:48:11.898Z          {}\n2020-09-11T18:48:17.556Z          {}\n2020-09-11T18:48:19.812Z          {}\n2020-09-11T18:52:20.539Z          {}\n2020-09-11T18:55:26.079Z          {}\n2020-09-11T18:55:26.159Z          {}\n2020-09-11T19:00:19.193Z          {}\n2020-09-11T19:04:07.389Z          {}\n2020-09-11T19:04:13.667Z          {}\n2020-09-11T19:14:10.229Z          {}\n2020-09-11T19:24:16.383Z          {}\n2020-09-11T19:32:09.297Z          {}\n2020-09-11T19:56:17.959Z          {}\n2020-09-11T20:03:26.244Z          {}\n2020-09-11T20:06:22.354Z          {}\n2020-09-11T20:24:14.665Z          {}\n2020-09-11T20:36:19.212Z          {}\n2020-09-11T20:42:12.967Z          {}\n2020-09-11T20:44:12.980Z          {}\n2020-09-11T20:49:40.861Z          {}\n2020-09-11T20:52:16.705Z          {}\n2020-09-11T20:52:16.893Z          {}\n2020-09-11T20:52:16.994Z          {}\n2020-09-11T20:54:12.108Z          {}\n2020-09-11T21:07:27.799Z          {}\n2020-09-11T21:08:19.471Z          {}\n2020-09-11T21:13:39.968Z          {}\n2020-09-11T21:16:09.308Z          {}\n2020-09-11T21:24:17.914Z          {}\n2020-09-11T21:24:18.011Z          {}\n2020-09-11T21:29:13.920Z          {}\n2020-09-11T21:36:09.406Z          {}\n2020-09-11T21:48:08.548Z          {}\n2020-09-11T21:54:57.653Z          {}\n2020-09-11T22:08:20.088Z          {}\n2020-09-11T22:12:17.281Z          {}\n2020-09-11T22:15:21.272Z          {}\n2020-09-11T22:22:56.814Z          {}\n2020-09-11T22:26:24.336Z          {}\n2020-09-11T22:40:18.348Z          {}\n2020-09-11T22:48:14.137Z          {}\n2020-09-11T23:12:15.635Z          {}\n2020-09-11T23:23:44.443Z          {}\n2020-09-11T23:24:44.429Z          {}\n2020-09-11T23:27:32.293Z          {}\n2020-09-11T23:29:14.338Z          {}\n2020-09-11T23:50:22.790Z          {}\n2020-09-11T23:50:23.146Z          {}\n2020-09-11T23:51:32.910Z          {}\n2020-09-12T00:01:44.369Z          {}\n2020-09-12T00:05:14.362Z          {}\n2020-09-12T00:11:14.366Z          {}\n2020-09-12T00:16:20.163Z          {}\n2020-09-12T00:23:26.264Z          {}\n2020-09-12T00:23:26.395Z          {}\n2020-09-12T00:23:26.496Z          {}\n2020-09-12T00:23:26.779Z          {}\n2020-09-12T00:23:27.502Z          {}\n2020-09-12T00:23:27.703Z          {}\n2020-09-12T00:23:27.804Z          {}\n2020-09-12T00:23:27.906Z          {}\n2020-09-12T00:23:28.006Z          {}\n2020-09-12T00:23:28.207Z          {}\n2020-09-12T00:23:28.308Z          {}\n2020-09-12T00:23:28.409Z          {}\n2020-09-12T00:23:57.695Z          {}\n2020-09-12T00:24:04.521Z {\"code\":-28,\"name\":\"Error\",\"message\":\"Activating best chain...\"}\n2020-09-12T00:24:19.135Z          {}\n2020-09-12T00:34:22.624Z          {}\n2020-09-12T00:49:11.875Z          {}\n2020-09-12T00:52:11.993Z          {}\n2020-09-12T00:52:17.362Z          {}\n2020-09-12T00:52:18.594Z          {}\n2020-09-12T01:03:14.488Z          {}\n2020-09-12T01:06:56.394Z          {}\n2020-09-12T01:18:11.652Z          {}\n2020-09-12T01:24:13.613Z          {}\n2020-09-12T01:30:41.937Z          {}\n2020-09-12T01:31:13.278Z          {}\n2020-09-12T01:32:19.941Z          {}\n2020-09-12T01:34:11.928Z          {}\n2020-09-12T01:34:56.540Z          {}\n2020-09-12T01:47:11.945Z          {}\n2020-09-12T01:56:27.102Z          {}\n2020-09-12T02:01:12.047Z          {}\n2020-09-12T02:15:22.973Z          {}"}}}}}}}},"/flux/nodetier":{"get":{"tags":["Flux"],"summary":"Node Tier","description":"This call will display the tier of the node. **Public**","operationId":"getNodeTier","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Node Tier"}}},"example":{"status":"success","data":"cumulus"}}}}}}},"/flux/info":{"get":{"tags":["Flux"],"summary":"Combined info","description":"Combined info of statuses. **Public**","operationId":"getFluxInfo","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"daemon":{"type":"object","properties":{"info":{"$ref":"#/components/schemas/daemongetinfo"},"zmqEnabled":{"type":"boolean","description":"Whether the daemon publishes block hashes over ZMQ"}}},"node":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/fluxnodestatus"}}},"benchmark":{"type":"object","properties":{"info":{"$ref":"#/components/schemas/benchinfo"},"status":{"$ref":"#/components/schemas/benchstatus"},"bench":{"$ref":"#/components/schemas/getbenchmarks"}}},"flux":{"type":"object","properties":{"version":{"type":"string","description":"Version number"},"nodeJsVersion":{"type":"string"},"syncthingVersion":{"type":"string"},"dockerVersion":{"type":"string"},"mongoDbVersion":{"type":"string"},"os":{"type":"string"},"osVersion":{"type":"string"},"osPrettyName":{"type":"string"},"ip":{"type":"string","description":"Server's IP address and API port (`ip:port`)"},"staticIp":{"type":"boolean","enum":[true,false],"description":"If ``true`` node have a static IP address"},"dosStaging":{"type":"string","nullable":true,"enum":["HOLD","EVACUATE"],"description":"How far the node is through being staged out of service, or null"},"upnp":{"type":"boolean"},"maxNumberOfIpChanges":{"type":"integer"},"zelid":{"type":"string","description":"Admin's FluxID"},"arcaneVersion":{"type":"string","description":"ArcaneOS only"},"arcaneHumanVersion":{"type":"string","description":"ArcaneOS only"},"timezone":{"type":"string","description":"Server's timezone"},"dos":{"type":"object","properties":{"dosState":{"type":"number","description":"Number indicating value of DOS state from 0 to infinity"},"dosMessage":{"type":"string","description":"Status message or Null if no message"}}},"appsDos":{"type":"object","properties":{"dosState":{"type":"number","description":"Number indicating value of DOS state from 0 to infinity"},"dosMessage":{"type":"string","description":"Status message or Null if no message"}}},"development":{"type":"boolean","enum":[true,false],"description":"If ```true``` development branch is active"},"explorerScannedHeigth":{"type":"object","properties":{"generalScannedHeight":{"type":"integer","description":"Explorer block height"}}},"numberOfConnectionsOut":{"type":"integer"},"numberOfConnectionsIn":{"type":"integer"}}},"apps":{"type":"object","properties":{"fluxusage":{"type":"string","description":"Amount of CPU usage"},"runningapps":{"$ref":"#/components/schemas/containerinfo"},"resources":{"$ref":"#/components/schemas/appsresources"}}},"geolocation":{"$ref":"#/components/schemas/geolocation"},"appsHashesTotal":{"type":"integer"},"hashesPresent":{"type":"integer"}}}}},"example":{"status":"success","data":{"daemon":{"info":{"version":6020050,"protocolversion":170018,"walletversion":60000,"blocks":1455414,"timeoffset":0,"connections":100,"proxy":"","difficulty":27259.8892076468,"testnet":false,"keypoololdest":1674853325,"keypoolsize":101,"paytxfee":0,"relayfee":0.000001,"errors":""}},"node":{"status":{"status":"CONFIRMED","collateral":"COutPoint(405e86b48a5d6846763f260154ca15383854ce5a2efad31474e55ff60cb62979, 0)","txhash":"405e86b48a5d6846763f260154ca15383854ce5a2efad31474e55ff60cb62979","outidx":0,"ip":"185.216.177.168","network":"ipv4","added_height":1327207,"confirmed_height":1327209,"last_confirmed_height":1455394,"last_paid_height":1453696,"tier":"NIMBUS","payment_address":"t1b6ZZLYAVG8QaafiZxB4dwX77YLLtMZeRx","pubkey":"047f9deaee93ae795a354d5b0977dcc3949e062bdbacdd78384b550987ab9db4545f96a5b59bfb2418cba08a181a9eb501bf70d49ef0fc2aa17bcbaf7ada334c8b","activesince":"1677520595","lastpaid":"1692825635","amount":"12500.00"}},"benchmark":{"info":{"version":"3.9.0","rpcport":16224},"status":{"status":"online","benchmarking":"NIMBUS","ipaddress":"185.216.177.168","architecture":"amd64","armboard":"","tier":"NIMBUS","time":1693033429,"real_cores":10,"cores":10,"ram":31,"ssd":1024,"hdd":0,"ddwrite":1114.33,"totalstorage":1024,"disksinfo":[{"disk":"vda","size":1024,"writespeed":1114.33}],"eps":1036,"ping":7.226,"download_speed":809.3055686875,"upload_speed":310.0325255625,"bench_version":"1.0.20","speed_version":"1.2.0","thunder":false,"error":""}},"flux":{"version":"4.9.1","ip":"185.216.177.168:16127","staticIp":true,"zelid":"1HWjQ9S3MyzV6EbtDMEkpHm31parya412N","timezone":"Europe/Berlin","dos":{"dosState":0,"dosMessage":null},"appsDos":{"dosState":0,"dosMessage":null},"development":false,"explorerScannedHeigth":{"generalScannedHeight":1455414},"numberOfConnectionsOut":19,"numberOfConnectionsIn":33},"apps":{"fluxusage":"5.24500000","runningapps":[{"Id":"4d4f8b41bc06be437a289411fc368b533cb3037262db6c1b7da834b9ff64c990","Names":["/fluxnode_PresearchNode1692351142712"],"Image":"presearch/node:latest","ImageID":"sha256:250779dc2ac2c4b8bef16ef46d0d5f4310eb9677e3da622f1a8dbbfc701dae36","Command":"/app/presearch-node","Created":1692377195,"Ports":[{"IP":"0.0.0.0","PrivatePort":38253,"PublicPort":39000,"Type":"tcp"},{"IP":"::","PrivatePort":38253,"PublicPort":39000,"Type":"tcp"},{"IP":"0.0.0.0","PrivatePort":38253,"PublicPort":39000,"Type":"udp"},{"IP":"::","PrivatePort":38253,"PublicPort":39000,"Type":"udp"},{"PrivatePort":39000,"Type":"tcp"},{"PrivatePort":39000,"Type":"udp"}],"Labels":{},"State":"running","Status":"Up 7 days"},{"Id":"ec7fbc0d1815dca14cbfc7618ca98bfed786664634919cfadcfe5ad476626fdd","Names":["/fluxisokoredis_IsokoSSE"],"Image":"isokoxyz/isoko-redis:latest","ImageID":"sha256:57827417aa9fbd1d64bbdaece64baa432ba5ec59edce99c774e64f8c83c02c66","Command":"docker-entrypoint.sh redis-server --requirepass password","Created":1692341609,"Ports":[{"PrivatePort":39470,"Type":"udp"},{"PrivatePort":6379,"Type":"tcp"},{"IP":"0.0.0.0","PrivatePort":3679,"PublicPort":39470,"Type":"tcp"},{"IP":"::","PrivatePort":3679,"PublicPort":39470,"Type":"tcp"},{"IP":"0.0.0.0","PrivatePort":3679,"PublicPort":39470,"Type":"udp"},{"IP":"::","PrivatePort":3679,"PublicPort":39470,"Type":"udp"},{"PrivatePort":39470,"Type":"tcp"}],"Labels":{},"State":"running","Status":"Up 8 days"},{"Id":"c8e4a96024e3fef3790585ffcdb48fd81f914f8ace86e27961fe596675b73119","Names":["/fluxisokosse_IsokoSSE"],"Image":"isokoxyz/isoko-sse:latest","ImageID":"sha256:e57a082b29709efc1d25583855276095873fb3b218fe5fb4ba7854bb6f5f900d","Command":"docker-entrypoint.sh npm run start","Created":1692341603,"Ports":[{"IP":"0.0.0.0","PrivatePort":5000,"PublicPort":33772,"Type":"udp"},{"IP":"::","PrivatePort":5000,"PublicPort":33772,"Type":"udp"},{"PrivatePort":33772,"Type":"tcp"},{"PrivatePort":33772,"Type":"udp"},{"IP":"0.0.0.0","PrivatePort":5000,"PublicPort":33772,"Type":"tcp"},{"IP":"::","PrivatePort":5000,"PublicPort":33772,"Type":"tcp"}],"Labels":{},"State":"running","Status":"Up 8 days"},{"Id":"ca7edafff17324889aefbdfd8e9ad936e15f84d677d12716ec38f34fae15e046","Names":["/fluxFoldingAtHome_FoldingAtRunOnFlux9"],"Image":"yurinnick/folding-at-home:latest","ImageID":"sha256:3b22eaf749f01384995a122aa97d4e03f80af32350e75ebe125927bf3f1d7a0e","Command":"/init-wrapper.sh","Created":1692163488,"Ports":[{"PrivatePort":36330,"Type":"tcp"},{"PrivatePort":36666,"Type":"tcp"},{"PrivatePort":36666,"Type":"udp"},{"IP":"0.0.0.0","PrivatePort":7396,"PublicPort":36666,"Type":"tcp"},{"IP":"::","PrivatePort":7396,"PublicPort":36666,"Type":"tcp"},{"IP":"0.0.0.0","PrivatePort":7396,"PublicPort":36666,"Type":"udp"},{"IP":"::","PrivatePort":7396,"PublicPort":36666,"Type":"udp"}],"Labels":{"description":"Unofficial Folding@Home image for CPU compute","maintainer":"yurinnick","repository":"https://github.com/yurinnick/folding-at-home-docker","version":"v7.6.21"},"State":"running","Status":"Up 10 days"},{"Id":"373182fd794517c6f959ad0ce208b1c3258ad5b3f182f07d35955f4c35873585","Names":["/fluxFoldingAtHome_FoldingAtFluxCloud1691606082588"],"Image":"yurinnick/folding-at-home:latest","ImageID":"sha256:3b22eaf749f01384995a122aa97d4e03f80af32350e75ebe125927bf3f1d7a0e","Command":"/init-wrapper.sh","Created":1691875783,"Ports":[{"PrivatePort":35555,"Type":"udp"},{"PrivatePort":36330,"Type":"tcp"},{"IP":"0.0.0.0","PrivatePort":7396,"PublicPort":35555,"Type":"tcp"},{"IP":"::","PrivatePort":7396,"PublicPort":35555,"Type":"tcp"},{"IP":"0.0.0.0","PrivatePort":7396,"PublicPort":35555,"Type":"udp"},{"IP":"::","PrivatePort":7396,"PublicPort":35555,"Type":"udp"},{"PrivatePort":35555,"Type":"tcp"}],"Labels":{"description":"Unofficial Folding@Home image for CPU compute","maintainer":"yurinnick","repository":"https://github.com/yurinnick/folding-at-home-docker","version":"v7.6.21"},"State":"running","Status":"Up 13 days"},{"Id":"e381969e619194b5c037b1063373d52d0e46d883f0cc2000889c064a67b83726","Names":["/flux_watchtower"],"Image":"containrrr/watchtower","ImageID":"sha256:f847e1adb570c2cc11d1e613cad97baf3cdfe83ddd3c1a29ada848cfbd4f7f3f","Command":"/watchtower --cleanup --interval 24133","Created":1676891906,"Ports":[{"PrivatePort":8080,"Type":"tcp"}],"Labels":{"com.centurylinklabs.watchtower":"true"},"State":"running","Status":"Up 6 months"}],"resources":{"appsCpusLocked":4.3,"appsRamLocked":17700,"appsHddLocked":98}},"geolocation":{"ip":"185.216.177.168","continent":"Europe","continentCode":"EU","country":"Germany","countryCode":"DE","region":"BW","regionName":"Baden-Wurttemberg","lat":49.0291,"lon":8.35695,"org":"netcup GmbH"},"appsHashesTotal":25312,"hashesPresent":25279}}}}}}}},"/flux/timezone":{"get":{"tags":["Flux"],"summary":"Flux timezone","description":"This will return with the timezone of the server. **Public**","operationId":"getFluxTimezone","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Timezone"}}},"example":{"status":"success","data":"Europe/Berlin"}}}}}}},"/flux/version":{"get":{"tags":["Flux"],"summary":"Gets version of Flux","description":"Gets version of Flux running on the Flux node the call is run against as it is in package.json. **Public**","operationId":"getFluxVersion","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Flux version"}}},"example":{"status":"success","data":"4.1.0"}}}}}}},"/flux/ip":{"get":{"tags":["Flux"],"summary":"Flux IP","description":"This will return with the IP address of the server that Flux is on. **Public**","operationId":"getFluxIP","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","nullable":true,"description":"IP address and API port (`ip:port`); null while unresolved"}}},"example":{"status":"success","data":"49.12.8.215:16127"}}}}}}},"/flux/staticip":{"get":{"tags":["Flux"],"summary":"Flux static IP status","description":"This will return `true` if FluxNode is running under a known static ip ISP/Org. **Public**","operationId":"getFluxStaticIP","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"boolean","enum":[true,false],"description":"static ip ISP/Org or not"}}},"example":{"status":"success","data":true}}}}}}},"/flux/geolocation":{"get":{"tags":["Flux"],"summary":"Geolocation info","description":"This will return geolocation info. **Public**","operationId":"getFluxGeolocation","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/geolocation"}}},"example":{"status":"success","data":{"ip":"148.113.135.234","continent":"North America","continentCode":"NA","country":"Canada","countryCode":"CA","region":"QC","regionName":"Quebec","lat":45.3151,"lon":-73.8779,"org":"OVH Hosting, Inc"}}}}}}}},"/flux/id":{"get":{"tags":["Flux"],"summary":"Admin's FluxID","description":"This will return with the admin's FluxID. **Public**","operationId":"getFluxID","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"FluxID"}}},"example":{"status":"success","data":"1CcoEkKQZcwUXPSps4bZJDjUM3mqe9bNXf"}}}}}}},"/flux/pgp":{"get":{"tags":["Flux"],"summary":"PGP identity","description":"This will return node pgp public key. **Public**","operationId":"getPgp","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Pgp public key"}}},"example":{"status":"success","data":"-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nxjMEZOMsEBYJKwYBBAHaRw8BAQdAqjIh7dGGpEwo2bHAJKPnZJLclDSKPysv\ngmK3Va+8fcPNdDFlN2U1ODU0YjdlMjk4OWU5NTNlMTA1MGY0MGFmY2YzYWUz\nZDQ3ZThlNWI1NDgyZWYyZWViNWZkNTY2ZmNmMmE6MCA8MUhXalE5UzNNeXpW\nNkVidERNRWtwSG0zMXBhcnlhNDEyTkBydW5vbmZsdXguaW8+wowEEBYKAD4F\ngmTjLBAECwkHCAmQSQ3C8FnVJhkDFQgKBBYAAgECGQECmwMCHgEWIQQAyk4E\nGn08EnjEMCtJDcLwWdUmGQAAC2QBANAEdUdQEUTLQNYnGRzrCvqzBqdPGbJT\n/zW0nyF8ZLJgAP9pS8OLA3eoYzkhoJKuOn4qcUr48PcBcGzEIpgZFKPPBM44\nBGTjLBASCisGAQQBl1UBBQEBB0AoXsfprvNft3PNBsCPz9VMl8e342PDq91X\nVJeSeBnCSAMBCAfCeAQYFggAKgWCZOMsEAmQSQ3C8FnVJhkCmwwWIQQAyk4E\nGn08EnjEMCtJDcLwWdUmGQAATboA/3hxWLcTxPRQokx+BlcIXHuRu3fK9cnj\nUW6j9M99t6hTAQDDdiNNDAEIOnWXBr1NZiD3iqhPv5zOkLDRtpyw+7NGCw==\n=crwl\n-----END PGP PUBLIC KEY BLOCK-----\n"}}}}}}},"/flux/kadena":{"get":{"tags":["Flux"],"summary":"Kadena Info","description":"This call will display the user's Kadena address and chain ID. **Public**","operationId":"getFluxKadena","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Kadena address and chain ID"}}},"example":{"status":"success","data":"kadena:k:7a1529b3a07fate32d75684ab20bdde61545d60f1c6bcbf2489fef857a316652?chainid=0"}}}}}}},"/flux/dosstate":{"get":{"tags":["Flux"],"summary":"DOS state","description":"This node's DOS score and the reason for it. The node is out of service (DOS) at a score of 100 or more; a score above 10, or any message, already makes `GET /flux/health` and `GET /id/loginphrase` refuse. While a permanent hold is in place (a NodeJS below the network minimum, app tampering, the residential DOS or peer-set instability) `dosState` reads 100 and `dosMessage` lists every holder's reason, joined by `; `. **Public**","operationId":"getDOSState","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"dosState":{"type":"integer","description":"Status number"},"dosMessage":{"type":"string","nullable":true,"description":"Explanation of status"}}}}},"example":{"status":"success","data":{"dosState":0,"dosMessage":null}}}}}}},"post":{"tags":["Flux"],"summary":"Set the DOS state (test builds only)","description":"Sets the node's DOS state directly. **Available only on nodes started with `testEventStream` enabled** — every other node answers `404`. Exists so the event stream can be exercised deterministically in testing. **FluxTeam**","operationId":"setDOSState","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"dosState":{"type":"number"},"dosMessage":{"type":"string","nullable":true}}},"example":{"dosState":100,"dosMessage":"Simulated DOS for testing"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":{"message":{"dosState":100,"dosMessage":"Simulated DOS for testing"}}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"},"404":{"description":"Not available — this node was not started with test event streaming"}}}},"/flux/health":{"get":{"tags":["Flux"],"summary":"Node fitness","description":"Whether this node is fit to serve the network, by the same checks that gate `GET /id/loginphrase`, run in this order: the local database answers, Syncthing is healthy, Docker answers, the hardware still meets the node's tier, the node is not in a DOS state (score above 10 or any DOS message), and its apps are not in a DOS state (100 or more). The first failing check is answered as an error envelope carrying that check's message, name and code. For the node DOS check `code` is the DOS score and `name` is `DOS` for an IP-detection failure or collateral collision, `CONNERROR` otherwise.\n\nOn success `data` names every check passed. `syncthing` is `ok` when a health probe landed within the health window, `unmeasured` while FluxOS has not yet measured it, and `degraded` when it is unhealthy on a node where FluxOS does not own the Syncthing daemon (ArcaneOS); only a node whose Syncthing FluxOS supervises is failed for it. Successful answers are cached for 30 seconds; failures are not cached. **Public**","operationId":"getNodeHealth","security":[],"responses":{"200":{"description":"OK. An unfit node is also answered with HTTP 200, as an error envelope, e.g. `{status: error, data: {name: Error, message: Syncthing is not running properly}}`.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"db":{"type":"string","enum":["ok"]},"syncthing":{"type":"string","enum":["ok","unmeasured","degraded"]},"docker":{"type":"string","enum":["ok"]},"hardware":{"type":"string","enum":["ok"]},"dos":{"type":"string","enum":["ok"]},"appsDos":{"type":"string","enum":["ok"]}}}}},"example":{"status":"success","data":{"db":"ok","syncthing":"ok","docker":"ok","hardware":"ok","dos":"ok","appsDos":"ok"}}}}}}}},"/flux/connectedpeers":{"get":{"tags":["Flux"],"summary":"Gets IP's of connected peers","description":"Gets list of IP addresses of outgoing connected peers. **Public**","operationId":"connectedPeers","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"string","description":"IP of connected peer"}}}},"example":{"status":"success","data":["193.188.15.252","164.68.127.146","188.239.61.176","89.187.128.108"]}}}}}}},"/flux/connectedpeersinfo":{"get":{"tags":["Flux"],"summary":"Gets info of connected peers","description":"Gets the address, port and latency of each outgoing connected peer. **Public**","operationId":"connectedPeersInfo","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"ip":{"type":"string","description":"Ip address of connected peer"},"port":{"type":"string","description":"API port of connected peer"},"latency":{"type":"integer","nullable":true,"description":"Round trip time of the last ping, in milliseconds"},"lastPingTime":{"type":"integer","nullable":true,"description":"Unix milliseconds of the last ping sent"}}}}}},"example":{"status":"success","data":[{"ip":"193.188.15.252","port":"16127","latency":27,"lastPingTime":1772719195000},{"ip":"164.68.127.146","port":"16137","latency":196,"lastPingTime":1772719195000}]}}}}}}},"/flux/incomingconnections":{"get":{"tags":["Flux"],"summary":"List of incoming connections","description":"Gets list of IP addresses of incoming connected peers. **Public**","operationId":"incomingConnections","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"string","description":"Ip list of incoming connections"}}}},"example":{"status":"success","data":["::ffff:91.238.104.205","::ffff:192.81.130.145","::ffff:167.86.71.144","::ffff:193.188.15.254","::ffff:62.171.188.152","::ffff:164.68.125.203"]}}}}}}},"/flux/incomingconnectionsinfo":{"get":{"tags":["Flux"],"summary":"Gets info of incoming connections","description":"Gets the address and port of each incoming connection. **Public**","operationId":"incomingConnectionsInfo","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"ip":{"type":"string","description":"Ip address of incoming connection"},"port":{"type":"string","description":"API port of the connecting node"}}}}}},"example":{"status":"success","data":[{"ip":"91.238.104.205","port":"16127"},{"ip":"192.81.130.145","port":"16137"}]}}}}}}},"/flux/checkfluxavailability":{"get":{"tags":["Flux"],"summary":"Check availability of Flux","description":"Check if Flux is reachable and available using IP of the Flux's server. **Public**","operationId":"checkFluxAvailability","security":[],"parameters":[{"in":"query","name":"ip","required":true,"schema":{"type":"string"},"description":"Ip address","example":"193.188.15.245"},{"in":"query","name":"port","required":false,"schema":{"type":"string"},"description":"API port of the node being checked; the default FluxOS port when omitted","example":16127}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"sucess","data":{"message":"Asking Flux is available"}}}}}}}},"/flux/checkcommunication":{"get":{"tags":["Flux"],"summary":"Check incoming/outgoing peers","description":"Check if there is enough incoming/outgoing peers. **Public**","operationId":"isCommunicationEstablished","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Communication to Flux network is properly established"}}}}}}}},"/flux/uptime":{"get":{"tags":["Flux"],"summary":"FluxOS uptime","description":"Return FluxOS uptime in seconds. **Public**","operationId":"FluxUptime","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"integer"}}},"example":{"status":"success","data":467}}}}}}},"/flux/broadcastmessage":{"post":{"tags":["Flux"],"summary":"Broadcast message to peers","description":"Broadcast data message to peers that are connected. **AdminAndFluxTeam**","operationId":"broadcastMessageFromUserPost","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","description":"Any JSON object; the whole posted body is broadcast as-is","properties":{"data":{"type":"string","description":"Example field only; nothing is extracted from the body"}}},"example":{"data":"a7a5b90b25ccc0a8379ec960c103103390369d1d6d18f88281372b944531dc23"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Message successfully broadcasted to Flux network"}}}}}}},"get":{"tags":["Flux"],"summary":"Broadcast message to peers","description":"Broadcast data message to peers that are connected. **AdminAndFluxTeam**","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"data","required":true,"schema":{"type":"string"},"description":"The message","example":"a7a5b90b25ccc0a8379ec960c103103390369d1d6d18f88281372b944531dc23"}],"operationId":"broadcastMessageFromUser","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Message successfully broadcasted to Flux network"}}}}}}}},"/flux/broadcastmessagetooutgoing":{"post":{"tags":["Flux"],"summary":"Broadcast message to outgoing peers","description":"**Deprecated.** Delegates to the same handler as `/flux/broadcastmessage`, which broadcasts to every peer rather than only outgoing ones; use that endpoint instead. **AdminAndFluxTeam**","operationId":"broadcastMessageToOutgoingFromUserPost","deprecated":true,"security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","description":"Any JSON object; the whole posted body is broadcast as-is","properties":{"data":{"type":"string","description":"Example field only; nothing is extracted from the body"}}},"example":{"data":"a7a5b90b25ccc0a8379ec960c103103390369d1d6d18f88281372b944531dc23"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Message successfully broadcasted to Flux network"}}}}}}},"get":{"tags":["Flux"],"summary":"Broadcast message to outgoing peers","description":"**Deprecated.** Delegates to the same handler as `/flux/broadcastmessage`, which broadcasts to every peer rather than only outgoing ones; use that endpoint instead. **AdminAndFluxTeam**","operationId":"broadcastMessageToOutgoingFromUser","deprecated":true,"security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"data","required":true,"schema":{"type":"string"},"description":"The message","example":"a7a5b90b25ccc0a8379ec960c103103390369d1d6d18f88281372b944531dc23"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Message successfully broadcasted to Flux network"}}}}}}}},"/flux/broadcastmessagetoincoming":{"post":{"tags":["Flux"],"summary":"Broadcast message to incoming peers","description":"**Deprecated.** Delegates to the same handler as `/flux/broadcastmessage`, which broadcasts to every peer rather than only incoming ones; use that endpoint instead. **AdminAndFluxTeam**","operationId":"broadcastMessageToIncomingFromUserPost","deprecated":true,"security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","description":"Any JSON object; the whole posted body is broadcast as-is","properties":{"data":{"type":"string","description":"Example field only; nothing is extracted from the body"}}},"example":{"data":"a7a5b90b25ccc0a8379ec960c103103390369d1d6d18f88281372b944531dc23"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Message successfully broadcasted to Flux network"}}}}}}},"get":{"tags":["Flux"],"summary":"Broadcast message to incoming peers","description":"**Deprecated.** Delegates to the same handler as `/flux/broadcastmessage`, which broadcasts to every peer rather than only incoming ones; use that endpoint instead. **AdminAndFluxTeam**","operationId":"broadcastMessageToIncomingFromUser","deprecated":true,"security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"data","required":true,"schema":{"type":"string"},"description":"The message","example":"a7a5b90b25ccc0a8379ec960c103103390369d1d6d18f88281372b944531dc23"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Message successfully broadcasted to Flux network"}}}}}}}},"/flux/addpeer":{"get":{"tags":["Flux"],"summary":"Add peer option","description":"This call gives option to add peers to outgoing connections. **AdminAndFluxTeam**","operationId":"addPeer","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"ip","required":true,"schema":{"type":"string"},"description":"Ip of peer to add","example":"49.12.8.215"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Outgoing connection to 49.12.8.215 initiated"}}}}}}}},"/flux/removepeer":{"get":{"tags":["Flux"],"summary":"Remove peer option","description":"This call does exact opposite of add and removes/drops a outgoing connected peer. **AdminAndFluxTeam**","operationId":"removePeer","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"ip","required":true,"schema":{"type":"string"},"description":"Ip of peer to remove","example":"49.12.8.215"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Outgoing connection to 49.12.8.215 closed"}}}}}}}},"/flux/removeincomingpeer":{"get":{"tags":["Flux"],"summary":"Remove incoming peer","description":"Remove a incoming connected peer. **AdminAndFluxTeam**","operationId":"removeIncomingPeer","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"ip","required":true,"schema":{"type":"string"},"description":"Ip of peer to remove","example":"49.12.8.215"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Incoming connection to 49.12.8.215 closed"}}}}}}}},"/flux/allowport":{"get":{"tags":["Flux"],"summary":"Open port on server","description":"This will open a port on the server and adding it to the firewall rules. **AdminAndFluxTeam**","operationId":"allowPortApi","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"port","required":true,"schema":{"type":"integer"},"description":"Port number to open","example":22222}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"code":{"type":"integer","description":"Port number"},"name":{"type":"integer","description":"Port number"},"message":{"type":"string","description":"Explanation of status"}}}}},"example":{"status":"success","data":{"code":22222,"name":22222,"message":"Rule added\nRule added (v6)"}}}}}}}},"/flux/adjustkadena":{"get":{"tags":["Flux"],"summary":"Adjust Kadena Account","description":"Essentially rebuilds flux - use with caution! **Admin**","operationId":"adjustKadenaAccount","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"account","required":true,"schema":{"type":"string"},"description":"Kadena Account","example":"k:7a1529b3a07fate32d75684ab20bdde61545d60f1c6bcbf2489fef857a316652"},{"in":"query","name":"chainid","required":true,"schema":{"type":"string"},"description":"Kadena ChainID","example":0}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Kadena account adjusted"}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/flux/startbenchmark":{"get":{"tags":["Flux"],"summary":"Start Benchmark","description":"This call will start the benchmark which tests the hardware specifications and performance. **AdminAndFluxTeam**","operationId":"fluxstartBenchmark","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Start performance benchmark"}}},"example":{"status":"success","data":{"message":"Benchamrk successfully started"}}}}}}}},"/flux/restartbenchmark":{"get":{"tags":["Flux"],"summary":"Restart Benchmark","description":"This call will restart the benchmark which tests the hardware specifications and performance. **AdminAndFluxTeam**","operationId":"fluxrestartbenchmark","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Restart performance benchmark"}}},"example":{"status":"success","data":{"message":"Benchamrk successfully restarted"}}}}}}}},"/flux/softupdateflux":{"get":{"tags":["Flux"],"summary":"Soft Update Flux","description":"This call will perform a soft update of Flux. **AdminAndFluxTeam**","operationId":"softUpdateFlux","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Perform a soft update of Flux"}}},"example":{"status":"success","data":{"message":"Flux successfully updated using soft method"}}}}}}}},"/flux/softupdatefluxinstall":{"get":{"tags":["Flux"],"summary":"Install Flux","description":"This call will install Flux. **AdminAndFluxTeam**","operationId":"softUpdateFluxInstall","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Install Flux"}}},"example":{"status":"success","data":{"message":"Flux successfully updated softly with installation"}}}}}}}},"/flux/warnlog":{"get":{"tags":["Flux"],"summary":"Warning Log","description":"This call returns the Flux warning log. **AdminAndFluxTeam**","operationId":"fluxWarnLog","security":[{"FluxID":[]}],"responses":{"200":{"description":"The log file itself, sent as a download (attachment `warn.log`), not a JSON envelope. An unauthorised call is answered with the JSON error envelope.","content":{"text/plain":{"schema":{"type":"string","description":"Warning log"},"example":"2022-01-23T15:23:33.638Z          Daemon not yet synced. Flux discovery is awaiting. 2022-01-23T15:25:33.655Z          Node not confirmed. Flux discovery is awaiting. 2022-01-23T15:27:33.869Z          Unexpected token B in JSON at position 0 2022-01-23T15:29:34.535Z          Flux IP not detected. Flux discovery is awaiting."}}}}}},"/flux/debuglog":{"get":{"tags":["Flux"],"summary":"Debug Log","description":"This call returns the Flux debug log. **AdminAndFluxTeam**","operationId":"fluxDebugLog","security":[{"FluxID":[]}],"responses":{"200":{"description":"The log file itself, sent as a download (attachment `debug.log`), not a JSON envelope. An unauthorised call is answered with the JSON error envelope.","content":{"text/plain":{"schema":{"type":"string","description":"Debug log"},"example":"2022-01-23T15:23:33.049Z          Flux running on port 16127! 2022-01-23T15:23:33.051Z          Initiating MongoDB connection 2022-01-23T15:23:33.075Z          Flux Home running on port 16126! 2022-01-23T15:23:33.106Z          DB connected 2022-01-23T15:23:33.106Z          Preparing local database... 2022-01-23T15:23:33.471Z          Local database prepared 2022-01-23T15:23:33.472Z          Preparing temporary database... 2022-01-23T15:23:33.505Z          Temporary database prepared 2022-01-23T15:23:33.505Z          Preparing Flux Apps locations 2022-01-23T15:23:33.554Z          Flux Apps locations prepared 2022-01-23T15:23:33.571Z          Firewalls checked 2022-01-23T15:23:33.572Z          Connections polling prepared 2022-01-23T15:23:33.580Z          Flux Daemon Info Service Started 2022-01-23T15:23:33.619Z          Flux checks operational 2022-01-23T15:23:33.638Z          Daemon not yet synced. Flux discovery is awaiting. 2022-01-23T15:23:33.639Z          Flux Discovery started"}}}}}},"/flux/infolog":{"get":{"tags":["Flux"],"summary":"Info Log","description":"This call returns the Flux info log. **AdminAndFluxTeam**","operationId":"fluxInfoLog","security":[{"FluxID":[]}],"responses":{"200":{"description":"The log file itself, sent as a download (attachment `info.log`), not a JSON envelope. An unauthorised call is answered with the JSON error envelope.","content":{"text/plain":{"schema":{"type":"string","description":"Info log"},"example":"2022-01-23T15:23:33.047Z          Flux running on port 16127! 2022-01-23T15:23:33.050Z          Initiating MongoDB connection 2022-01-23T15:23:33.071Z          Flux Home running on port 16126! 2022-01-23T15:23:33.105Z          DB connected 2022-01-23T15:23:33.106Z          Preparing local database... 2022-01-23T15:23:33.431Z          Local database prepared 2022-01-23T15:23:33.472Z          Preparing temporary database... 2022-01-23T15:23:33.505Z          Temporary database prepared 2022-01-23T15:23:33.505Z          Preparing Flux Apps locations 2022-01-23T15:23:33.554Z          Flux Apps locations prepared 2022-01-23T15:23:33.571Z          Firewalls checked"}}}}}},"/flux/tailwarnlog":{"get":{"tags":["Flux"],"summary":"Tail Warn Log","description":"This call returns the Flux tail warn log. **AdminAndFluxTeam**","operationId":"tailFluxWarnLog","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"string","description":"Tail warn log"},"example":{"status":"success","data":{"message":"2022-01-23T16:44:33.266Z          Message received from outgoing peer 167.86.116.93 but is not an originating node of 043adf786dbfc86b8ca741deb589c75b5aa05e99416af5489a6407683c3ef88d30eab6b5cfab869d8def357c46db6bf553b4cb17104219065a17519a8a2596da92.\\n 2022-01-23T16:44:34.856Z          Message received from outgoing peer 167.86.121.80 but is not an originating node of 043d50eb6288db8991a893d00014a0c9bf3ca4baac923eee2e65fae746b5ef41ccd26508ca5e8ef2f0092fc22cd7306b4c1da900eca5f27ee995786f58f6254c79.\\n 2022-01-23T16:44:36.225Z          Message received from incoming peer ::ffff:194.163.176.204 but is not an originating node of 042dd35e0ccf4df99b63768a974b16f6b00fe8cf087320db13942689230ad3a8817f5d98dc0deb8b899a6794cc7ec7771295b54782c8ad52c07c8cedebe83772f5."}}}}}}}},"/flux/taildebuglog":{"get":{"tags":["Flux"],"summary":"Tail Debug Log","description":"This call returns the Flux tail debug log. **AdminAndFluxTeam**","operationId":"tailFluxDebugLog","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"string","description":"Tail debug log"},"example":{"status":"success","data":{"message":"2022-01-23T17:02:21.941Z          Transaction c70cd93576c5717621f75ca9509c113266a0e19559b61784443845c6cb4865d0 1 not found in database. Falling back to blockchain data\\n 2022-01-23T17:02:22.327Z          Transaction 8a6118a60b845250d747f66ecb2eb702eb7ed29c7567745788f9e81d4c3a0f3a 1 not found in database. Falling back to blockchain data\\n 2022-01-23T17:02:22.470Z          Transaction 04b86bbc7a3cd64752032f29d6ef6f6f859bfe86ac5026ecc8d5e8dfa7c29160 0 not found in database. Falling back to blockchain data\\n"}}}}}}}},"/flux/tailinfolog":{"get":{"tags":["Flux"],"summary":"Tail Info Log","description":"This call returns the Flux tail info log. **AdminAndFluxTeam**","operationId":"tailFluxInfoLog","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"string","description":"Tail info log"},"example":{"status":"success","data":{"message":"2022-01-23T17:02:23.458Z          Transaction 03dcc45f7c265d73db3e53c98a94c1a52841ac10c7774c6a1942fb602bd7712c 1 not found in database. Falling back to blockchain data\\n 2022-01-23T17:02:23.600Z          Transaction e141049a8de186b718313343bb08f0341c6273eccd424a4b4d5c5bee599ad713 0 not found in database. Falling back to blockchain data\\n 2022-01-23T17:02:23.793Z          Transaction 5e59328a1f97ee3335b23ac550236cdcc022bea86cc78e3dddf0674e2d0fd129 0 not found in database. Falling back to blockchain data\\n"}}}}}}}},"/flux/backendfolder":{"get":{"tags":["Flux"],"summary":"Local Folder Location","description":"Returns the FluxOS backend folder on this node. **Reachable only from the node itself** — the route admits loopback callers (`127.0.0.1`, `::1`) by socket address only, so no `zelidauth` header is required and none helps from elsewhere; other callers get `401` with the plain-text body `Access denied`. **Public** (localhost only)","operationId":"fluxBackendFolder","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"string","description":"Backend folder location"},"example":{"status":"success","data":"/home/username/flux/ZelBack/"}}}},"401":{"description":"Caller is not on the loopback address (plain-text `Access denied`)"}}}},"/flux/mapport":{"get":{"tags":["Flux"],"summary":"Map a specified port (UPnP)","description":"This call map a specified port (UPnP). **AdminAndFluxTeam**","operationId":"fluxMapport","parameters":[{"in":"query","name":"port","required":true,"schema":{"type":"integer"},"description":"Port number","example":666}],"security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"message":{"type":"string","description":"Explanation of status"}}}}},"example":{"status":"success","data":{"message":"Port mapped"}}}}}}}},"/flux/unmapport":{"get":{"tags":["Flux"],"summary":"Unmap a specified port (UPnP)","description":"This call unmap a specified port (UPnP). **AdminAndFluxTeam**","operationId":"fluxUnmapport","parameters":[{"in":"query","name":"port","required":true,"schema":{"type":"integer"},"description":"Port number","example":666}],"security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"message":{"type":"string","description":"Explanation of status"}}}}},"example":{"status":"success","data":{"message":"Port unmapped"}}}}}}}},"/flux/getmap":{"get":{"tags":["Flux"],"summary":"Show list with mappings (UPnP)","description":"This call show message with mappings (UPnP). **AdminAndFluxTeam**","operationId":"fluxGetMap","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object"}}}},"example":{"status":"success","data":[{"public":{"host":"","port":31111},"private":{"host":"192.168.1.105","port":31111},"protocol":"tcp","enabled":false,"description":"Flux_App_StreamrNode1681108241435","ttl":0,"local":false},{"public":{"host":"","port":31112},"private":{"host":"192.168.1.105","port":31112},"protocol":"tcp","enabled":false,"description":"Flux_App_StreamrNode1681108241435","ttl":0,"local":false},{"public":{"host":"","port":31113},"private":{"host":"192.168.1.105","port":31113},"protocol":"tcp","enabled":false,"description":"Flux_App_StreamrNode1681108241435","ttl":0,"local":false},{"public":{"host":"","port":16137},"private":{"host":"192.168.1.102","port":16137},"protocol":"tcp","enabled":false,"description":"Flux_Backend_API","ttl":0,"local":false},{"public":{"host":"","port":16136},"private":{"host":"192.168.1.102","port":16136},"protocol":"tcp","enabled":false,"description":"Flux_Home_UI","ttl":0,"local":false},{"public":{"host":"","port":16177},"private":{"host":"192.168.1.106","port":16177},"protocol":"tcp","enabled":false,"description":"Flux_Backend_API","ttl":0,"local":true},{"public":{"host":"","port":16176},"private":{"host":"192.168.1.106","port":16176},"protocol":"tcp","enabled":false,"description":"Flux_Home_UI","ttl":0,"local":true}]}}}}}}},"/flux/getip":{"get":{"tags":["Flux"],"summary":"Show public IP address (UPnP)","description":"This call show public IP address (UPnP). **AdminAndFluxTeam**","operationId":"fluxGetip","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string"}}},"example":{"status":"success","data":"84.28.5.7"}}}}}}},"/flux/getgateway":{"get":{"tags":["Flux"],"summary":"Show gateway address (UPnP)","description":"This call show a message with gateway address (UPnP). **AdminAndFluxTeam**","operationId":"fluxGetGateway","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string"}}},"example":{"status":"success","data":{"gateway":{"description":"http://192.168.1.1:2189/rootDesc.xml","services":["urn:schemas-upnp-org:service:WANIPConnection:1","urn:schemas-upnp-org:service:WANIPConnection:2","urn:schemas-upnp-org:service:WANPPPConnection:1"]},"address":"192.168.1.106"}}}}}}}},"/flux/routerip":{"get":{"tags":["Flux"],"summary":"To show the current user's Router IP setup.","description":"To show the current user's Router IP setup in configuration file that is being used with FluxO. **Public**","operationId":"fluxRouterip","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string"}}},"example":{"status":"success","data":"196.53.8.65"}}}}}}},"/flux/adjustrouterip":{"get":{"tags":["Flux"],"summary":"Update the current routerIP.","description":"Update the current routerIP that is being used with FluxOS. **Admin**","operationId":"fluxAdjustrouterip","parameters":[{"in":"query","name":"routerip","schema":{"type":"string"},"example":"196.53.8.65"}],"security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string"}}},"example":{"status":"success","data":"Router IP adjusted"}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/flux/apiport":{"get":{"tags":["Flux"],"summary":"Show the current user's Api Port setup in configuration file that is being used by FluxOS.","description":"Show the current user's Api Port. **Public**","operationId":"fluxApiport","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Api Port"}}},"example":{"status":"success","data":16127}}}}}}},"/flux/adjustapiport":{"get":{"tags":["Flux"],"summary":"Update Api Port setup in configuration file that is being used by FluxOS.","description":"Update the API port in the node configuration. **Admin**","operationId":"fluxAdjustapiport","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"apiport","required":true,"schema":{"type":"integer","enum":[16127,16137,16147,16157,16167,16177,16187,16197]},"description":"New API port; any other value answers `API Port not valid`","example":16127}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string"}}},"example":{"status":"success","data":"API Port adjusted"}}}}}}},"/flux/marketplaceurl":{"get":{"tags":["Flux"],"summary":"Show marketplace URL.","description":"Show marketplace URL based on current development flag setup in configuration file that is being used with FluxOS. **Public**","operationId":"fluxMarketplaceurl","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Api Port"}}},"example":{"status":"success","data":"https://stats.runonflux.io/marketplace/listapps"}}}}}}},"/flux/restart":{"get":{"tags":["Flux"],"summary":"Restart FluxOS.","description":"Restart FluxOS (pm2 restart). **AdminAndFluxTeam**","operationId":"fluxRestart","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string"}}},"example":{"status":"success","data":"Restarting FluxOS"}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/flux/systemuptime":{"get":{"tags":["Flux"],"summary":"Show system uptime.","description":"Show system uptime in seconds. **Public**","operationId":"fluxSystemuptime","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"number","description":"System uptime in seconds"}}},"example":{"status":"success","data":2531565}}}}}}},"/flux/nodejsversions":{"get":{"tags":["Flux"],"summary":"Show nodejs entire versions object.","description":"Show nodejs entire versions object. **Public**","operationId":"fluxNodejsversions","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","description":"Nodejs entire versions object"}}},"example":{"status":"success","data":{"node":"16.20.2","v8":"9.4.146.26-node.26","uv":"1.43.0","zlib":"1.2.11","brotli":"1.0.9","ares":"1.19.1","modules":"93","nghttp2":"1.47.0"}}}}}}}},"/flux/fluxids":{"get":{"tags":["Flux"],"summary":"Get all Flux IDs","description":"The Flux team's FluxID and the Flux support team's FluxIDs configured on this node. **Public**","operationId":"getFluxIds","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"fluxTeamFluxID":{"type":"string"},"fluxSupportTeamFluxID":{"type":"array","items":{"type":"string"}}}}}},"example":{"status":"success","data":{"fluxTeamFluxID":"1hjy4bCYBJr4mny4zCE85J94RXa8W6q37","fluxSupportTeamFluxID":["16dNCFf7nR3nx5iwn2RQMBw6KcJXkE3JC1","15c3aH6y9Koq1Dg1rGXE9Ypn5nL2AbSJCu","1NGqYirE4T9wzd1ZcGrw3HjETiuCkt6Sgy","13BBPcpHxwCaC61vjQgK6qeDcprFJEGVkP"]}}}}}}}},"/flux/isarcaneos":{"get":{"tags":["Flux"],"summary":"Check if running on ArcaneOS","description":"Check if the node is running on ArcaneOS (specialized Flux operating system). **Public**","operationId":"isArcaneOs","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"boolean","description":"True if running on ArcaneOS"}}},"example":{"status":"success","data":true}}}}}}},"/flux/streamchainpreparation":{"get":{"tags":["Flux"],"summary":"Stream chain preparation","description":"Prepares this node to stream its blockchain: checks that the local daemon is synced (tip no older than 10 minutes) and that the node is not within 30 blocks of its confirmation window, then stops the daemon and watchdog. If no `POST /flux/streamchain` starts within 30 seconds they are started again. **Reachable only from the node's own local network** (a private RFC 1918 address) — the caller is identified by its socket address, so no `zelidauth` header is required. Refusals carry the reason in the HTTP status text: `403` for a caller outside the private network, `422` when streaming is disabled for failing the minimum throughput criteria, and `503` while another stream is already in progress, when the daemon is not synced or cannot be queried, when the node is outside its maintenance window, or when a service could not be stopped. **Public** (local network only)","operationId":"streamChainPreparation","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Daemon stopped, you can start stream chain functionality"}}}}},"403":{"description":"Caller is not on a private (RFC 1918) address"},"422":{"description":"Streaming disabled after failing the minimum throughput criteria"},"503":{"description":"Another stream is in progress, the daemon is not synced or cannot be queried, the node is outside its maintenance window, or a service could not be stopped"}}}},"/flux/streamchain":{"post":{"tags":["Flux"],"summary":"Stream blockchain data","description":"Streams this node's blockchain data to another node on the same local network. Call `GET /flux/streamchainpreparation` first so the daemon is stopped. **Reachable only from the node's own local network** — the caller is identified by its socket address, so no `zelidauth` header is required. **Public** (local network only)","operationId":"streamChain","security":[],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"unsafe":{"type":"boolean","default":false,"description":"Stream even though the daemon is still running (the copy may be inconsistent); refused together with `compress`"},"compress":{"type":"boolean","default":false,"description":"Gzip the tar stream on the fly (10-20x slower)"}}},"example":{"compress":false}}}},"responses":{"200":{"description":"The daemon's `determ_zelnodes`, `chainstate` and `blocks` folders as a tar stream (gzip when `compress` is set). A stream slower than 200 Mbps after 35 seconds is cut and further streams are disabled.","headers":{"Approx-Content-Length":{"description":"Estimated size of the stream in bytes","schema":{"type":"integer"}}},"content":{"application/x-tar":{"schema":{"type":"string","format":"binary"}}}},"403":{"description":"Caller is not on a private (RFC 1918) address"},"422":{"description":"Streaming disabled after failing the throughput criteria, or `unsafe` with `compress`"},"500":{"description":"Chain folders not found"},"503":{"description":"Another stream is in progress, or the daemon is still running (without `unsafe`)"}}}},"/flux/checkappavailability":{"post":{"tags":["Flux"],"summary":"Check application port availability","description":"Asks this node to test whether application ports are reachable on the caller's address. Used between Fluxnodes: the ask must be signed by a Fluxnode on the deterministic list (`pubKey`, and `signature` over the JSON of the body without `signature`). The address tested is the caller's own socket address; only the Flux team, which may skip the signature by sending a `zelidauth` header, may name another with `ip`.\n\nUp to 50 ports are tested in sequence; ports outside the application range or banned on Flux are skipped, and the first port that does not answer fails the check. With `echo: true` each port is read rather than just connected to, and `data.answered` returns the first 256 bytes each answered with.\n\nThe handler reads the raw request stream: send the JSON as `text/plain`. With `Content-Type: application/json` the request never answers. **FluxTeam** (or a signed Fluxnode request)","operationId":"checkAppAvailability","security":[{"FluxID":[]},{}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","required":["ports"],"properties":{"ports":{"type":"array","maxItems":50,"items":{"type":"integer"},"description":"Application ports to test"},"port":{"type":"integer","description":"The asking node's API port; only echoed in the answer message"},"ip":{"type":"string","description":"Address to test. Honoured for the Flux team only; every other caller is tested on its own socket address"},"echo":{"type":"boolean","description":"Read each port and return what it answered, in `data.answered`"},"pubKey":{"type":"string","description":"Public key of the asking Fluxnode"},"signature":{"type":"string","description":"The Fluxnode's signature over the JSON of this body without `signature`"}}},"example":{"ports":[31350,31351],"port":16127,"echo":true,"pubKey":"04a1f3d...","signature":"H+ZB3oSrsw6XkBxxlbwk33LEBJ..."}}}},"responses":{"200":{"description":"OK. A failed check is also HTTP 200, as an error envelope: `Unable to verify request authenticity`, `No ports to test`, `Too many ports to test. Maximum of 50 allowed.`, or `Flux Applications on <ip>:<port> are not available. Failed port: <port>`.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"message":{"type":"string"},"answered":{"type":"object","additionalProperties":{"type":"string"},"description":"Only with `echo`; port to the first bytes it answered with"}}}}},"example":{"status":"success","data":{"message":"Flux Applications on 202.61.234.13:16127 are available.","answered":{"31350":"HTTP/1.1 200 OK\r\n..."}}}}}}}}},"/flux/keepupnpportsopen":{"post":{"tags":["Flux"],"summary":"Keep UPnP port mappings alive","description":"Asks this node to poke the caller's ports so the caller's router keeps its UPnP mappings open. The ask must be signed by a Fluxnode on the deterministic list (`pubKey`, and `signature` over the JSON of the body without `signature`) and carry a `timestamp` no more than 10 minutes old. The address poked is the caller's own socket address; only the Flux team, which may skip the signature by sending a `zelidauth` header, may name another with `ip`.\n\nThis node first checks it can reach `http://<address>:<apiPort>/flux/uptime` within 3 seconds, then answers `202` and opens a TCP connection to, and sends one UDP datagram to, each port in turn. Every answer has an empty body. **FluxTeam** (or a signed Fluxnode request)","operationId":"keepUPNPPortsOpen","security":[{"FluxID":[]},{}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["apiPort","ports","timestamp"],"properties":{"apiPort":{"type":"integer","description":"The caller's API port, checked for reachability first"},"ports":{"type":"array","maxItems":10004,"items":{"type":"integer"},"description":"Ports to poke on the caller's address"},"timestamp":{"type":"integer","description":"Unix seconds; refused when more than 600 seconds old"},"ip":{"type":"string","description":"Address to poke. Honoured for the Flux team only; every other caller is poked on its own socket address"},"pubKey":{"type":"string"},"signature":{"type":"string"}}},"example":{"apiPort":16127,"ports":[16126,16122,16128,16129,31350],"timestamp":1772719200,"pubKey":"04a1f3d...","signature":"H+ZB3oSrsw6XkBxxlbwk33LEBJ..."}}}},"responses":{"202":{"description":"Accepted; the ports are poked after the response. Empty body."},"401":{"description":"Not signed by a listed Fluxnode, and not the Flux team. Empty body."},"422":{"description":"Missing or stale `timestamp`, missing `apiPort`, or `ports` not an array of at most 10,004 integers. Empty body."},"503":{"description":"The caller's API port could not be reached back. Empty body."}}}},"/apps/getfolderinfo":{"get":{"tags":["Volume Browser"],"summary":"Get a list of files with their details for all files.","description":"Get a list of files with their details for all files. Syncthing control files, `lost+found` and file-operation staging at the volume root are not listed, and asking for one by path is refused. **AppOwnerAbove**","operationId":"fluxGetfolderinfo","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"example":"FoldingAtRunOnFlux11"},{"in":"query","name":"component","required":true,"schema":{"type":"string"},"example":"FoldingAtHome"},{"in":"query","name":"folder","schema":{"type":"string"},"example":"ddd"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object"}}}},"example":{"status":"success","data":[{"name":"fluxredis_ethercalc (2).tar.gz","size":138008536,"isDirectory":false,"isFile":true,"isSymbolicLink":false,"createdAt":"2024-03-12T08:57:40.817Z","modifiedAt":"2024-03-12T08:58:19.263Z"}]}}}}}}},"/apps/createfolder":{"get":{"tags":["Volume Browser"],"summary":"Create folder.","description":"Create folder inside app volume. **AppOwnerAbove**","operationId":"fluxCreatefolder","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"example":"FoldingAtRunOnFlux11"},{"in":"query","name":"component","required":true,"schema":{"type":"string"},"example":"FoldingAtHome"},{"in":"query","name":"folder","required":true,"schema":{"type":"string"},"example":"ddd"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string"}}},"example":{"status":"success","data":{"message":"Folder Created"}}}}},"503":{"description":"Refused before any work starts: another file operation is running for this application, the node is at its concurrent-operation limit, the file-operation image is still being fetched, or the node is still reconciling its applications after boot. `Retry-After` says when to retry; `data.operation` (jobId, kind, statusUrl) names the operation being waited behind, when there is one.","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"}}}}}}},"/apps/renameobject":{"get":{"tags":["Volume Browser"],"summary":"Rename file/folder","description":"Rename file/folder. **AppOwnerAbove**","operationId":"fluxRenameobject","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"example":"FoldingAtRunOnFlux11"},{"in":"query","name":"component","required":true,"schema":{"type":"string"},"example":"FoldingAtHome"},{"in":"query","name":"oldpath","required":true,"schema":{"type":"string"},"example":"ddd","description":"old path name inside volume with file/folder name"},{"in":"query","name":"newname","required":true,"description":"New name only (no `/`); the entry is renamed within its current folder. An existing name is refused — use POST /apps/moveobject to move or overwrite.","schema":{"type":"string"},"example":"ccc"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string"}}},"example":{"status":"success","data":{"message":"Rename successful"}}}}},"503":{"description":"Refused before any work starts: another file operation is running for this application, the node is at its concurrent-operation limit, the file-operation image is still being fetched, or the node is still reconciling its applications after boot. `Retry-After` says when to retry; `data.operation` (jobId, kind, statusUrl) names the operation being waited behind, when there is one.","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"}}}}}}},"/apps/removeobject":{"get":{"tags":["Volume Browser"],"summary":"Remove file/folder","description":"Remove file/folder. Answers 200 with the completed operation when the delete finishes within 10 seconds, otherwise `202 Accepted` with a `jobId` to poll at `GET /apps/operations/{jobId}`. Deleting a path that does not exist succeeds. **AppOwnerAbove**","operationId":"fluxRemoveobject","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"example":"FoldingAtRunOnFlux11"},{"in":"query","name":"component","required":true,"schema":{"type":"string"},"example":"FoldingAtHome"},{"in":"query","name":"object","required":true,"schema":{"type":"string"},"example":"ddd","description":"path name inside volume with file/folder name"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"jobId":{"type":"string"},"statusUrl":{"type":"string"},"status":{"type":"string","description":"The operation's terminal status"}}}}},"example":{"status":"success","data":{"jobId":"op_2f8f1a1c-1a2b-4c3d-9e8f-0a1b2c3d4e5f","statusUrl":"/apps/operations/op_2f8f1a1c-1a2b-4c3d-9e8f-0a1b2c3d4e5f","status":"Succeeded"}}}}},"202":{"$ref":"#/components/responses/OperationAccepted"},"503":{"description":"Refused before any work starts: another file operation is running for this application, the node is at its concurrent-operation limit, the file-operation image is still being fetched, or the node is still reconciling its applications after boot. `Retry-After` says when to retry; `data.operation` (jobId, kind, statusUrl) names the operation being waited behind, when there is one.","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"}}}}}}},"/apps/downloadfile":{"get":{"tags":["Volume Browser"],"summary":"Download file","description":"Download file. A path that reaches Syncthing control files, `lost+found` or file-operation staging at the volume root is refused. **AppOwnerAbove**","operationId":"fluxDownloadFile","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"example":"FoldingAtRunOnFlux11"},{"in":"query","name":"component","required":true,"schema":{"type":"string"},"example":"FoldingAtHome"},{"in":"query","name":"file","required":true,"schema":{"type":"string"},"example":"notes.txt","description":"full path inside volume to file"}],"responses":{"200":{"description":"OK","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}}}}},"/apps/downloadfolder":{"get":{"tags":["Volume Browser"],"summary":"Download folder as a zip archive","description":"Download folder as a zip archive, streamed as it is built (no Content-Length). At the volume root, Syncthing control files, `lost+found` and file-operation staging are left out, and a path that reaches one is refused. **AppOwnerAbove**","operationId":"fluxDownloadFolder","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"example":"FoldingAtRunOnFlux11"},{"in":"query","name":"component","required":true,"schema":{"type":"string"},"example":"FoldingAtHome"},{"in":"query","name":"folder","required":true,"schema":{"type":"string"},"example":"ddd","description":"full path inside volume to folder"}],"responses":{"200":{"description":"OK","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}}}}},"/backup/getvolumedataofcomponent":{"get":{"tags":["Backup/Restore"],"summary":"Get volume data of a component","description":"Get volume data of a component. **AppOwnerAbove**","operationId":"fluxGetvolumedataofcomponent","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Name of the application","example":"FoldingAtRunOnFlux11"},{"in":"query","name":"component","required":true,"schema":{"type":"string"},"description":"Component of application","example":"FoldingAtHome"},{"in":"query","name":"multiplier","schema":{"type":"string"},"description":"Unit (B, KB, MB, GB); default MB","example":"B"},{"in":"query","name":"decimal","schema":{"type":"number"},"description":"Decimal value","example":2},{"in":"query","name":"fields","required":false,"schema":{"type":"string"},"description":"Comma-separated subset of mount, size, used, available, capacity, filesystem; all fields when omitted","example":"size,used"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string"}}},"example":{"status":"success","data":{"size":3.09,"used":0.28}}}}}}}},"/backup/getremotefilesize":{"get":{"tags":["Backup/Restore"],"summary":"Get size of a remote file. **AppOwnerAbove**","description":"Get size of a remote file. **AppOwnerAbove**","operationId":"fluxGetremotefilesize","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"fileurl","required":true,"schema":{"type":"string"},"description":"Remote URL","example":"https://go.dev/dl/go1.22.1.darwin-amd64.tar.gz"},{"in":"query","name":"multiplier","schema":{"type":"string"},"description":"Unit (B, KB, MB, GB); default B","example":"B"},{"in":"query","name":"decimal","schema":{"type":"number"},"description":"Decimal value","example":2},{"in":"query","name":"number","schema":{"type":"boolean"},"description":"return only number","example":true},{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Application name","example":"FoldingAtRunOnFlux11"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string"}}},"example":{"status":"success","data":67267354}}}}}}},"/backup/getlocalbackuplist":{"get":{"tags":["Backup/Restore"],"summary":"Get the list of local backups based on the provided appname","description":"Get the list of local backups based on the provided appname. `path` must be a backup folder (backup/local, backup/upload or backup/remote) inside the named application's own volume; any other path is refused with \"Path validation failed..\". **AppOwnerAbove**","operationId":"fluxGetlocalbackuplist","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"path","required":true,"schema":{"type":"string"},"description":"Full path","example":"%2Fhome%2Fflux01%2Fzelflux%2FZelApps%2FfluxFoldingAtHome_FoldingAtRunOnFlux11%2Fbackup%2Flocal"},{"in":"query","name":"multiplier","schema":{"type":"string"},"description":"Unit (B, KB, MB, GB); default B","example":"B"},{"in":"query","name":"decimal","schema":{"type":"number"},"description":"Decimal value","example":2},{"in":"query","name":"number","schema":{"type":"boolean"},"description":"return only number","example":true},{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Application name","example":"FoldingAtRunOnFlux11"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"create":{"type":"string"},"size":{"type":"integer"}}}}}},"example":{"status":"success","data":[{"name":"backup_foldingathome.tar.gz","create":"1711116249595","size":280725761}]}}}}}}},"/backup/removebackupfile":{"get":{"tags":["Backup/Restore"],"summary":"Remove a backup file.","description":"Remove a backup file. `filepath` must be a backup file (under backup/local, backup/upload or backup/remote) inside the named application's own volume; any other path is refused with \"Path validation failed..\". **AppOwnerAbove**","operationId":"fluxRemovebackupfile","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"filepath","required":true,"schema":{"type":"string"},"description":"Full path","example":"%2Fhome%2Fflux05%2Fzelflux%2FZelApps%2FfluxFoldingAtHome_FoldingAtRunOnFlux11%2Fbackup%2Flocal%2Fbackup_foldingathome.tar.gz"},{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Application name","example":"FoldingAtRunOnFlux11"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"message":{"type":"boolean"}}}}},"example":{"status":"success","data":{"message":true}}}}}}}},"/backup/downloadlocalfile":{"get":{"tags":["Backup/Restore"],"summary":"Download a local backup file","description":"Download a local backup file. `filepath` must be a backup file (under backup/local, backup/upload or backup/remote) inside the named application's own volume; any other path is refused with \"Path validation failed..\". **AppOwnerAbove**","operationId":"fluxDownloadlocalfile","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"filepath","required":true,"schema":{"type":"string"},"description":"Full path","example":"%2Fhome%2Fflux05%2Fzelflux%2FZelApps%2FfluxFoldingAtHome_FoldingAtRunOnFlux11%2Fbackup%2Flocal%2Fbackup_foldingathome.tar.gz"},{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Application name","example":"FoldingAtRunOnFlux11"}],"responses":{"200":{"description":"OK","content":{"application/gzip":{"schema":{"type":"string","format":"binary"}}}}}}},"/apps/appendbackuptask":{"post":{"tags":["Backup/Restore"],"summary":"Append backup task to an application","description":"Append backup task to an application. **AppOwnerAbove**","operationId":"fluxAppendbackuptask","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"appname":{"type":"string","description":"Name of the application","example":"FoldingAtRunOnFlux11"},"force":{"type":"boolean","default":false,"description":"Archive a synced component even when this node's copy is not confirmed fully synced; otherwise that is refused with the sync shortfall."},"backup":{"type":"array","items":{"type":"object","properties":{"component":{"type":"string","description":"Name of component","example":"FoldingAtHome"},"backup":{"type":"boolean","description":"Whether to perform backup for the component","example":true}}}}},"example":{"appname":"FoldingAtRunOnFlux11","backup":[{"component":"FoldingAtHome","backup":true}]}}}}},"responses":{"200":{"description":"A stream of plain-text progress lines; a refusal is written into it as a line too.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/apps/appendrestoretask":{"post":{"tags":["Backup/Restore"],"summary":"Append restore task to an application","description":"Append restore task to an application. **AppOwnerAbove**","operationId":"fluxAppendrestoretask","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["appname","type","restore"],"properties":{"appname":{"type":"string","description":"Name of the application","example":"FoldingAtRunOnFlux11"},"type":{"type":"string","enum":["local","remote","upload"],"description":"Where each component's archive comes from: the volume's backup/local or backup/upload folder, file `backup_<component>.tar.gz` with the component name lower-cased; or, for `remote`, downloaded first from each entry's `url`."},"force":{"type":"boolean","default":false,"description":"Skip the check that refuses restoring a g: (elected) component on a node other than its current primary."},"restore":{"type":"array","items":{"type":"object","properties":{"component":{"type":"string","description":"Name of component","example":"FoldingAtHome"},"restore":{"type":"boolean","description":"Whether to restore this component","example":true},"url":{"type":"string","description":"Archive URL; required for each restored component when `type` is `remote`"}}}}},"example":{"appname":"FoldingAtRunOnFlux11","type":"local","restore":[{"component":"FoldingAtHome","restore":true}]}}}}},"responses":{"200":{"description":"A stream of plain-text progress lines; a refusal is written into it as a line too.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/ioutils/fileupload":{"post":{"tags":["IOUtils"],"summary":"Upload file","description":"Uploads a file to the specified location. **AppOwnerAbove**","operationId":"fileUpload","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"type","required":false,"schema":{"type":"string"},"description":"`backup` stores the upload in the component volume's backup/upload folder (where appendrestoretask with type upload reads backup_<component>.tar.gz) and ignores `folder`; any other value, or none, stores it in `folder`.","example":"backup"},{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Name of the application","example":"FoldingAtRunOnFlux11"},{"in":"query","name":"component","required":true,"schema":{"type":"string"},"description":"Component of application","example":"FoldingAtHome"},{"in":"query","name":"folder","required":false,"schema":{"type":"string"},"description":"Folder relative to the volume root (created if missing); the volume root when omitted.","example":"ddd/ccc"},{"in":"query","name":"filename","required":false,"schema":{"type":"string"},"description":"Name to store the upload under. When omitted, each file is stored under its multipart field name (not the file's original name), so a client appends each file under the name it should have.","example":"FoldingAtHome.gzip"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"A stream rather than one JSON document: `[bytesReceived,bytesExpected]` pairs as the body arrives, then each stored file's name as it lands. A failure after the stream has started is written into it as the error envelope.","content":{"text/plain":{"schema":{"type":"string"},"example":"[65536,1048576][1048576,1048576]backup_foldingathome.tar.gz"}}},"503":{"description":"Refused before any work starts: another file operation is running for this application, the node is at its concurrent-operation limit, the file-operation image is still being fetched, or the node is still reconciling its applications after boot. `Retry-After` says when to retry; `data.operation` (jobId, kind, statusUrl) names the operation being waited behind, when there is one.","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"}}}}}}},"/daemon/help":{"get":{"tags":["Daemon"],"summary":"RPC list","description":"Gets list of RPC for the Flux daemon or if command query is used it will respond with the help info for that specified call. The list is fluxd's own and still names its wallet and shielded-pool RPCs; FluxOS has not routed those since 8.19.0. **Public**","operationId":"help","security":[],"parameters":[{"in":"query","name":"command","schema":{"type":"string"},"description":"Accepts both help/command and ?command=getinfo. If omited, default help will be displayed.","example":"getmininginfo"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"RPC list"}}},"example":{"status":"success","data":"== Addressindex == getaddressbalance {\"addresses\": [\"taddr\", ...]} getaddressdeltas {\"addresses\": [\"taddr\", ...], (\"start\": n), (\"end\": n), (\"chainInfo\": true|false)} getaddressmempool {\"addresses\": [\"taddr\", ...]} getaddresstxids {\"addresses\": [\"taddr\", ...], (\"start\": n), (\"end\": n)} getaddressutxos {\"addresses\": [\"taddr\", ...], (\"chainInfo\": true|false)}\n== Benchmarks == getbenchmarks getbenchstatus startfluxbenchd startzelbenchd stopfluxbenchd stopzelbenchd\n== Blockchain == getbestblockhash getblock \"hash|height\" ( verbosity ) getblockchaininfo getblockcount getblockdeltas \"blockhash\" getblockhash index getblockhashes high low ( {\"noOrphans\": true|false, \"logicalTimes\": true|false} ) getblockheader \"hash\" ( verbose ) getchaintips getdifficulty getmempoolinfo getrawmempool ( verbose ) getspentinfo {\"txid\": \"txidhex\", \"index\": n} gettxout \"txid\" n ( includemempool ) gettxoutproof [\"txid\",...] ( blockhash ) gettxoutsetinfo verifychain ( checklevel numblocks ) verifytxoutproof \"proof\"\n== Control == getinfo help ( \"command\" ) stop\n== Disclosure == z_getpaymentdisclosure \"txid\" \"js_index\" \"output_index\" (\"message\")  z_validatepaymentdisclosure \"paymentdisclosure\"\n== Fluxnode == createfluxnodekey createzelnodekey fluxnodecurrentwinner getdoslist getfluxnodecount getfluxnodeoutputs getfluxnodestatus getmigrationcount getstartlist getzelnodecount getzelnodeoutputs getzelnodestatus listfluxnodeconf ( \"filter\" ) listfluxnodes ( \"filter\" ) listzelnodeconf ( \"filter\" ) listzelnodes ( \"filter\" ) startdeterministicfluxnode alias_name lockwallet startdeterministiczelnode alias_name lockwallet startfluxnode \"all|alias\" lockwallet ( \"alias\" ) startzelnode \"all|alias\" lockwallet ( \"alias\" ) viewdeterministicfluxnodelist ( \"filter\" ) viewdeterministiczelnodelist ( \"filter\" ) zelnodecurrentwinner\n== Generating == generate numblocks getgenerate setgenerate generate ( genproclimit )\n== Mining == getblocksubsidy height getblocktemplate ( \"jsonrequestobject\" ) getlocalsolps getmininginfo getnetworkhashps ( blocks height ) getnetworksolps ( blocks height ) prioritisetransaction <txid> <priority delta> <fee delta> submitblock \"hexdata\" ( \"jsonparametersobject\" )\n== Network == addnode \"node\" \"add|remove|onetry\" clearbanned disconnectnode \"node\"  getaddednodeinfo dns ( \"node\" ) getconnectioncount getdeprecationinfo getnettotals getnetworkinfo getpeerinfo listbanned ping setban \"ip(/netmask)\" \"add|remove\" (bantime) (absolute)\n== Rawtransactions == createrawtransaction [{\"txid\":\"id\",\"vout\":n},...] {\"address\":amount,...} ( locktime ) ( expiryheight ) decoderawblock \"hexstring\" decoderawtransaction \"hexstring\" decodescript \"hex\" fundrawtransaction \"hexstring\" getrawtransaction \"txid\" ( verbose ) sendrawtransaction \"hexstring\" ( allowhighfees ) signrawtransaction \"hexstring\" ( [{\"txid\":\"id\",\"vout\":n,\"scriptPubKey\":\"hex\",\"redeemScript\":\"hex\"},...] [\"privatekey1\",...] sighashtype )\n== Util == createmultisig nrequired [\"key\",...] estimatefee nblocks estimatepriority nblocks printsnapshot \"time\"  validateaddress \"fluxaddress\" verifymessage \"fluxaddress\" \"signature\" \"message\" z_validateaddress \"zaddr\"\n== Wallet == addmultisigaddress nrequired [\"key\",...] ( \"account\" ) backupwallet \"destination\" consolidateutxos (utxo_count) dumpprivkey \"t-addr\" dumpwallet \"folder/filename\" encryptwallet \"passphrase\" getaccount \"fluxaddress\" getaccountaddress \"account\" getaddressesbyaccount \"account\" getbalance ( \"account\" minconf includeWatchonly ) getnewaddress ( \"account\" ) getrawchangeaddress getreceivedbyaccount \"account\" ( minconf ) getreceivedbyaddress \"fluxaddress\" ( minconf ) gettransaction \"txid\" ( includeWatchonly ) getunconfirmedbalance getwalletinfo importaddress \"address\" ( \"label\" rescan ) importprivkey \"zelcashprivkey\" ( \"label\" rescan ) importwallet \"filename\" keypoolrefill ( newsize ) listaccounts ( minconf includeWatchonly) listaddressgroupings listlockunspent listreceivedbyaccount ( minconf includeempty includeWatchonly) listreceivedbyaddress ( minconf includeempty includeWatchonly) listsinceblock ( \"blockhash\" target-confirmations includeWatchonly) listtransactions ( \"account\" count from includeWatchonly) listunspent ( minconf maxconf  [\"address\",...] ) lockunspent unlock [{\"txid\":\"txid\",\"vout\":n},...] move \"fromaccount\" \"toaccount\" amount ( minconf \"comment\" ) rescanblockchain (start_height) sendfrom \"fromaccount\" \"tofluxaddress\" amount ( minconf \"comment\" \"comment-to\" ) sendmany \"fromaccount\" {\"address\":amount,...} ( minconf \"comment\" [\"address\",...] ) sendtoaddress \"fluxaddress\" amount ( \"comment\" \"comment-to\" subtractfeefromamount ) setaccount \"fluxaddress\" \"account\" settxfee amount signmessage \"t-addr\" \"message\" z_exportkey \"zaddr\" z_exportviewingkey \"zaddr\" z_exportwallet \"folder/filename\" z_getbalance \"address\" ( minconf ) z_getmigrationstatus z_getnewaddress ( type ) z_getoperationresult ([\"operationid\", ... ])  z_getoperationstatus ([\"operationid\", ... ])  z_gettotalbalance ( minconf includeWatchonly ) z_importkey \"zkey\" ( rescan startHeight ) z_importviewingkey \"vkey\" ( rescan startHeight ) z_importwallet \"filename\" z_listaddresses ( includeWatchonly ) z_listoperationids z_listreceivedbyaddress \"address\" ( minconf ) z_listunspent ( minconf maxconf includeWatchonly [\"zaddr\",...] ) z_mergetoaddress [\"fromaddress\", ... ] \"toaddress\" ( fee ) ( transparent_limit ) ( shielded_limit ) ( memo ) z_sendmany \"fromaddress\" [{\"address\":... ,\"amount\":...},...] ( minconf ) ( fee ) z_setmigration enabled z_shieldcoinbase \"fromaddress\" \"tozaddress\" ( fee ) ( limit ) zcbenchmark benchmarktype samplecount zcrawjoinsplit rawtx inputs outputs vpub_old vpub_new zcrawkeygen zcrawreceive zcsecretkey encryptednote zcsamplejoinsplit"}}}}}}},"/daemon/getinfo":{"get":{"tags":["Daemon"],"summary":"Flux daemon info","description":"Returns an object containing various state info for the Flux daemon.\n\nThe `balance` field is **redacted for unauthenticated callers** — send a node-operator `zelidauth` header to receive it. Everything else is public. **Public**","operationId":"getInfo","security":[],"x-codeSamples":[{"lang":"curl","source":"curl -X GET \"https://api.runonflux.io/daemon/getinfo\"\n"},{"lang":"JavaScript","source":"const response = await fetch('https://api.runonflux.io/daemon/getinfo');\nconst daemonInfo = await response.json();\nconsole.log('Daemon version:', daemonInfo.data.version);\nconsole.log('Block count:', daemonInfo.data.blocks);\n"},{"lang":"Python","source":"import requests\n\nresponse = requests.get('https://api.runonflux.io/daemon/getinfo')\ndaemon_info = response.json()\n\nprint(f\"Daemon version: {daemon_info['data']['version']}\")\nprint(f\"Block count: {daemon_info['data']['blocks']}\")\n"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/daemongetinfo"}}},"example":{"status":"success","data":{"version":6010050,"protocolversion":170018,"walletversion":60000,"balance":0,"blocks":1414803,"timeoffset":0,"connections":33,"proxy":"","difficulty":32885.83869788643,"testnet":false,"keypoololdest":1646279801,"keypoolsize":101,"paytxfee":0,"relayfee":0.000001,"errors":""}}}}}}}},"/daemon/getfluxnodestatus":{"get":{"tags":["Daemon"],"summary":"Flux node status","description":"Returns an object containing various state of the Flux node. **Public**","operationId":"getFluxNodeStatus","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/fluxnodestatus"}}},"example":{"status":"success","data":{"status":"CONFIRMED","collateral":"COutPoint(5179622de68fac4c052c0ce1affeaa3faaf4624d7332f769f3fc5c42560455b6, 0)","txhash":"5179622de68fac4c052c0ce1affeaa3faaf4624d7332f769f3fc5c42560455b6","outidx":0,"ip":"144.91.114.167","network":"ipv4","added_height":572386,"confirmed_height":572389,"last_confirmed_height":586403,"last_paid_height":586319,"tier":"NIMMBUS","payment_address":"t1h7HLNYNmG6mZF8WC6BRLHqCib8hMqP3XC","pubkey":"0485c289e6df683ac2af0ce514260a20cc5a631336fee6bbcb897694134c5a5ad2a5d918f99d70a60c0cb30c705a8c5440f1cbca08e6d3f037320f40751c50555c","activesince":1586334448,"lastpaid":1588014482,"amount":12500}}}}}}}},"/daemon/listfluxnodes":{"get":{"tags":["Daemon"],"summary":"Flux node list","description":"Gets a ranked list of Flux nodes. **Public**","operationId":"listFluxNodes","security":[],"parameters":[{"in":"query","name":"filter","required":false,"schema":{"type":"string"},"description":"Filter the list by FluxNode public key, payment address or collateral `txid:index`","example":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC"},{"in":"query","name":"limit","required":false,"schema":{"type":"integer","minimum":1,"maximum":9999999},"description":"Return only the first `limit` entries of the ranked list. Applied only to a successful answer and only when the value is a whole number from 1 to 9999999 without a leading zero; any other value is ignored and the full list is returned.","example":100}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"collateral":{"type":"string","description":"Collateral txid and output index"},"ip":{"type":"string","description":"Ip address of Flux server"},"network":{"type":"string","description":"Network type"},"added_height":{"type":"integer","description":"Block height Flux node was added to list"},"confirmed_height":{"type":"integer","description":"Block height Flux node was confirmed by the network"},"last_confirmed_height":{"type":"integer","description":"Latest block height network confirmed the Flux node"},"last_paid_height":{"type":"integer","description":"Block the Flux node was last paid"},"tier":{"type":"string","description":"Tier of Flux node"},"payment_address":{"type":"string","description":"Address where rewards are paid"},"activesince":{"type":"string","description":"Active time of Flux node in epoch"},"lastpaid":{"type":"string","description":"Last paid time in epoch"},"amount":{"type":"string","description":"Locked collateral amount"},"rank":{"type":"integer","description":"Rank of Flux node"}}}}}},"example":{"status":"success","data":[{"collateral":"COutPoint(826d37f13065e87f77ce1667e035b30933f78462274062aa7e76f249b6ab59db, 0)","ip":"95.216.236.190","network":"ipv4","added_height":562050,"confirmed_height":562053,"last_confirmed_height":588205,"last_paid_height":587939,"tier":"CUMULUS","payment_address":"t1KrT6iKh384mQHwfAPcEFm3U7yFKwhmHbo","pubkey":"0439e8b34e799e620b13bca67c6c32682e43f97e67dd777256f50255e36a98bfcf8c2ce4298b0504d3ac6b20bfd2807d425b71f78992e555eacd57fbd8d2aed637","activesince":"1585083381","lastpaid":"1588210538","amount":"1000.00","rank":0},{"collateral":"COutPoint(3798162c2b60906a9feff0efa38b57444f3749bebe397cba4edd495b929ed9b5, 0)","ip":"77.55.194.135","network":"ipv4","added_height":587653,"confirmed_height":587669,"last_confirmed_height":588184,"last_paid_height":587940,"tier":"CUMULUS","payment_address":"t1QEA6PepP2wS3Lg6gZDiFzRB6PfxWLYeK5","pubkey":"042ebcb3a94fe66b9ded6e456871346d6984502bbadf14ed07644e0eb91f8cc0b1f07632c428e1e6793f372d9c303d680de80ae0499d51095676cabf68599e9591","activesince":"1588175897","lastpaid":"1588210563","amount":"1000.00","rank":1},{"collateral":"COutPoint(a375169d97fcafac46f673045dfa0a78dd78e6bc6db181df18bf39dbe03926a4, 0)","ip":"96.52.90.87","network":"ipv4","added_height":572579,"confirmed_height":572581,"last_confirmed_height":588198,"last_paid_height":587986,"tier":"NIMMBUS","payment_address":"t1a4J5u9rjrgVZLwRPSy7VPNoVVkeErNErk","pubkey":"04a8cf2dd605884e793068e91a6444c573d5f6253643cfb1a2575c94487434cfdba20f115bceb5a96d87ad85aa7099076ba4435d97a9cc8cde6330c649dec1fe4e","activesince":"1586358287","lastpaid":"1588216950","amount":"12500.00","rank":0},{"collateral":"COutPoint(381d29a87b96e82253b3f9581618777469f854ae740b6a785c61867aa6f71e60, 0)","ip":"207.180.253.144","network":"ipv4","added_height":585797,"confirmed_height":585799,"last_confirmed_height":588206,"last_paid_height":587988,"tier":"NIMMBUS","payment_address":"t1ZvKaPfgXJsY1DkYJ5gKwtjKFUkZcuQB2U","pubkey":"044a4faa023fccadfd4b59b888c7690e77f1f2dd613e6cab0b26a25ec152cf2adc16274aa970559d816cdca6730012b5f5a7067dac0fa918d69a44162ab4d4cacf","activesince":"1587952571","lastpaid":"1588217098","amount":"12500.00","rank":1},{"collateral":"COutPoint(1a2c265b7d1d93941c4d551e61c90cc14482579835a4924e1e169339317bbef9,\\ 0)","ip":"47.22.47.186","added_height":582736,"confirmed_height":582738,"last_confirmed_height":588198,"last_paid_height":588034,"tier":"STRATUS","payment_address":"t1bNJrZ9JwWwvroT7YUJUSDfMQ2r21vZppe","pubkey":"041d289318b6e1cc32045d57f896f3c8c3fbbc336be077f3f492d42ab1c391326d843b8ee609feb859bb88d6524b8c25fe6eed958ef4b59f408e759f0458046a1d","activesince":"1587582537","lastpaid":"1588222759","amount":"40000.00","rank":0}]}}}}}}},"/daemon/viewdeterministicfluxnodelist":{"get":{"tags":["Daemon"],"summary":"Deterministic FluxNode list","description":"Same handler and answer as `GET /daemon/listfluxnodes` (fluxd `listfluxnodes`): the ranked FluxNode list, optionally filtered and limited. **Public**","operationId":"viewDeterministicFluxNodeList","security":[],"parameters":[{"in":"query","name":"filter","schema":{"type":"string"},"description":"Accepts both viewdeterministicfluxnodelist/filter and ?filter=193.188.15.238. Filter query will filter list by ,txhash, payment address, ip, or pubkey. If ommited, full list will be displayed.","example":"193.188.15.238"},{"in":"query","name":"limit","required":false,"schema":{"type":"integer","minimum":1,"maximum":9999999},"description":"Return only the first `limit` entries of the ranked list. Applied only to a successful answer and only when the value is a whole number from 1 to 9999999 without a leading zero; any other value is ignored and the full list is returned.","example":100}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"collateral":{"type":"string","description":"Collateral txid and output index"},"txhash":{"type":"string","description":"Transaction id"},"outidx":{"type":"integer","description":"Output index"},"ip":{"type":"string","description":"Ip address of FluxNode server"},"network":{"type":"string","description":"Network type (IPv4, IPv6, onion)"},"added_height":{"type":"integer","description":"Block height FluxNode was added to list"},"confirmed_height":{"type":"integer","description":"Block height FluxNode was confirmed by the network"},"last_confirmed_height":{"type":"integer","description":"Latest block height network confirmed the FluxNode"},"last_paid_height":{"type":"integer","description":"Block the FluxNode was last paid"},"tier":{"type":"string","description":"Tier of FluxNode"},"payment_address":{"type":"string","description":"Address where rewards are paid"},"pubkey":{"type":"string","description":"Fluxnode public key used for message broadcasting"},"activesince":{"type":"string","description":"Active time of FluxNode in epoch"},"lastpaid":{"type":"string","description":"Last paid time in epoch"},"amount":{"type":"string","description":"Amount of collateral"},"rank":{"type":"integer","description":"Rank of FluxNode"}}}}}},"example":{"status":"success","data":[{"collateral":"COutPoint(436d3450affca4dd78a3755f816eb7d46f922dd430e0046b94f26ce88c008e79, 0)","txhash":"436d3450affca4dd78a3755f816eb7d46f922dd430e0046b94f26ce88c008e79","outidx":0,"ip":"77.55.210.97","network":"ipv4","added_height":562050,"confirmed_height":562053,"last_confirmed_height":588205,"last_paid_height":587939,"tier":"CUMULUS","payment_address":"t1ZhnnTVUfgwKbmtFvmYtSb1xwPpSdJmzaY","pubkey":"043249d5fc0517976c8eeaaf96ce306c00687cea677be0181cdddaf8f8e044119f13258083fb0a8e98afdf57994331cd1e71958ce63b7b2d0a2dda0e095bd2a2de","activesince":"1585083381","lastpaid":"1588210538","amount":"1000.00","rank":0},{"collateral":"COutPoint(62e0f589a36b9d009f060bcb062a9baf0a44ed3cb5fb4ba68fb5e8d1c6a76ed3, 0)","txhash":"62e0f589a36b9d009f060bcb062a9baf0a44ed3cb5fb4ba68fb5e8d1c6a76ed3","outidx":0,"ip":"207.180.238.133","network":"ipv4","added_height":587653,"confirmed_height":587669,"last_confirmed_height":588184,"last_paid_height":587940,"tier":"CUMULUS","payment_address":"t1WWAUFtKyytFzuXpn3Rzc6fGFndzD6xWLK","pubkey":"0450331d67221677cdca27c7cce40c52d3f3aae1c71a3dbf0c7322a7739bb42855246a9ab3a0b4280f20a6ebb3bf4dcc2a2290b74e533560d9c64014d8937bd1bb","activesince":"1588175897","lastpaid":"1588210563","amount":"1000.00","rank":1},{"collateral":"COutPoint(b81456f6cb28cab6bb7c715a26cb40dbe841e9d14bf47aadbf7a50fb8a32f7f4, 0)","txhash":"b81456f6cb28cab6bb7c715a26cb40dbe841e9d14bf47aadbf7a50fb8a32f7f4","outidx":0,"ip":"49.12.41.242","network":"ipv4","added_height":572579,"confirmed_height":572581,"last_confirmed_height":588198,"last_paid_height":587986,"tier":"NIMMBUS","payment_address":"t1Wz3D8rTRB3xZi8WE8efgMzRwHhpg8dAWF","pubkey":"04e993a952569ecd6eb26eac7abdb699ca8e3f1debeaf544ef85b3c5838b74d7b30e196e917cb6e2008b2dcb9e42cafc4c93ccafb2888faea26b2e3a1a343f469a","activesince":"1586358287","lastpaid":"1588216950","amount":"12500.00","rank":0},{"collateral":"COutPoint(db8d6440f834f773561025c7327620bb1770df185ec506323f084c436eb9fca7, 0)","txhash":"db8d6440f834f773561025c7327620bb1770df185ec506323f084c436eb9fca7","outidx":0,"ip":"62.171.183.202","network":"ipv4","added_height":585797,"confirmed_height":585799,"last_confirmed_height":588206,"last_paid_height":587988,"tier":"NIMMBUS","payment_address":"t1bXEnPZ22LRtd8WCmmKZAF2gxqaAxWysTb","pubkey":"04bfdff6a29281e057f10c2162db0ba98f70133fc45ccfa3cd8440a1ddc0ae30172b81f73b098cfdfe5f413a361dc422a03a31066413850ba418f3f8a2df65a4e1","activesince":"1587952571","lastpaid":"1588217098","amount":"12500.00","rank":1},{"collateral":"COutPoint(8dcdf431d67c54872dcbbbfe205df8d95bdf8d0c277f617ded10ff74d9242878, 0)","txhash":"8dcdf431d67c54872dcbbbfe205df8d95bdf8d0c277f617ded10ff74d9242878","outidx":0,"ip":"188.239.61.210","network":"ipv4","added_height":582736,"confirmed_height":582738,"last_confirmed_height":588198,"last_paid_height":588034,"tier":"STRATUS","payment_address":"t1ZPnohxvacmT8VaJqRyZyMkvzERddQMttk","pubkey":"0418588b950297e955f7cc211c4d32f4f976433e8f1d4e2f2f0c4a1efd0e7a3b5167f27a0ad92ceedfa5b40862d929934a5d453f1268ee36b6ec22a7e921883454","activesince":"1587582537","lastpaid":"1588222759","amount":"40000.00","rank":0}]}}}}}}},"/daemon/getfluxnodecount":{"get":{"tags":["Daemon"],"summary":"Flux node count","description":"Returns a count of FluxNodes and enabled FluxNodes categorized by tiers. **Public**","operationId":"getFluxNodeCount","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"total":{"type":"number","description":"Total number of Flux nodes"},"stable":{"type":"number","description":"Number of stable Flux nodes"},"basic-enabled":{"type":"number","description":"Basic Flux node count"},"super-enabled":{"type":"number","description":"Super Flux node count"},"bamf-enabled":{"type":"number","description":"Bamf Flux node count"},"ipv4":{"type":"number","description":"Flux nodes on ipv4"},"ipv6":{"type":"number","description":"Flux nodes on ipv6"},"onion":{"type":"string","description":"Flux nodes on tor"}}}}},"example":{"status":"success","data":{"total":692,"stable":692,"basic-enabled":293,"super-enabled":231,"bamf-enabled":174,"ipv4":692,"ipv6":0,"onion":0}}}}}}}},"/daemon/getdoslist":{"get":{"tags":["Daemon"],"summary":"FluxNode DOS list","description":"Get a list of all fluxnodes in the DOS list. **Public**","operationId":"getDOSList","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"collateral":{"type":"string","description":"Collateral transaction hash"},"added_height":{"type":"integer","description":"Height the fluxnode start transaction was added to the chain"},"payment_address":{"type":"string","description":"The payment address associated with the fluxnode"},"eligible_in":{"type":"integer","description":"The amount of blocks before the fluxnode is eligible to be started again"},"amount":{"type":"string","description":"The amount of collateral associated with the fluxnode"}}}}}},"example":{"status":"success","data":[{"collateral":"COutPoint(44bb3ad5ca975ff57f8b2488786bfb72115ee648e1a06d77aa5fd6bfc388cbba, 0)","added_height":644302,"payment_address":"t1LJAkTUAHcJZ535mqJmFwHtMTrEaQBSNf1","eligible_in":35,"amount":"1000.00"}]}}}}}}},"/daemon/getstartlist":{"get":{"tags":["Daemon"],"summary":"FluxNode start list","description":"Get a list of all Fluxnodes in the start list. **Public**","operationId":"getStartList","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"collateral":{"type":"string","description":"Collateral transaction hash"},"added_height":{"type":"integer","description":"Height the fluxnode start transaction was added to the chain"},"payment_address":{"type":"string","description":"The payment address associated with the fluxnode"},"expires_in":{"type":"integer","description":"The amount of blocks before the start transaction expires, unless a confirmation transaction is added to a block"},"amount":{"type":"string","description":"The amount of collateral associated with the fluxnode"}}}}}},"example":{"status":"success","data":[{"collateral":"COutPoint(631eba8bc39c2e6165607e385ad55aa0b3d69991624c3e7292aa2f2e3d4e86e0, 0)","added_height":684078,"payment_address":"t1TosdpcFNWAaJ8kNmc1LNWbVKh6ob4Tvri","eligible_in":9,"amount":"1000.00"}]}}}}}}},"/daemon/fluxnodecurrentwinner":{"get":{"tags":["Daemon"],"summary":"Current list of winners","description":"Gets a list of current FluxNode winners. **Public**","operationId":"FluxNodeCurrentWinner","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"CUMULUS Winner":{"type":"object","properties":{"collateral":{"type":"string","description":"Collateral txid and output index of FluxNode"},"ip":{"type":"string","description":"Ip address of FluxNode"},"added_height":{"type":"integer","description":"Block height FluxNode was added"},"confirmed_height":{"type":"integer","description":"Block height FluxNode was confirmed"},"last_confirmed_height":{"type":"integer","description":"Block height FluxNode was last confirmed"},"last_paid_height":{"type":"integer","description":"Block height FluxNode was last paid"},"tier":{"type":"string","description":"FluxNode tier"},"payment_address":{"type":"string","description":"Payment address"}}},"NIMMBUS Winner":{"type":"object","properties":{"collateral":{"type":"string","description":"Collateral txid and output index of FluxNode"},"ip":{"type":"string","description":"Ip address of FluxNode"},"added_height":{"type":"integer","description":"Block height FluxNode was added"},"confirmed_height":{"type":"integer","description":"Block height FluxNode was confirmed"},"last_confirmed_height":{"type":"integer","description":"Block height FluxNode was last confirmed"},"last_paid_height":{"type":"integer","description":"Block height FluxNode was last paid"},"tier":{"type":"string","description":"FluxNode tier"},"payment_address":{"type":"string","description":"Payment address"}}},"STRATUS Winner":{"type":"object","properties":{"collateral":{"type":"string","description":"Collateral txid and output index of FluxNode"},"ip":{"type":"string","description":"Ip address of FluxNode"},"added_height":{"type":"integer","description":"Block height FluxNode was added"},"confirmed_height":{"type":"integer","description":"Block height FluxNode was confirmed"},"last_confirmed_height":{"type":"integer","description":"Block height FluxNode was last confirmed"},"last_paid_height":{"type":"integer","description":"Block height FluxNode was last paid"},"tier":{"type":"string","description":"FluxNode tier"},"payment_address":{"type":"string","description":"Payment address"}}}}}}},"example":{"status":"success","data":{"CUMULUS Winner":{"collateral":"COutPoint(5e6fdf0a56de71c3fcaf4091097d8feea7b3e1f966e334b7ea234a616813f934, 0)","ip":"66.119.15.218","added_height":589025,"confirmed_height":589026,"last_confirmed_height":590742,"last_paid_height":590489,"tier":"CUMULUS","payment_address":"t1VLEe6iBNGGicyiqQNzGWsZ6Z6pNZZrTyq"},"NIMMBUS Winner":{"collateral":"COutPoint(4da9b0320ab1a1e94662471732b722667cd68a25d5db72f18572e36f63452872, 0)","ip":"85.23.158.111","added_height":585221,"confirmed_height":585222,"last_confirmed_height":590742,"last_paid_height":590538,"tier":"NIMMBUS","payment_address":"t1WdrzqRR4gh73mPJpN3PDB9a9ZFiatP9tp"},"STRATUS Winner":{"collateral":"COutPoint(7f69bbb001f27177d2b60b99e3dbe3d95b82b69b8d82a21b9829ddc27af2be01, 0)","ip":"193.188.15.153","added_height":587646,"confirmed_height":587649,"last_confirmed_height":590742,"last_paid_height":590594,"tier":"STRATUS","payment_address":"t1dDaoT2WDv5M5gTdx7CzLgXEQSEeqVkryw"}}}}}}}}},"/daemon/getbestblockhash":{"get":{"tags":["Daemon"],"summary":"Block hash of tip on longest chain","description":"Returns the hash of the best (tip) block in the longest block chain. **Public**","operationId":"getBestBlockHash","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Block hash"}}},"example":{"status":"success","data":"00000045ee2d11311976f420b0d753dc7a6e2800a36cf07f6ec1572699737ab6"}}}}}}},"/daemon/getblock":{"get":{"tags":["Daemon"],"summary":"Get block data","description":"Gets block data using block height or block hash you specify to get info for with verbosity option. **Public**","operationId":"getBlock","security":[],"parameters":[{"in":"query","name":"hashheight","required":true,"schema":{"type":"string"},"description":"Block hash or block height","example":"588530"},{"in":"query","name":"verbosity","schema":{"type":"integer","enum":[0,1,2],"default":2},"description":"If verbosity is 0, returns a string that is serialized, hex-encoded data for the block. If verbosity is 1, returns an Object with information about the block. If verbosity is 2, returns an Object with information about the block and information about each transaction. FluxOS uses 2 when the parameter is omitted. The response example shown is for verbosity 1.","example":1}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"hash":{"type":"string","description":"The block hash"},"confirmations":{"type":"string","description":"The number of confirmations or -1 if on wrong chain"},"size":{"type":"integer","description":"The block size"},"height":{"type":"integer","description":"The block height or index"},"version":{"type":"integer","description":"The block version"},"merkleroot":{"type":"string","description":"The merkle root"},"finalsaplingroot":{"type":"string","description":"The root of the Sapling commitment tree after applying this block"},"tx":{"type":"array","items":{"type":"string","description":"The transaction id's"}},"time":{"type":"integer","description":"The block time in seconds since epoch (Jan 1 1970 GMT)"},"nonce":{"type":"string","description":"The nonce"},"solution":{"type":"string","description":"The solution"},"bits":{"type":"string","description":"The bits"},"difficulty":{"type":"number","description":"The difficulty"},"chainwork":{"type":"string","description":"The chainwork"},"anchor":{"type":"string","description":"Merkle root of note commitment tree"},"valuePools":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Protocol name of pool(sprout,sapling)"},"monitored":{"type":"boolean","description":"Status of pool monitor"},"chainValue":{"type":"number","description":"Pool value of FLUX"},"chainValueZat":{"type":"integer","description":"Pool value of FLUX"},"valueDelta":{"type":"integer","description":"Delta value"},"valueDeltaZat":{"type":"integer","description":"Delta value"}}}},"previousblockhash":{"type":"string","description":"The hash of the previous block"},"nextblockhash":{"type":"string","description":"The hash of the next block"}}}}},"example":{"status":"success","data":{"hash":"0000008ac60c223e8f7d7ea458264ec308135bde7515ee1440a824ea76610b2d","confirmations":3,"size":1891,"height":588530,"version":4,"merkleroot":"28f7e9d0c29bf5fa404b28e1e6c2228d7e8f9a672d24dc9c9882dabd8fd47714","finalsaplingroot":"5144b7dcffa9a72d774e376baa38001d0f1dd760e435902b7af2f72461532c6d","tx":["1ed830027683e98c5670981ee983860485fce5132f30d9b6e8e248789c52c55d","4e90720727aa79d29870447c1f15f9bd40058b7096eb66d4b9de8c6e945975bb"],"time":1588282383,"nonce":"0229f5cc00000000000000000000000000000000000000000000000040060000","solution":"1b01d5b42dce5c5fea7f4a591c812d36ac938bcaf035bed4dc6328b8de555c4b0a5b3657d0ae1d5807e828b5e5e5a6dd057d0493","bits":"1e00c837","difficulty":2618.622027119306,"chainwork":"000000000000000000000000000000000000000000000000000029a0d2a05a8e","anchor":"e9585c5a63103a1dffea87286f28b0c649a9b481aa150ef4bb309a7e9d76b34e","valuePools":[{"id":"sprout","monitored":true,"chainValue":266554.25222433,"chainValueZat":26655425222433,"valueDelta":0,"valueDeltaZat":0},{"id":"sapling","monitored":true,"chainValue":2018046.78899491,"chainValueZat":201804678899491,"valueDelta":-0.01711468,"valueDeltaZat":-1711468}],"previousblockhash":"00000057e8ef2fc394594f1f37d6f5ef7cc2ab4f2af3b6b3eaa14adb9310950b","nextblockhash":"000000196832b58171a331e684f5c3df019632749a3219bfb57569d0f7601a30"}}}}}}}},"/daemon/getblockchaininfo":{"get":{"tags":["Daemon"],"summary":"Blockchain info","description":"Returns an object containing various state info regarding block chain processing. Note that when the chain tip is at the last block before a network upgrade activation, consensus.chaintip != consensus.nextblock. **Public**","operationId":"getBlockchainInfo","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"chain":{"type":"string","description":"Current network name as defined in BIP70 (main, test, regtest)"},"blocks":{"type":"integer","description":"The current number of blocks processed in the server"},"headers":{"type":"integer","description":"The current number of headers we have validated"},"bestblockhash":{"type":"string","description":"The hash of the currently best block"},"difficulty":{"type":"number","description":"The current difficulty"},"verificationprogress":{"type":"number","description":"Estimate of verification progress"},"chainwork":{"type":"string","description":"Total amount of work in active chain, in hexadecimal"},"pruned":{"type":"boolean","description":"True if chain has been pruned"},"size_on_disk":{"type":"integer","description":"The estimated size of the block and undo files on disk"},"commitments":{"type":"integer","description":"Number of commitments"},"valuePools":{"type":"array","items":{"properties":{"id":{"type":"string","description":"Name of pool"},"monitored":{"type":"boolean","description":"Monitor status"},"chainValue":{"type":"number","description":"Value of FLUX"},"chainValueZat":{"type":"integer","description":"Value of FLUX"}}}},"softforks":{"type":"array","items":{"properties":{"id":{"type":"string","description":"Name of softfork"},"version":{"type":"integer","description":"Block version"},"enforce":{"type":"object","properties":{"status":{"type":"boolean","description":"True if threshold reached"},"found":{"type":"integer","description":"Number of blocks with the new version found"},"required":{"type":"integer","description":"Number of blocks required to trigger"},"window":{"type":"integer","description":"Maximum size of examined window of recent blocks"}}},"reject":{"type":"object","properties":{"status":{"type":"boolean","description":"True if threshold reached"},"found":{"type":"integer","description":"Number of blocks with the new version found"},"required":{"type":"integer","description":"Number of blocks required to trigger"},"window":{"type":"integer","description":"Maximum size of examined window of recent blocks"}}}}}},"upgrades":{"type":"object","properties":{"76b809bb":{"type":"object","properties":{"name":{"type":"string","description":"Name of upgrade"},"activationheight":{"type":"integer","description":"Activation block height"},"status":{"type":"string","description":"Status of upgrade"},"info":{"type":"string","description":"Additional info of upgrade"}}}}},"consensus":{"type":"object","properties":{"chaintip":{"type":"string","description":"Branch ID used to validate the current chain tip"},"nextblock":{"type":"string","description":"Branch ID that the next block will be validated under"}}}}}}},"example":{"status":"success","data":{"chain":"main","blocks":590788,"headers":590788,"bestblockhash":"0000007c586f90cbba2ba9b8708bd9e7982ad1e7feb61a196312e1cc9510972f","difficulty":2864.222620571916,"verificationprogress":0.9999987778641473,"chainwork":"000000000000000000000000000000000000000000000000000029ac8cd1cf8c","pruned":false,"size_on_disk":3398677218,"commitments":809048,"valuePools":[{"id":"sprout","monitored":true,"chainValue":266554.25222433,"chainValueZat":26655425222433},{"id":"sapling","monitored":true,"chainValue":2020907.82312995,"chainValueZat":202090782312995}],"softforks":[{"id":"bip34","version":2,"enforce":{"status":true,"found":4000,"required":750,"window":4000},"reject":{"status":true,"found":4000,"required":950,"window":4000}},{"id":"bip66","version":3,"enforce":{"status":true,"found":4000,"required":750,"window":4000},"reject":{"status":true,"found":4000,"required":950,"window":4000}},{"id":"bip65","version":4,"enforce":{"status":true,"found":4000,"required":750,"window":4000},"reject":{"status":true,"found":4000,"required":950,"window":4000}}],"upgrades":{"76b809bb":{"name":"Halving","activationheight":1076532,"status":"active","info":"Flux Halving"}},"consensus":{"chaintip":"76b809bb","nextblock":"76b809bb"}}}}}}}}},"/daemon/getblockcount":{"get":{"tags":["Daemon"],"summary":"Current block count","description":"Returns the number of blocks in the best valid block chain, i.e. the current block height. **Public**","operationId":"getBlockCount","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"integer","description":"Block count"}}},"example":{"status":"success","data":1410823}}}}}}},"/daemon/getblockdeltas":{"get":{"tags":["Daemon"],"summary":"Get block deltas data","description":"Returns data of block deltas. **Public**","operationId":"getblockdeltas","security":[],"parameters":[{"in":"query","name":"hash","required":true,"schema":{"type":"string"},"description":"Block hash","example":"000000234b617194f3faff69ee62f0dde0115f2007c3b42e38eaba80c786a5e5"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","description":"Block deltas information"}}},"example":{"status":"success","data":{"hash":"000000234b617194f3faff69ee62f0dde0115f2007c3b42e38eaba80c786a5e5","confirmations":861038,"size":23461,"height":590823,"version":4,"merkleroot":"61d6664cb4e3575d4362f922316712fe647555c313ab6c4625bb368a93b40cf6","deltas":[{"txid":"b8b7693c667f9bbfbd813894750ac9253d8adf55337dacea90d3a4c4082e0651","index":0,"inputs":[],"outputs":[{"address":"t1fMvBXaLzC9i6YKYnD3VCUZN2oifSsCZkx","satoshis":11100011000,"index":0},{"address":"t1PCxVydF7W4qqsJtNZmY4mGjifTDZLS5Pn","satoshis":562500000,"index":1},{"address":"t1frSzhh5TiWpfdZHcmr1ZVe2Eq29CWjbjN","satoshis":937500000,"index":2},{"address":"t1LaCpfmHx15cdpnhMh3tFHrey9eJyzfy9J","satoshis":2250000000,"index":3},{"address":"t1bdh6sfstXmVhZJrvtD2eSw4GBLKNw1qj8","satoshis":150000000,"index":4}]},{"txid":"b82351bf0f579a3300878f6b11ba5a81b228c3605d66e7a0c57ccba4a1d4f117","index":1,"inputs":[{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":0,"prevtxid":"68329b05ef6a0ecac53f8dc172eea3c90be95654b344f04285b54a48b34f5900","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":1,"prevtxid":"74b3e32fa7fd17ab6f37385293d78e031763106653036524993136069bb43905","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":2,"prevtxid":"6190156195143119297cc2117d93cee1bcb40c66885db98151aa9159bec32307","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":3,"prevtxid":"264f0b84b3f368c8199587c9017dfe4a4912a4a96f687e9e35a19fb6023c2a07","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":4,"prevtxid":"04bf8b553c4897b48785ad76ceef8c6f6b1f5eaff6a50211df04fa5637266507","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":5,"prevtxid":"dc23490d91a6d21819e4c4aa3eb4787bd506cbd1eb3fdce9f49cc2b1e25f1d09","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":6,"prevtxid":"32349482da76f33a07dcf77f05214eda28864b0bb7fc3243ae66b08c95278d0a","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":7,"prevtxid":"9811de062b884d2902dd9c3cfb1c2ccc3ae46131f23cd52fb2ffaf321c9ea30a","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":8,"prevtxid":"917632c0a7c4f9b7131401cb6c1882063365f467ea972225e0090795d90c370e","prevout":1},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":9,"prevtxid":"c53705604881fe73da298c405ce41f74de31f17f4e98b78af8cc0f7ca69b4c10","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":10,"prevtxid":"203a0ce6c83503b9c359aeccdbc48e109b25f03dcd6983acaefaafb422341712","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":11,"prevtxid":"c3e4c3bb33f1c697a864af7f8ecb74d1a316bee0ccc39c8cf46c9ae561ad7c13","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":12,"prevtxid":"b75b442636e5c5ee71edb7fd060b81d444d188e51fc04641a2e439c21784df14","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":13,"prevtxid":"cea8e7955a4772f07a8c56e5cb6dd39547dbbf7a9fbcbaab5e6a6ada4ec08f16","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":14,"prevtxid":"00551ad93ffe901250457e0a63729c1167771b23c6ab978b97fa0e27674c3a19","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":15,"prevtxid":"ffe23d6383224f48dd5aa8c984e71abf8c70034c667255beb45eab5d2ea00823","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":16,"prevtxid":"dd48d754664a5bece0d1b95df84ba5fe1f0057339b21a1d85f9f4d439715c524","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":17,"prevtxid":"1609739b6231751f71225434026926b267b794100eb4da8c8bb0988398006d26","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":18,"prevtxid":"bc8be8a4d023fe4751ab9db92f29cc6551fb72730ca703f028a2b5f1e38d0b29","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":19,"prevtxid":"dfed73ecad925061d775f3ad4cefb5b1cc709d263efc4f519363b2055d3a462a","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":20,"prevtxid":"dbc34e6af3cf12743bb74b1f4e0a2f11b9f84b844a80b0867aa293f3c6de762a","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":21,"prevtxid":"fcf21266ddc20cf693fe88154eedaf52c3b8a96560f6d43dae8d0a39f2fd632d","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":22,"prevtxid":"731320bac92bd36679a217b45afe7677eb546ca79c4b91d8fdc0149e1690542f","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":23,"prevtxid":"7acfd073c3cefddb2221aa6870af0a0628d097a05bdcc10fecb03ec992ee6930","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":24,"prevtxid":"b97bb189a8caf5646df5f96ab97cb69af759ff2a4b36fd4406d67e895aa88831","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":25,"prevtxid":"463e2d4103784a7a97f58e6f758e588abeeb01a96bba0a4cbde0cc64f02d2332","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":26,"prevtxid":"a635c16672fd90080ade2c8c6c94f4aa83933bb94ce7c915883957064f5db132","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":27,"prevtxid":"909f0686d3f8c0efc9660bc829618aa46a47c1829a2d9787e8b9cb1ed0324633","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":28,"prevtxid":"f29019e76826227983374183ec8d8f2361c420fef5e753cb4314e2c16a5ab734","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":29,"prevtxid":"5c019c098309a323822dbcf79804d3c4ab27761b1b73af0092f69c81e86ec234","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":30,"prevtxid":"fe5992dc1d6c3d4181faa16efc3004a3d81a9d9817da83b0288429607111a73b","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":31,"prevtxid":"1ad63237e5b707260830372b68f4cdfba9b3377a85cabbef33e92907e2d7cf3e","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":32,"prevtxid":"308ce26fed61cbc0e90c5f8967b897dee21fddfc5f13ba62d69833ee9e0d1a40","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":33,"prevtxid":"f1458b6d5595e8bdadd66e9c90c1dc0c14e97b2f5fd1bcf4f5b91370d0e6e442","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":34,"prevtxid":"a6673a84de23dcf6fa49afa989cadedac86db887479d6e9ca1ff0ef8f4c5e243","prevout":1},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":35,"prevtxid":"f3c505a7ca00bf36bdd146877a08a1b2362203029eefab351f789d71c1fb5947","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":36,"prevtxid":"2a7405dc72421211dc343edb8b32bbff3f81ec558ea9165d40c2ef43a47c7b4c","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":37,"prevtxid":"15f1b54b25a8dc541622f66ac523dfe5b57803899ab9b57be86dcb7906e2c14d","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":38,"prevtxid":"6b2af13923f8d4a43563ec87f5f3064dec56b31c4f59832c29ecc9351f1a574e","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":39,"prevtxid":"94736fcc556cfd74a7b1d239740d170c07a42eee5de4425e61de341fca62ee4e","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":40,"prevtxid":"ef41b9360978da2d72e692bb593564f8fb428639a9c77a95736294ea220a374f","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":41,"prevtxid":"973e8b215140ce4d1c89e69fcc8a303698654641db3f7b9e92ced4d9c66ee054","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":42,"prevtxid":"010a2ddaa60607cd82f2e92e7471c18cb1c8ee2bf2ce520ca0c6204ca7ae7c59","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":43,"prevtxid":"c7d670324f9f2fa7bfc49cb3f24f785dd73940a2545aa90b0b9a98bb78a33e5c","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":44,"prevtxid":"4cbf610288e3c7b773e7ee5852337ec1bea0b66d21447303f575bfd11bfc765c","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":45,"prevtxid":"205ae014f1becd352e82ad05ca014aa0de2252635aa0338e52c0cf9176e13160","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":46,"prevtxid":"519cccafd7105e90b6b3f1cbb8d7a01c321203914b6afae4484f3fd7ddc53b60","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":47,"prevtxid":"5c5a4bbfced49a6a6946203497db3cecce025743b8f6a4252436787b3242f965","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":48,"prevtxid":"8ceba4d4aace6ad6ec0d69c72a117314df3d22b41c69c0c4de2680e916bd3866","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":49,"prevtxid":"5229c9f33de85ec37ab7fc0605f2db7afaa173036948e12b9e023c20aae6256f","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":50,"prevtxid":"f3a973eb99c26de436a81d2ff4714b6614067b1290d97675b38edca47b91e571","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":51,"prevtxid":"3fef77a58335857350ac5aa9ac12f77e11300d3ef1b281bd36f0d90f67ba5b72","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":52,"prevtxid":"8cf05e22b8432f96d170c575d2d0d4d980678085e2cf6b6019856e00baadf572","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":53,"prevtxid":"0c7cd11d614d05f5eff48d9fcc24726a8be833fa8a7b9c53012628c15188d473","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":54,"prevtxid":"5f7eba6b3de93273c29e224d07abd324f2db37b33b046225fd39b6748b019674","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":55,"prevtxid":"eb316ed163c9a36b87223ffe2cf3ce817573b1fcaf99468428c8bd43c01cb779","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":56,"prevtxid":"c1df516de5ea35d75e53d597d142d56c7c0e0fbde2ad6bbf5f58402642d4477a","prevout":1},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":57,"prevtxid":"8cf5018925f2d37e537dae83849b78198085117545b7d626de7354f71e1ec17a","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":58,"prevtxid":"381e53986aff4aba609f3dcfa0b32a9fdbac4f8b635afb4fa5d22968ce3ac97d","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":59,"prevtxid":"dcce0155aa0ae56a98bbc090c9f94e978eaff0bfcb5955d8a221e160c96dfb7e","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":60,"prevtxid":"69e2beda071dc3d035e29a8c64dc30c8d0d6f1d57b0794714481ce73914c5d80","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":61,"prevtxid":"bfcd1c75f2c606d8e4174055228ff35a7d245bf1c3a99ccf1977f6ecaa231782","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":62,"prevtxid":"d381d1f0caf6e7773b85604628d5774d1221e876565506b7742a0f1a6c88c582","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":63,"prevtxid":"a5a86f133ac49336227bdf7d29d4da4f91f2c504a05d2b1020988cbc81d55886","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":64,"prevtxid":"25807684599c04ffa13aa59df1e00a31961be66e76cceee39e3d568b53401c88","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":65,"prevtxid":"9d17a29800556375e8db0c11c090ced3153a4e53ab8101f8db0f0c0287f4e088","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":66,"prevtxid":"be37bf9a9ac4569aa83e722d9d29e4b13b86c9b8e1c184b33a5482a932bbc78b","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":67,"prevtxid":"c1ac1125ac90a221f988e93c880fc1c1a4ef271adbd5e914d356577a72591d8c","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":68,"prevtxid":"a3851e2819566da37e3ffd4e6adc47634985660394ac6bc7e13c0edb8e56388c","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":69,"prevtxid":"8ac14569bb75c4008bf3478a7a0ec1b387b578eca52ab70e4a5b5039a0d0348e","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":70,"prevtxid":"165201561d1d52d12d785d3a09333ae7ea859baff55185d15f8ade8e0955728f","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":71,"prevtxid":"e665bd27510d9240f674ad7d6a6e9422e5534d3ad4079623ae938da523a98a8f","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":72,"prevtxid":"9663f7871d2ba5c50862a505b87dc66583880737975700e72d33a4a9711ffb8f","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":73,"prevtxid":"0ea3d0d861d52555caa20d87472b6da32827ad8f40474277127f21a49aaf9490","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":74,"prevtxid":"3f710f0a6f3b8fa6707a458accc7526ed1fc03762acebd7965d9290b4d143291","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":75,"prevtxid":"4271c24a96962ecfe71ae5163be82e33ef57fe6bab113a2fafe2e2a7015b4c92","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":76,"prevtxid":"de5d4a8a947787f47cf27a26797573dc899cdc7634e8f102616b452beca8e892","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":77,"prevtxid":"611dd75d1f2a81569f21028283ff1b3dd865376cafff30ccde56375f2264b793","prevout":1},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":78,"prevtxid":"1b36777dffd7e1afefa0a03b4879cfabc8e3f3cab7c27f8ed87af816d7e92194","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":79,"prevtxid":"851b66d51e32d29aa44f4df4ac7ba8b241e8889bed28ba68e1637ebc2585c194","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":80,"prevtxid":"7b660c6b87247052652abb5b2b7810c4119a9b559824cec3d405a2fbba2fe99c","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":81,"prevtxid":"e06d870352e059b478f374b794d1a8f5930c4d589a4983d2efc5e78ac7fcff9c","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":82,"prevtxid":"3a182659a8efb0e86dd9e60e4fa3395fa337248c7ee4301553784595d1b3999d","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":83,"prevtxid":"3960ab90c369d6fb45d90f2763235b0f0cfc953ce2ecd77c888f4ef05c5daf9d","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":84,"prevtxid":"e85184cdc43723094c1b23ad3c595a161bd8cab981762786462e664ea3679da8","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":85,"prevtxid":"e3aca715d67454c8410c5659fb1966a8f14530a37f406331168d7f581194caad","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":86,"prevtxid":"08733cb51854888e901b13bb0941ebc56a2ee7c1ed259e45c8e54c203f99e8af","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":87,"prevtxid":"b95a719fdf71d1d1f47c823d9a669344f6a7c117032e60350519279cf457fdaf","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":88,"prevtxid":"52db6f174b5a424acd042c7efdcaee1d5608119855d69b567c0772d67bc029b0","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":89,"prevtxid":"00bc38bcfb09fb26c632a2e3105845d8a2053bf22120c4e517f08d3d5b4c85b5","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":90,"prevtxid":"589307060fd9bae994b110b20c6b5f5bb11ad52bb09f0e149482ec907a31d8b5","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":91,"prevtxid":"2571bd66474a396f66549fcee9cd9a578bc3217632e13bd76336d43a9fa826b7","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":92,"prevtxid":"ba1985dce84aa7c605a2c6459ce9286744c789606ef1cb8c41e4c475dc5b99b8","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":93,"prevtxid":"6cac2506d5133ed78d668310ed725ba02187e8f55d864308794ff42e934df3ba","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":94,"prevtxid":"cc9b71b5455d9d0bfbfc4d1209f8f9346d93847fed46da6ac458c086e01478c1","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":95,"prevtxid":"f9795fbcd30a9cc6a40a007af64b03177d3a492ef7639182eaa3ad3871807ac1","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":96,"prevtxid":"2228cef5eba9c574792de18a52b1bd6de6b7d34bf67a414b8153578e43f528c3","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":97,"prevtxid":"1ba3d7308440d5af1c3ab6f70a2eaf3745cbf48275856537d49a78c5e32023c4","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":98,"prevtxid":"8b5f789e8c2eb9cb3320f7550011552bee865b6a64bd374b55b2774ef5e765c4","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":99,"prevtxid":"a1cff603c80695f27370062ab55be5f2b7579faa44f38504531a3eb37b9e15c5","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":100,"prevtxid":"a11db96ce2c072b5f8c7711a075cb485a2dbdfa98f0a3db1e96b90e6d5538ec6","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":101,"prevtxid":"d031ab964b86f78a2a022a0299bc4dd90a49cdbf3d7b2cb4c0dd56f55b465cc7","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":102,"prevtxid":"94cde88ab4946cacc4afcd36629c42fc486fdb5730aa67b26cfff2014de4fdc7","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":103,"prevtxid":"e12f88a5cca277d986d8315e4fb2e5b2b0eaf54beb317660c3a667cad992cac9","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":104,"prevtxid":"7759fba3edfa77d799cf6731820d76cb5a73724f778fa4910d77649a52fb69ca","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":105,"prevtxid":"0402647402f39d89d90c00b3202afe5cbcb69acebb4a677a193336ebc48dd6cf","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":106,"prevtxid":"0ec2e08d1e7b043361180382caa6e820740cd50d89f415f0ef9bf6d18b357cd0","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":107,"prevtxid":"9d781390ccdc9c6b1031cb000f220ecb0f0e571ea357062ae1ac99c3049a7ed0","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":108,"prevtxid":"c2f16ae9bda641aac36ff103015dd115be30c7b20020dcf286f3758a16f1aed0","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":109,"prevtxid":"3c6642139a2fb7f563c90ce978424322701a19ea152b9fdca80ba3556752e0d0","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":110,"prevtxid":"aa17f9e86859078c54049109626a1fb595e032006fac0d45f8f721980004f7d4","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":111,"prevtxid":"df7a375f69dbd416e83c96b8ed392fb941cdbc5f6948350fd85d56a4899b48d9","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":112,"prevtxid":"997b5044382ebfd34e6984308da297880e7a1611c48591d0c116f9dcb6c9f6dc","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":113,"prevtxid":"b83de450f63f4f9a21ee38c8553fb599ca177c1c414ce654460f19ba44ce1ade","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":114,"prevtxid":"65a45dee417addd493e66a055267d6026aaa53798525afd0c06f7b59044c5fdf","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":115,"prevtxid":"e76c6885d9d3e2adf5c9630c4ec6a358204da2edb3c1b3c289bd5d3a459612e0","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":116,"prevtxid":"2fdcb71679b9ac4b7961b24c2ee1c5ac853319481fe6e7d126f10f3d75c61ce0","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":117,"prevtxid":"72505e5c7b467c064520df692d76dbafffa20a865549d10db758d38d61d590e0","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":118,"prevtxid":"ee669de4d85e550e345324174b2721770b7e482cb30de0149dad6c1b2acf7ee1","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":119,"prevtxid":"d62ee3ec7041c36ddf315e5db15ad8f062780f1ec5f0327cc982c713febb0be2","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":120,"prevtxid":"ef799b7dddd324b927e09c0842927694299dda438342c2effd3834c0b3b4f3e2","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":121,"prevtxid":"b55749d5afc1c13cd8638ec50a1dc88ce6f5e58b77cbfbf3645e165d06a5ffe4","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":122,"prevtxid":"cff19794e000ed502fd2e7bbfe9f6fc985612f49baf6728d2ff9e793eb2087e5","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":123,"prevtxid":"32344a74f124f15dfd2004d79366a2afe3846616af4c2e1f358ba8dc005c8be7","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":124,"prevtxid":"0a321fedb3a0d4ae26e2481bf50fe5091ab727a4095d834ccda5e9b6149f9be7","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":125,"prevtxid":"f5aeb28b5ae6fb1a6190ed4d936594dce6fa3182d777aec2607da4ead53bb0e7","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":126,"prevtxid":"25d02aecd4ed9d10af14ae2c536f18e493c53d293cee3b38e2d217298d6084eb","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":127,"prevtxid":"7a96b4bdad80cefbfb7ef23036c92aa5d233379678ca27a4e347718c931e02ec","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":128,"prevtxid":"ed7e97e1d29f224442a296f51a5081bef017a08736c172e9d611bf50cdf721ee","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":129,"prevtxid":"7c60317c79beeef35f504ccf76b9fc6927aec3212f954008beb04e69e5dfcbf2","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":130,"prevtxid":"d32d63cd19ea296d6a1a00537a23dd478d907b8d03a6282d8bd180f6bd86dff4","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":131,"prevtxid":"6b9b9a3ac6c923690c31a2bc4b67ec2f87a7b78e8278fc38d64e09b00c353ff7","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":132,"prevtxid":"d7e025178a5b347dd763682251cd7a5b05ecdf8f151239fb7e952e47a44adcf7","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":133,"prevtxid":"5382b29982274c449490bce310b4e116f8d9860a944127527d47a6c45d683af8","prevout":1},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":134,"prevtxid":"51148c9dbb87107a94caadd3456e77e3361cf6aa609e3cc8b5636804d442c6f8","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":135,"prevtxid":"e94654e1054029bc53c9b02d61d9cc0a79ef8c113e7c38f317cd29b308863ef9","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":136,"prevtxid":"ac1adb65f3a9c468a21ed89e549108022e08104be1cd01e6d0b4fd986b5198fb","prevout":2},{"address":"t1Pebir9xZYvNAvvkxXtN1sCBTBQndC4W2X","satoshis":-937500000,"index":137,"prevtxid":"134691b265aebb495325338dd3ff4f82543907fe779cbb327ec3d08228289efc","prevout":2},{"address":"t1MUY12dtkH2gq7ed35QTtFJdNa7Jo6NjU8","satoshis":-937500000,"index":138,"prevtxid":"dead2bbe148516b73fe780c35a762496d7ed321bafbe989fed35813b2b91affc","prevout":2}],"outputs":[]},{"txid":"f62116d4ea25d0785ffcdd84fb0a207955455a4c5a875b2e0601c1021dc17fcc","index":2,"inputs":[],"outputs":[{"address":"t1KMNXV72S1HNfUHCUXVTQG5FmHtqtfcZV7","satoshis":11099028048,"index":0}]}],"time":1588559331,"mediantime":1588558714,"nonce":"0000015f00000000000000000f00000000000000000000000000000091060078","bits":"1e00bb4f","difficulty":2799.054701674626,"chainwork":"000000000000000000000000000000000000000000000000000029acbb5b0dc9","previousblockhash":"00000099767337bdf22bdbb7354509a9ed760298facbdcd40339b96590f85e26","nextblockhash":"0000009370f976e1d8be1634d291832039803836e951804e965af9066e18bde7"}}}}}}}},"/daemon/getblockhash":{"get":{"tags":["Daemon"],"summary":"Get block's hash","description":"Returns hash of block in best-block-chain at index provided. **Public**","operationId":"getBlockHash","security":[],"parameters":[{"in":"query","name":"index","required":true,"schema":{"type":"number"},"description":"Block number to get hash of","example":590823}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Block hash"}}},"example":{"status":"success","data":"000000234b617194f3faff69ee62f0dde0115f2007c3b42e38eaba80c786a5e5"}}}}}}},"/daemon/getblockheader":{"get":{"tags":["Daemon"],"summary":"Block header info","description":"Returns an Object with information about blockheader. **Public**","operationId":"getBlockHeader","security":[],"parameters":[{"in":"query","name":"hash","required":true,"schema":{"type":"string"},"description":"Block hash to get header info from","example":"000000234b617194f3faff69ee62f0dde0115f2007c3b42e38eaba80c786a5e5"},{"in":"query","name":"verbose","schema":{"default":true,"type":"boolean","enum":[true,false]},"description":"If verbose is false, returns a string that is serialized,\nhex-encoded data for blockheader 'hash'. If verbose is true, returns\nan Object with information about blockheader hash.\n\n\nExample:\n\n- `hash`=`<block hash>`&`verbose`=`true`\n"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"hash":{"type":"string","description":"Block hash"},"confirmations":{"type":"integer","description":"Number of confirmations"},"height":{"type":"integer","description":"Block height"},"version":{"type":"integer","description":"Block version"},"merkleroot":{"type":"string","description":"The merkle root"},"finalsaplingroot":{"type":"string","description":"The root of the Sapling commitment tree after applying this block"},"time":{"type":"integer","description":"The block time in seconds since epoch (Jan 1 1970 GMT)"},"nonce":{"type":"string","description":"The nonce"},"solution":{"type":"string","description":"The solution"},"bits":{"type":"string","description":"The bits"},"difficulty":{"type":"number","description":"The difficulty"},"chainwork":{"type":"string","description":"Chainwork hash"},"previousblockhash":{"type":"string","description":"Hash of previous block"},"nextblockhash":{"type":"string","description":"Hash of next block"}}}}},"example":{"status":"success","data":{"hash":"000000234b617194f3faff69ee62f0dde0115f2007c3b42e38eaba80c786a5e5","confirmations":9,"height":590823,"version":4,"merkleroot":"61d6664cb4e3575d4362f922316712fe647555c313ab6c4625bb368a93b40cf6","finalsaplingroot":"6cb83efd5da7b16b4ef0adf1ae285f96f9d95cd1becfc81421f77b12c56902d5","time":1588559331,"nonce":"0000015f00000000000000000f00000000000000000000000000000091060078","solution":"0633eb663b294a0dfc52d5b0d395e1f227397a8bdcdf9f8e1d5a0b3031f95d9a85c2854e6abdba5f9f972456b73a2ab62ee01d02","bits":"1e00bb4f","difficulty":2799.054701674626,"chainwork":"000000000000000000000000000000000000000000000000000029acbb5b0dc9","previousblockhash":"00000099767337bdf22bdbb7354509a9ed760298facbdcd40339b96590f85e26","nextblockhash":"0000009370f976e1d8be1634d291832039803836e951804e965af9066e18bde7"}}}}}}}},"/daemon/getchaintips":{"get":{"tags":["Daemon"],"summary":"List of known chain tips","description":"Return information about all known tips in the block tree, including the main chain as well as orphaned branches. **Public**","operationId":"getChainTips","security":[],"parameters":[{"in":"query","name":"minheight","required":false,"schema":{"type":"integer"},"description":"Optional minimum height, converted to a number and passed to fluxd's `getchaintips` as its only argument. When omitted no argument is sent.","example":2000000}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"height":{"type":"integer","description":"Height of chain tip"},"hash":{"type":"string","description":"Block hash of the tip"},"branchlen":{"type":"integer","description":"Length of branch connecting the tip to the main chain (0 if main chain)"},"status":{"type":"string","description":"Status of the chain"}}}}}},"example":{"status":"success","data":[{"height":591079,"hash":"0000006d4467655a996e7c6a4023fc6f99010a5474cf87eb08995cb66ca65312","branchlen":0,"status":"active"},{"height":591062,"hash":"000000aa6b44b3403e5623810c8193d87155444174841f7fc4b40256929eff1e","branchlen":1,"status":"valid-fork"},{"height":590420,"hash":"0000002ee3a1bd1b4dcfbc6c025d133f325c6c8015cad3b9996df3c319162422","branchlen":1,"status":"headers-only"},{"height":590237,"hash":"00000053167551792a9e556813a021665c95dc8e41d0e2ee35287cc0df1e9a39","branchlen":1,"status":"valid-headers"},{"height":573023,"hash":"000000015b536301ce9335210590f0ceadc6ae081f2b228639c194cd4b88271d","branchlen":1,"status":"valid-fork"},{"height":567360,"hash":"0000006656a0d8209a5c515f7f8967bb143d951cf8f3fed7c03d3cb0244e47ae","branchlen":1,"status":"valid-fork"},{"height":566803,"hash":"0000001efb8e3485a385c12d1820645053082bf429413601deeb551d30be2786","branchlen":1,"status":"valid-fork"},{"height":559010,"hash":"0000022ce968281284e2a503ce201ad55a8523d1f61f6309d84c917814ce382d","branchlen":19,"status":"headers-only"},{"height":449023,"hash":"0000005df6591ba59a041a88dfecd7dae6c00d95e210867d8de5d24538f73981","branchlen":1,"status":"valid-fork"},{"height":448329,"hash":"00000042c175d0a58246f367012c429a3e7edc906a9fe75875ed239ef563a38c","branchlen":2,"status":"valid-fork"},{"height":313888,"hash":"00000016c58660e65feac88fbc40dd6ca3f34213de7648df716255fac99d3bff","branchlen":1,"status":"valid-fork"},{"height":309050,"hash":"00000080b9a14c60174620f645f649e1b8bbfb40c2bdbedbf84f3dda7964f334","branchlen":3,"status":"valid-fork"},{"height":287750,"hash":"0000001e50fb6dd3b42f15c18f9b46958eb7a6649e2396c19157cb02cb11098d","branchlen":3,"status":"valid-fork"},{"height":284893,"hash":"0000006557265e2d68a78e5caf427fee238c6e137f4c9124254209a07cbb30b8","branchlen":1,"status":"valid-fork"},{"height":277682,"hash":"000000278ca4049a8136aa4fa1e7a6b9c00b3e68505019d2976d7c66167c5142","branchlen":34,"status":"valid-fork"},{"height":260586,"hash":"00000006bec95249932f478f4db27bed24cf5d9b76c041914408af1392f29be1","branchlen":1,"status":"valid-fork"},{"height":260179,"hash":"00000032788a700fbeef2e6383b424eceafc24a70346efbc2f62ee95cbcc9bfa","branchlen":1,"status":"valid-fork"},{"height":257167,"hash":"000000276fa3e3557e6a0df594c3ea47477dab4626e0aed8c2964c428a1f7c3d","branchlen":1,"status":"valid-fork"},{"height":257125,"hash":"0000004401ccecffe93f175b7c50f29611874e987d3206f005d55569fd3230ca","branchlen":1,"status":"valid-fork"},{"height":257081,"hash":"0000001adc8175b757096f65628f77c9247f82defdb98813ab248e65a1cebc6e","branchlen":1,"status":"valid-fork"},{"height":254707,"hash":"0000003cb3b61f89afa0864c1312ac75a97c3650c2026cda83e08a06c425d0de","branchlen":1,"status":"valid-fork"},{"height":253887,"hash":"0000003a011c3fbb70f4216a14686012d89a2751cbd0c74053f81da91a9293a8","branchlen":1,"status":"valid-fork"},{"height":250987,"hash":"00000007ecfee7a6d3bf783e86c56a251c4bd4cdc0258398b692a8f3fd9dbeed","branchlen":1,"status":"valid-fork"},{"height":250820,"hash":"0000003262698472ae5b39955633527e8c8656e126ff90f94f2cb922cde8a9a0","branchlen":1,"status":"valid-fork"},{"height":250102,"hash":"00000049f03f3402f094eee4c117072915f92fb352e87e0c59309096ebb877aa","branchlen":1,"status":"valid-fork"},{"height":249084,"hash":"00000018432f23446500e0dcf39a02b59b3e8583f30c7329653d166c1deb3e85","branchlen":1,"status":"valid-fork"},{"height":248591,"hash":"0000003d2b53e4899649ec2b259d9b6718cbe0e7d73cd0907b48d8f0b7341c11","branchlen":1,"status":"valid-fork"},{"height":248394,"hash":"0000004445e61be219a7030c06db6c31eda0fa720b95740c1d85456b4dbff45e","branchlen":1,"status":"valid-fork"},{"height":247501,"hash":"000000640166be87a0d70d474389c934972ef0eca75977dae80e27a179fe16fc","branchlen":1,"status":"valid-fork"}]}}}}}}},"/daemon/getdifficulty":{"get":{"tags":["Daemon"],"summary":"Proof of work difficulty","description":"Returns the proof-of-work difficulty as a multiple of the minimum difficulty. **Public**","operationId":"getDifficulty","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"number","description":"Proof of work difficulty as a multiple"}}},"example":{"status":"success","data":2572.645186022886}}}}}}},"/daemon/getmempoolinfo":{"get":{"tags":["Daemon"],"summary":"Memory pool info","description":"Returns details on the active state of the TX memory pool. **Public**","operationId":"getMempoolInfo","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"size":{"type":"integer","description":"Current tx count"},"bytes":{"type":"integer","description":"Sum of all tx sizes"},"usage":{"type":"integer","description":"Total memory usage for the mempool"}}}}},"example":{"status":"success","data":{"size":0,"bytes":0,"usage":0}}}}}}}},"/daemon/getrawmempool":{"get":{"tags":["Daemon"],"summary":"Transaction ids in memory pool","description":"Returns all transaction ids in memory pool as a json array of string. **Public**","operationId":"getRawMemPool","security":[],"parameters":[{"in":"query","name":"verbose","schema":{"default":false,"type":"boolean","enum":[true,false]},"description":"True for a json object, false for array of transaction ids.\n"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"txid":{"type":"object","properties":{"size":{"type":"integer","description":"Transaction size in bytes"},"fee":{"type":"integer","description":"Transaction fee in FLUX"},"time":{"type":"integer","description":"Local time transaction entered pool in seconds since 1 Jan 1970 GMT"},"height":{"type":"integer","description":"Block height when transaction entered pool"},"startingpriority":{"type":"integer","description":"Priority when transaction entered pool"},"currentpriority":{"type":"integer","description":"Transaction priority now"},"depends":{"type":"array","items":{"type":"string","description":"Unconfirmed transactions used as inputs for this transaction"}}}}}}}},"example":{"status":"success","data":{"2c2a34b81eeba402270465d3dcc44d41ef31e4bf6cae5cc8e2aeea64d7fce829":{"size":4284,"fee":0.0001,"time":1588593142,"height":591102,"startingpriority":10000000000000000,"currentpriority":10000000000000000,"depends":[]},"5fbb025ff8a6f632b02545e353e15992e389ccd12dab2771f2d96c53c3e2382a":{"size":895,"fee":0.0001,"time":1588593155,"height":591102,"startingpriority":10000000000000000,"currentpriority":10000000000000000,"depends":[]},"afc2f6ff2b9a546a3e0c5ba951338043f9866f23ad53622c5cc3b97ae0c89281":{"size":198,"fee":0.0001,"time":1588592875,"height":591101,"startingpriority":0,"currentpriority":0,"depends":[]},"0e99affa132cfea43ad7f31923a00a4cab1ace5e7343b0e40dad346d94138fb8":{"size":198,"fee":0.0001,"time":1588593142,"height":591101,"startingpriority":0,"currentpriority":0,"depends":[]},"f2d51d5c678ea6a27670e3552b66adda606a43b57222ab6363ea0d2001c292c9":{"size":1189,"fee":0.0001,"time":1588593018,"height":591102,"startingpriority":10000000000000000,"currentpriority":10000000000000000,"depends":[]},"5af1b85af6e0e58e1ac00c5a93c51e0a6da927cdf8f9f981159acdf55fb382d2":{"size":2611,"fee":0.0001,"time":1588592924,"height":591102,"startingpriority":10000000000000000,"currentpriority":10000000000000000,"depends":[]}}}}}}}}},"/daemon/gettxout":{"get":{"tags":["Daemon"],"summary":"Unspent transaction output","description":"Returns details about an unspent transaction output (fluxd `gettxout`). **Public**","operationId":"getTxOut","security":[],"parameters":[{"in":"query","name":"txid","required":true,"schema":{"type":"string"},"description":"The transaction id","example":"9e3cdde1b7c92728a1200a988bb046028fe93b9f1e15cc370974f7201d3d3a94"},{"in":"query","name":"n","required":true,"schema":{"type":"integer"},"description":"Vout value","example":1},{"in":"query","name":"includemempool","schema":{"default":true,"type":"boolean","enum":[true,false]},"description":"Whether to include the mempool.\n\nExample:\n- `txid`=`<transaction id>`&`n`=`<vout value>`&`includemempool`=`true`\n"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"bestblock":{"type":"string","description":"Block hash"},"confirmations":{"type":"integer","description":"The number of confirmations"},"value":{"type":"number","description":"The transaction value in FLUX"},"scriptPubKey":{"type":"object","properties":{"asm":{"type":"string","description":"Script public key"},"hex":{"type":"string","description":"Hex"},"reqSigs":{"type":"number","description":"Number of required signatures"},"type":{"type":"string","description":"The type, eg pubkeyhash"},"addresses":{"type":"array","items":{"type":"string"}}}},"version":{"type":"integer","description":"The version number"},"coinbase":{"type":"boolean","description":"Coinbase or not"}}}}},"example":{"status":"success","data":{"bestblock":"0000001dca878efaa3ae059492bd108cd2e53708325f609f21ffb948f8769115","confirmations":9,"value":9.375,"scriptPubkey":{"asm":"OP_DUP OP_HASH160 961f695fbc075b7f99f0b45323206930340efc98 OP_EQUALVERIFY OP_CHECKSIG","hex":"76a914961f695fbc075b7f99f0b45323206930340efc9888ac","reqSigs":1,"type":"pubkeyhash","addresses":["t1XZNzdMMDZ4QPRD2a6hHWQ4Mog3HF9mCMp"]},"version":4,"coinbase":true}}}}}}}},"/daemon/gettxoutproof":{"get":{"tags":["Daemon"],"summary":"Hex-encoded proof of transaction","description":"Returns a hex-encoded proof that \"txid\" was included in a block. **Public**","operationId":"getTxOutProof","security":[],"parameters":[{"in":"query","name":"txids","required":true,"schema":{"type":"string"},"description":"The transaction id or comma separated list of txids","example":"9e3cdde1b7c92728a1200a988bb046028fe93b9f1e15cc370974f7201d3d3a94"},{"in":"query","name":"blockhash","schema":{"type":"string"},"description":"If specified, looks for txid in the block with this hash","example":"000000142fc5a382f6db5895faa7e9519721be67560cfd0c2171634d541bc38e"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"A string that is a serialized, hex-encoded data for the proof"}}},"example":{"status":"success","data":"04000000e6f6eb7762f7970a06ad119590ba1882a30e290e3f6837cc64960f1b70000000fde035a9548fe35311b0212323eeeb9844c9ab093b24982d397fd94ab68f68725f44c0da150b3d68af0671dc272b007c4354a03d63298b00ad7700d4b818f70a4d0ab05eaca2001e0001b8750000000000000000000000000000000000000000000000003eae1205340a77b45fde07253220864115fe31c3a77f1e84b358edafad9929200de7c90f8d38878f423f9dc35266b6fd8280e56d3615b988540100000001fde035a9548fe35311b0212323eeeb9844c9ab093b24982d397fd94ab68f68720101"}}}}}}},"/daemon/gettxoutsetinfo":{"get":{"tags":["Daemon"],"summary":"Unspent transaction output set info","description":"Returns statistics about the unspent transaction output set. **Public**","operationId":"getTxOutSetInfo","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"height":{"type":"integer","description":"Current block"},"bestblock":{"type":"string","description":"Best block hash hex"},"transactions":{"type":"integer","description":"The number of transactions"},"txouts":{"type":"integer","description":"The number of output transactions"},"bytes_serialized":{"type":"integer","description":"The serialized size"},"hash_serialized":{"type":"string","description":"The serialized hash"},"total_amount":{"type":"number","description":"The total amount"}}}}},"example":{"status":"success","data":{"height":591140,"bestblock":"0000005b43e6418210b25804493880c9834c2ae969bceb53f579282e6e077427","transactions":320076,"txouts":2626978,"bytes_serialized":80210836,"hash_serialized":"151a45f9f10274ebc622877355f6c64a5ae6a8561c186d2028cb32127d3bf093","total_amount":99020653.199865}}}}}}}},"/daemon/verifytxoutproof":{"get":{"tags":["Daemon"],"summary":"Verifies a proof","description":"Verifies that a proof points to a transaction in a block, returning the transaction it commits to and throwing an RPC error if the block is not in our best chain. **Public**","operationId":"verifyTxOutProof","security":[],"parameters":[{"in":"query","name":"proof","required":true,"schema":{"type":"string"},"description":"The hex-encoded proof generated by gettxoutproof","example":"04000000e6f6eb7762f7970a06ad119590ba1882a30e290e3f6837cc64960f1b70000000fde035a9548fe35311b0212323eeeb9844c9ab093b24982d397fd94ab68f68725f44c0da150b3d68af0671dc272b007c4354a03d63298b00ad7700d4b818f70a4d0ab05eaca2001e0001b8750000000000000000000000000000000000000000000000003eae1205340a77b45fde07253220864115fe31c3a77f1e84b358edafad9929200de7c90f8d38878f423f9dc35266b6fd8280e56d3615b988540100000001fde035a9548fe35311b0212323eeeb9844c9ab093b24982d397fd94ab68f68720101"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"string","description":"Txid"}}}},"example":{"status":"success","data":["72688fb64ad97f392d98243b09abc94498ebee232321b01153e38f54a935e0fd"]}}}}}}},"/daemon/getspentinfo":{"get":{"tags":["Daemon"],"summary":"Return spent info","description":"Return spent info. Transaction ID and index required as parameters. **Public**","operationId":"Getspentinfo","security":[],"parameters":[{"in":"query","name":"txid","required":true,"schema":{"type":"string"},"description":"The transaction id","example":"9e3cdde1b7c92728a1200a988bb046028fe93b9f1e15cc370974f7201d3d3a94"},{"in":"query","name":"index","required":true,"schema":{"type":"integer"},"description":"index","example":0}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":{"txid":"83d91028a75ddc6ee79153f0c4babe4f13d5fbf2f6160ff861683d7098f1790e","index":1,"height":590926}}}}}}},"post":{"tags":["Daemon"],"summary":"Return spent info, POST","description":"Return spent info, with the transaction id and output index sent in the request body. **Public**","operationId":"GetspentinfoPost","security":[],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"txid":{"type":"string"},"index":{"type":"integer"}}},"example":{"txid":"9e3cdde1b7c92728a1200a988bb046028fe93b9f1e15cc370974f7201d3d3a94","index":0}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":{"txid":"83d91028a75ddc6ee79153f0c4babe4f13d5fbf2f6160ff861683d7098f1790e","index":1,"height":590926}}}}}}}},"/daemon/getblocksubsidy":{"get":{"tags":["Daemon"],"summary":"Block reward","description":"Returns block subsidy reward, taking into account the mining slow start of block at index provided. **Public**","operationId":"getBlockSubsidy","security":[],"parameters":[{"in":"query","name":"height","schema":{"type":"integer"},"description":"The block height. If not provided, defaults to the current height of the chain.","example":575000}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"miner":{"type":"integer","description":"The mining reward amount in FLUX"}}}}},"example":{"status":"success","data":{"miner":150}}}}}}}},"/daemon/getblocktemplate":{"get":{"tags":["Daemon"],"summary":"Data to construct a block","description":"It returns data needed to construct a block to work on. **Public**","operationId":"getBlockTemplate","security":[],"parameters":[{"in":"query","name":"jsonrequestobject","description":"A JSON object, sent as a string. If the request parameters include a 'mode' key, that is used\nto explicitly select between the default template request or a\nproposal. This must be set to \"template\" or omitted.\n\nFor the capabilities array of strings the following are the client side supported features.\n- `longpoll`\n- `coinbasetxn`\n- `coinbasevalue`\n- `proposal`\n- `serverlist`\n- `workid`\n","schema":{"type":"string"},"example":"{\"mode\":\"template\",\"capabilities\":[\"proposal\"]}"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"capabilities":{"type":"array","items":{"type":"string"}},"version":{"type":"integer","description":"Version number"},"previousblockhash":{"type":"string","description":"Block hash of current highest block"},"finalsaplingroothash":{"type":"string","description":"Hash of the final sapling root"},"transactions":{"type":"array","items":{"properties":{"data":{"type":"string","description":"Transaction data encoded in hexadecimal"},"hash":{"type":"string","description":"Hash/id encoded in little-endian hexadecimal"},"depends":{"type":"array","items":{"type":"integer","description":"Transactions before this one (by 1-based index in transaction list) that must be present in the final block if this one is"}},"fee":{"type":"integer","description":"Difference in value between transaction inputs and outputs(in Satoshis); for coinbase transactions, this is a negative number of the collected block fees (ie, not including the block subsidy); if key is not present, fee is unknown and client must not assume there isn't one"},"sigops":{"type":"integer","description":"Total number of SigOps, as counted for purposes of the block limits; if key is not present, sigop count is unknown and clients must not assume there aren't any"},"required":{"type":"boolean","description":"If provided and true, this transaction must be in the final block"}}}},"coinbasetxn":{"type":"object","properties":{"data":{"type":"string","description":"Transaction data encoded in hexadecimal"},"hash":{"type":"string","description":"Hash/id encoded in little-endian hexadecimal"},"depends":{"type":"array","items":{"type":"integer","description":"Transactions before this one (by 1-based index in transaction list) that must be present in the final block if this one is"}},"fee":{"type":"integer","description":"Difference in value between transaction inputs and outputs(in Satoshis); for coinbase transactions, this is a negative number of the collected block fees (ie, not including the block subsidy); if key is not present, fee is unknown and client must not assume there isn't one"},"sigops":{"type":"integer","description":"Total number of SigOps, as counted for purposes of the block limits; if key is not present, sigop count is unknown and clients must not assume there aren't any"},"required":{"type":"boolean","description":"If provided and true, this transaction must be in the final block"}}},"longpollid":{"type":"string","description":"Long polling id"},"target":{"type":"string","description":"The hash target"},"mintime":{"type":"integer","description":"The minimum timestamp appropriate for the next block time in seconds since epoch (Jan 1 1970 GMT)"},"mutable":{"type":"array","items":{"type":"string","description":"A way the block template may be changed, e.g. time, transactions, prevblock"}},"noncerange":{"type":"string","description":"A range of valid nonces"},"sigoplimit":{"type":"integer","description":"Limit of sigops in the blocks"},"sizelimit":{"type":"integer","description":"Limit of block size"},"curtime":{"type":"integer","description":"Current timestamp in seconds since epoch (Jan 1 1970 GMT)"},"bits":{"type":"string","description":"Compressed target of next block"},"height":{"type":"integer","description":"The height of the next block"},"basic_fluxnode_address":{"type":"string","description":"FLUX address"},"basic_fluxnode_payout":{"type":"integer","description":"Amount"},"super_fluxnode_address":{"type":"string","description":"FLUX address"},"super_fluxnode_payout":{"type":"integer","description":"Amount"},"bamf_fluxnode_address":{"type":"string","description":"FLUX address"},"bamf_fluxnode_payout":{"type":"integer","description":"Amount"}}}}},"example":{"status":"success","data":{"capabilities":["proposal"],"version":4,"previousblockhash":"000000658616bec155572e8f1f8373d32267238f1afaf3b93fdbf71706436417","finalsaplingroothash":"5cd6119b539920ae7b373b85cdcc2299b4701a046e51240dc9258ca0d0a5c918","transactions":[{"data":"050000000470561a8cf2d80e49eaed6d74782cc0c8a012a1d39a493d021a4ac50efe530a0400000000b068b05e010b68b05e010d39312e3233382e3130352e3330411b79e3112833b65ded5c5bf093a10086297eed5ec132c6627acecccd3368406fa83d9d5b6266639986e5a8670e4b0ae48ee1c4be9e607eaee4d2e8a8ca6815b578411b6f7121b06ae754770f9f9da616ed86ec71215e21ba7f483ebe1be8e49118e2722c8c45c89d751bf9c9c88f35c001a85bd17425b85167e960ca53ddce9cadafa4","hash":"1a4682d42a7c05054ab20f16c07a69cf93c53d790707988a961fc0aa2396d703","depends":[],"fee":0,"sigops":0},{"data":"0400008085202f89000170a8464f010000001976a91490ae1d0392cc0d77d8dc7ac22f2161a7fc011f7088ac00000000ee05090058ac464f0100000002c9a84df2ebfaceb5b781b29f5cccd926881f7fdc22a3569eb4e3f52ecb6a91b57e26214c732ebd7ff20e3a3da7a6c71f0a0fea30e7bf7400ea6273f49394e152dbf79084a25447231a1547f55fecacc09adf1e5efed5bb39bfd330f7d43b37397b4dd57a38810248488fbff354be64ca982ffc4aa5a20b0f2be9421b17be6687aa447958c4706f7a38d1b7f4c4a26cfb671f9b755cb70d1a925ebed84051abeb1e421234acbeb78591f11296859d41dcb824e929d15c4062a027f32f396cff3f91d98fc92b776b9640437e6e1ae74fe62ff27fef677a3b8c35a9b398b00eb6fb0f16fe6108c4ced2c8a76f0c760eb3275e9b66fd87605a181ae982688b5d93115315e79e59189ab7abd5f21525f7f89b879fe6d97dcd88937d26970c6b8513ecd6e736148ae3e03fc61f5f651923d5994fac65cf8efe9b44548ebe1431027ed875e4495ddbc2bf8421b5d387fa679692f2e1b4cca70ae06693d7bbf67448ac0fe02f160c52952c5493bc23f56cbac4a5279e72d9d39fea76ea702e1f02476f059ff80f11c1b39f805ddab1705e6e3933b12d85df7d609a785bbc74fc0b8db6447e26214c732ebd7ff20e3a3da7a6c71f0a0fea30e7bf7400ea6273f49394e1528a9a70138419184d99a375e03a2b35d675d571edbbada814c909c2477c808e62d7fb06cfab8d3819e4ffe8270208e13c308796c24c01495b6c3984fb9c65e25a855b41b1c31fb7a5290c8d0532be8e1348f02065c8155f187990fed839812b485fa843776329b833087aeab4c15707ceaa7d1bc798b01fe3560bc6cd1fce303e9469525ce9b058940801c5a710b8f3c4ac6249aa3be797a625efc5ff3c7ac40704f02eadf30e883104f5f4a1e287ecfda2806311fce153dab5122dcf63bc8c075a3a1e7684cabad686bbda1e156f062da0f787ad8a85588688159f0f8c0b7453a005cfe181e8aaf3e28776d1f7f7d5ab0b4e3e2f365f41ef89301c7c6278fc1b929120a3a20ee54fad064ff52b9a152badee46b0ad61370667bd0bb2b3dab34178d6232c12dfcf5f1a3413f0ea74474678b05fe20f3fa9d0bc57fda979dd5e0101dc6ccdc8380ce5db926cd06e2d7a7ccb972923aaec2f54573033c5548d9cc1db9b80d58723b2737685608b08fbc064c78143dc385036a505d2cef5933a45cb45886308fd5b762ee49d448264ef4f7908d79a6528443f0c290aecdcc4da843b6d7f5be18b395fba03d778545df324f06796afc84666ea838c320912aebf9905a13189cfd77002cd8f81d3b0c5fc37078e4e3916e0ed142dd35d0c30fd98bf0cbb9bc359c05c9b940d0724fff4d0a14d86c6d8fa7b76b580d5ead667e252512ab28740d817967aa73e425551d7d68b318d515b86f89c5e471036b8f020ad04de9730af2f07e9b2cf98c1261cfe895a92558971000b3b110055aca51d3cc63dd347b39ca73d415135e608684a685235a10834ac2354ebcf068f56ea6874d8373850e9cd01f25b92735a21a3333dcf89c838a00a1ee2e6023ab3adddce55ecdd69ce7c0ad4deb46be2ac90d35103f1cbf29bb926948728de0a9ccaee62b1657798b178ef4e3c3783f65fc22d464b7572167430c4aeda88a65741c2ed4346e278c092958e2ef4a95a36fb38559962a064b51b8d2a5118f86b2c0af87b9e30bdb59e818a9a4e10c6f5e90610f3ca5d49ab802b73236f8c4c4940b3eb324f891e29dcb52b7774301131ba9cd19c7b3e608688da6828512beeb765022efb33a18d1c06fa72be61d069031e8c9bae91adbfefce323aac658b0a5572d703d938c7ad47ddca2d4139dbd36ab562f6393aff333e556a275d763504360850b7729257f34f3f5a7ec0d2d00a9f923db937a1ea186f1a2aeab93a6f26a642d00aa89ac335a3a67404954f0b967bab5b7168db3b052e29ca37de47fe441ce528ba7d866db6d74a129897d117c5f425098b0c6dd5d6fc95fa70b0de00d6cd0a2e509625cfff8fe8e02f422fbb085536611a203b08415bfc3da6b4cfeea96eddbb1e9ff89d399f5a1172e19a1b67c30c22e3b9d636675ff05b40168b9e6adad1024af37bbc4545689fbe19ecf0c42c33d9c833bb84fdc191399327819e4086c14c99fcbf7d1d4bcf9a17049d50a584c5eaee2ac055a9d907e6c6dcfb71a99714b165a17d244e05fafe75c641941d566200566209bb8dd2ca677997c88253748ba43f8274ed79ba4bc8fd55bd218fff66a8d41e7e1380ee331bbfe8d0f4af30a6078436008a5d9ff677e0e33c3506f406ca4324d2b2dfd1222695dcbd551429833a56952786369c9ff6337f4f98cb74129ab521923d7fa02a19141deef9537a21f2c7d1aa97e6c77e57806eb85780efa659ba2b61c34e041eabf3f4aaece1cd9d652b91b2f4d84217c6ca323591b5de95e145dde6d2d3d07257b426806b009559b900604b3983b5d15cf6fce2372675fb4da3e47fd1578642462afc24d0e7e3bcc810ffb80c20aaa5ade917d988e033e70702016a33628b3ed0d52ad89f09","hash":"16c3b8b299ebe6185fc6a15f73741430a54fe628c33b4b25e84471b0d1dece61","depends":[],"fee":1000,"sigops":1}],"coinbasetxn":{"data":"0400008085202f89010000000000000000000000000000000000000000000000000000000000000000ffffffff0503da050900ffffffff0468648d9e020000001976a914e210e47fc7fa4138c1dfd09358428e5421160c3b88aca0118721000000001976a9145bd98eb8a35c8c00cff5f0050ecd6e0ea4de66fd88ac601de137000000001976a9144dfad8f2081b808a2a9f9f16729e0a1fd5c6494b88ac80461c86000000001976a9144e5973f34e5cc452156126b541ca0c9bcaae91e488ac00000000000000000000000000000000000000","hash":"2aafbaa9024d62bb355951c877ca566b3883b182994297d7c581c365e5852702","depends":[],"fee":1000,"sigops":4,"required":true},"longpollid":"000000658616bec155572e8f1f8373d32267238f1afaf3b93fdbf7170643641717961","target":"000000c43b000000000000000000000000000000000000000000000000000000","mintime":1588618940,"mutable":["time","transactions","prevblock"],"noncerange":"00000000ffffffff","sigoplimit":20000,"sizelimit":2000000,"curtime":1588619452,"bits":"1e00c43b","height":591322,"miner_reward":11250001000,"basic_fluxnode_address":"t1SFG7xCkwWRP4tXhZrJmq7sWDFBniaNA16","basic_fluxnode_payout":562500000,"super_fluxnode_address":"t1QyvYHuxfw6MQB1nsSvDdBPcsXqWsYKYDr","super_fluxnode_payout":937500000,"bamf_fluxnode_address":"t1R1ssbaVXMZqbG8iwaD57xCS2w92pJefkw","bamf_fluxnode_payout":2250000000}}}}}}}},"/daemon/getlocalsolps":{"get":{"tags":["Daemon"],"summary":"Average solutions per second","description":"Returns the average local solutions per second since this node was started. **Public**","operationId":"getLocalSolPs","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"integer","description":"Average sols per second"}}},"example":{"status":"success","data":0}}}}}}},"/daemon/getmininginfo":{"get":{"tags":["Daemon"],"summary":"Mining related info","description":"Returns a json object containing mining-related information. **Public**","operationId":"getMiningInfo","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"blocks":{"type":"integer","description":"The current block"},"currentblocksize":{"type":"integer","description":"The last block size"},"currentblocktx":{"type":"integer","description":"The last block transaction"},"difficulty":{"type":"number","description":"The current difficulty"},"errors":{"type":"string","description":"Current errors"},"genproclimit":{"type":"integer","description":"The processor limit for generation. -1 if no generation. (see getgenerate or setgenerate calls)"},"localsolps":{"type":"integer","description":"The average local solution rate in Sol/s since this node was started"},"networksolps":{"type":"integer","description":"The estimated network solution rate in Sol/s"},"networkhashps":{"type":"integer","description":"The estimated network hash rate in Hash/s"},"pooledtx":{"type":"integer","description":"The size of the mem pool"},"testnet":{"type":"boolean","description":"If using testnet or not"},"chain":{"type":"string","description":"Current network name as defined in BIP70 (main, test, regtest)"},"generate":{"type":"boolean","description":"If the generation is on or off (see getgenerate or setgenerate calls"}}}}},"example":{"status":"success","data":{"blocks":591371,"currentblocksize":1000,"currentblocktx":0,"difficulty":3214.481774201274,"errors":"","genproclimit":-1,"localsolps":0,"networksolps":188688,"networkhashps":188688,"pooledtx":78,"testnet":false,"chain":"main","generate":false}}}}}}}},"/daemon/getnetworkhashps":{"get":{"tags":["Daemon"],"summary":"Estimated network solutions","description":"Returns the estimated network solutions per second based on the last n blocks. **Public**","operationId":"getNetworkHashPs","security":[],"parameters":[{"in":"query","name":"blocks","schema":{"default":120,"type":"integer"},"description":"The number of blocks, or -1 for blocks over difficulty averaging window.","example":200},{"in":"query","name":"height","schema":{"default":-1,"type":"integer"},"description":"To estimate at the time of the given height; -1 (the default) uses the current tip.","example":575000}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"integer","description":"Estimated network solutions per second"}}},"example":{"status":"success","data":189503}}}}}}},"/daemon/getnetworksolps":{"get":{"tags":["Daemon"],"summary":"Estimated network solutions","description":"Returns the estimated network solutions per second based on the last n blocks. **Public**","operationId":"getNetworkSolPs","security":[],"parameters":[{"in":"query","name":"blocks","schema":{"default":120,"type":"integer"},"description":"The number of blocks, or -1 for blocks over difficulty averaging window.","example":200},{"in":"query","name":"height","schema":{"default":-1,"type":"integer"},"description":"To estimate at the time of the given height; -1 (the default) uses the current tip.","example":575000}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"integer","description":"Estimated network solutions per second"}}},"example":{"status":"success","data":189503}}}}}}},"/daemon/getconnectioncount":{"get":{"tags":["Daemon"],"summary":"Connection count","description":"The peer connection count. **Public**","operationId":"getConnectionCount","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"integer","description":"Connection count"}}},"example":{"status":"success","data":22}}}}}}},"/daemon/getdeprecationinfo":{"get":{"tags":["Daemon"],"summary":"Deprecation info","description":"Returns an object containing current version and deprecation block height. Applicable only on mainnet. **Public**","operationId":"getDeprecationInfo","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"version":{"type":"integer","description":"The server version"},"subversion":{"type":"string","description":"The server subversion string"},"deprecationheight":{"type":"integer","description":"The block height at which this version will deprecate and shut down"}}}}},"example":{"status":"success","data":{"version":4000150,"subversion":"/MagicBean:4.0.1/","deprecationheight":951040}}}}}}}},"/daemon/getnettotals":{"get":{"tags":["Daemon"],"summary":"Network traffic info","description":"Returns information about network traffic, including bytes in, bytes out, and current time. **Public**","operationId":"getNetTotals","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"totalbytesrecv":{"type":"integer","description":"Total bytes received"},"totalbytessent":{"type":"integer","description":"Total bytes sent"},"timemillis":{"type":"integer","description":"Total cpu time"}}}}},"example":{"status":"success","data":{"totalbytesrecv":27003767,"totalbytessent":115073751,"timemillis":1588626897371}}}}}}}},"/daemon/getnetworkinfo":{"get":{"tags":["Daemon"],"summary":"Info regarding P2P network","description":"Returns an object containing various state info regarding P2P networking. **Public**","operationId":"getNetworkInfo","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"version":{"type":"integer","description":"The server version"},"subversion":{"type":"string","description":"The server subversion string"},"protocolversion":{"type":"integer","description":"The protocol version"},"localservices":{"type":"string","description":"The services we offer to the network"},"timeoffset":{"type":"integer","description":"The time offset"},"connections":{"type":"integer","description":"Number of connections"},"networks":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Network (ipv4, ipv6 or onion)"},"limited":{"type":"boolean","description":"Is the network limited using -onlynet?"},"reachable":{"type":"boolean","description":"Is the network reachable?"},"proxy":{"type":"string","description":"The proxy that is used for this network, or empty if none"},"proxy_randomize_credentials":{"type":"boolean","description":"Does proxy randomize credentials?"}}}},"relayfee":{"type":"number","description":"Minimum relay fee for non-free transactions in FLUX/kB"},"localaddresses":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","description":"Network addess"},"port":{"type":"integer","description":"Network port"},"score":{"type":"integer","description":"Relative score"}}}},"warnings":{"type":"string","description":"Any network warnings (such as alert messages)"}}}}},"example":{"status":"success","data":{"version":4000150,"subversion":"/MagicBean:4.0.1/","protocolversion":170016,"localservices":5,"timeoffset":0,"connections":28,"networks":[{"name":"ipv4","limited":false,"reachable":true,"proxy":"","proxy_randomize_credentials":false},{"name":"ipv6","limited":false,"reachable":true,"proxy":"","proxy_randomize_credentials":false},{"name":"onion","limited":true,"reachable":false,"proxy":"","proxy_randomize_credentials":false}],"relayfee":0.000001,"localaddresses":[{"address":"96.30.196.88","port":16125,"score":1433}],"warnings":""}}}}}}}},"/daemon/getpeerinfo":{"get":{"tags":["Daemon"],"summary":"Peer info","description":"Returns data about each connected network node as a json array of objects. **Public**","operationId":"getPeerInfo","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","description":"Peer index"},"addr":{"type":"string","description":"Ip address and port of the peer"},"addrlocal":{"type":"string","description":"Local address"},"services":{"type":"string","description":"The services offered"},"lastsend":{"type":"integer","description":"The time in seconds since epoch (Jan 1 1970 GMT) of the last send"},"lastrecv":{"type":"integer","description":"The time in seconds since epoch (Jan 1 1970 GMT) of the last receive"},"bytessent":{"type":"integer","description":"Total bytes sent"},"bytesrecv":{"type":"integer","description":"Total bytes recieved"},"conntime":{"type":"integer","description":"The connection time in seconds since epoch (Jan 1 1970 GMT)"},"timeoffset":{"type":"integer","description":"The time offset in seconds"},"pingtime":{"type":"number","description":"Png time"},"version":{"type":"integer","description":"The peer version"},"subver":{"type":"string","description":"The string version"},"inbound":{"type":"boolean","description":"Inbound (true) or Outbound (false)"},"startingheight":{"type":"integer","description":"The starting height (block) of the peer"},"banscore":{"type":"integer","description":"The ban score"},"synced_headers":{"type":"integer","description":"The last header we have in common with this peer"},"synced_blocks":{"type":"integer","description":"The last block we have in common with this peer"},"inflight":{"type":"array","items":{"type":"integer","description":"The heights of blocks we're currently asking from this peer"}},"whitelisted":{"type":"boolean","description":"Is peer whitelisted?"}}}}}},"example":{"status":"success","data":[{"id":741,"addr":"159.65.254.184:16125","addrlocal":"96.30.196.88:46270","services":5,"lastsend":1588677108,"lastrecv":1588677108,"bytessent":1955685,"bytesrecv":2801490,"conntime":1588497832,"timeoffset":0,"pingtime":0.019793,"version":170016,"subver":"/MagicBean:4.0.1(bitcore)/","inbound":false,"startingheight":590308,"banscore":90,"synced_headers":591801,"synced_blocks":591801,"inflight":[],"whitelisted":false},{"id":847,"addr":"116.203.52.168:16125","addrlocal":"96.30.196.88:58594","services":5,"lastsend":1588677081,"lastrecv":1588677081,"bytessent":1281133,"bytesrecv":2176814,"conntime":1588519342,"timeoffset":0,"pingtime":0.107897,"version":170016,"subver":"/MagicBean:4.0.1(bitcore)/","inbound":false,"startingheight":590491,"banscore":90,"synced_headers":591801,"synced_blocks":591801,"inflight":[],"whitelisted":false}]}}}}}}},"/daemon/listbanned":{"get":{"tags":["Daemon"],"summary":"Ban list","description":"List all banned IPs/Subnets. **Public**","operationId":"listBanned","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","description":"Ip/subnet"},"banned_until":{"type":"integer","description":"The time in seconds since epoch (Jan 1 1970 GMT)"}}}}}},"example":{"status":"success","data":[{"address":"5.189.130.70/255.255.255.255","banned_until":1588737697},{"address":"46.4.142.199/255.255.255.255","banned_until":1588474952},{"address":"62.171.153.25/255.255.255.255","banned_until":1588737698},{"address":"62.171.166.168/255.255.255.255","banned_until":1588745015}]}}}}}}},"/daemon/createrawtransaction":{"get":{"tags":["Daemon"],"summary":"Create raw transaction (GET)","description":"Creates an unsigned raw transaction (fluxd `createrawtransaction`) from the query string. `transactions` and `addresses` are JSON strings; `locktime` defaults to 0 and `expiryheight` to the current block count + 20. **Public**","operationId":"createRawTransaction","security":[],"parameters":[{"name":"transactions","in":"query","required":true,"schema":{"type":"string"},"description":"JSON string of transaction inputs"},{"name":"addresses","in":"query","required":true,"schema":{"type":"string"},"description":"JSON string of output addresses and amounts"},{"name":"locktime","in":"query","required":false,"schema":{"type":"integer","default":0},"description":"Transaction locktime"},{"name":"expiryheight","in":"query","required":false,"schema":{"type":"integer"},"description":"Transaction expiry height"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Raw transaction hex"}}}}}}}},"post":{"tags":["Daemon"],"summary":"Create hex-encoded raw transaction","description":"Create a transaction spending the given inputs and sending to the given addresses. Returns hex-encoded raw transaction. Note that the transaction's inputs are not signed, and it is not stored in the wallet or transmitted to the network. **Public**","operationId":"createRawTransactionPost","security":[],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"transactions":{"type":"array","items":{"type":"object","description":"Objects pertaining to the transaction","properties":{"txid":{"type":"string","description":"The transaction id"},"vout":{"type":"integer","description":"The output index"},"sequence":{"type":"integer","description":"Sequence number (optional)"}}}},"addresses":{"type":"object","description":"Object with addresses as keys and amounts as values"},"locktime":{"type":"integer","default":0,"description":"Raw locktime. Non-0 value also locktime-activates inputs. (optional)"},"expiryheight":{"type":"integer","description":"Expiry height of transaction (optional; defaults to the current block count + 20)"}}},"example":{"transactions":[{"txid":"224225b04fd54e8653e7cd4440dd4596aab6eff8be8686bacfad9213172da4369f","vout":0}],"addresses":{"t1JKRwXGfKTGfPV1z48rvoLyabk31z3xwHa":112.5},"locktime":10,"expiryheight":595000}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Hex string of the transaction"}}},"example":{"status":"success","data":"0400008085202f89019f36a42d171392adcfba8686bef8efb6aa9645dd4044cde753864ed54fb025420000000000feffffff0180608d9e020000001976a91404e2699cec5f44280540fb752c7660aa3ba857cc88ac01000000fb0809000000000000000000000000"}}}}}}},"/daemon/decoderawtransaction":{"post":{"tags":["Daemon"],"summary":"Decoded info of the hex-encoded transaction","description":"Return a JSON object representing the serialized, hex-encoded transaction. **Public**","operationId":"decodeRawTransactionPost","security":[],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"hexstring":{"type":"string","description":"Hex-encoded transaction"}}},"example":{"hexstring":"0400008085202f89019f36a42d171392adcfba8686bef8efb6aa9645dd4044cde753864ed54fb025420000000000feffffff0180608d9e020000001976a91404e2699cec5f44280540fb752c7660aa3ba857cc88ac01000000fb0809000000000000000000000000"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/decoderawtransaction"}}},"example":{"status":"success","data":{"txid":"03c228785451de39ce396c85168c979a439dcb2037f92d0a57de81e6b1c9f3a4","version":4,"overwintered":true,"versiongroupid":"892f2085","locktime":1,"expiryheight":592123,"vin":[{"txid":"4225b04fd54e8653e7cd4440dd4596aab6eff8be8686bacfad9213172da4369f","vout":0,"scriptSig":{"asm":"","hex":""},"sequence":4294967295}],"vout":[{"value":112.5001,"valueZat":11250010000,"valueSat":11250010000,"n":0,"scriptPubKey":{"asm":"OP_DUP OP_HASH160 04e2699cec5f44280540fb752c7660aa3ba857cc OP_EQUALVERIFY OP_CHECKSIG","hex":"76a91404e2699cec5f44280540fb752c7660aa3ba857cc88ac","reqSigs":1,"type":"pubkeyhash","addresses":["t1JKRwXGfKTGfPV1z48rvoLyabk31z3xwHa"]}}],"vJoinSplit":[],"valueBalance":0,"valueBalanceZat":0,"vShieldedSpend":[],"vShieldedOutput":[]}}}}}}},"get":{"tags":["Daemon"],"summary":"Decoded info of the hex-encoded transaction","description":"Return a JSON object representing the serialized, hex-encoded transaction. **Public**","operationId":"decodeRawTransaction","security":[],"parameters":[{"in":"query","name":"hexstring","required":true,"schema":{"type":"string"},"description":"Hex-encoded transaction","example":"0400008085202f89019f36a42d171392adcfba8686bef8efb6aa9645dd4044cde753864ed54fb025420000000000feffffff0180608d9e020000001976a91404e2699cec5f44280540fb752c7660aa3ba857cc88ac01000000fb0809000000000000000000000000"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/decoderawtransaction"}}},"example":{"status":"success","data":{"txid":"03c228785451de39ce396c85168c979a439dcb2037f92d0a57de81e6b1c9f3a4","version":4,"overwintered":true,"versiongroupid":"892f2085","locktime":1,"expiryheight":592123,"vin":[{"txid":"4225b04fd54e8653e7cd4440dd4596aab6eff8be8686bacfad9213172da4369f","vout":0,"scriptSig":{"asm":"","hex":""},"sequence":4294967295}],"vout":[{"value":112.5001,"valueZat":11250010000,"valueSat":11250010000,"n":0,"scriptPubKey":{"asm":"OP_DUP OP_HASH160 04e2699cec5f44280540fb752c7660aa3ba857cc OP_EQUALVERIFY OP_CHECKSIG","hex":"76a91404e2699cec5f44280540fb752c7660aa3ba857cc88ac","reqSigs":1,"type":"pubkeyhash","addresses":["t1JKRwXGfKTGfPV1z48rvoLyabk31z3xwHa"]}}],"vJoinSplit":[],"valueBalance":0,"valueBalanceZat":0,"vShieldedSpend":[],"vShieldedOutput":[]}}}}}}}},"/daemon/decodescript":{"post":{"tags":["Daemon"],"summary":"Decode hex script","description":"Decode a hex-encoded script. **Public**","operationId":"decodeScriptPost","security":[],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"hex":{"type":"string","description":"Hex-encoded transaction"}}},"example":{"hex":"76a91404e2699cec5f44280540fb752c7660aa3ba857cc88ac"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/decodescript"}}},"example":{"status":"success","data":{"asm":"OP_DUP OP_HASH160 04e2699cec5f44280540fb752c7660aa3ba857cc OP_EQUALVERIFY OP_CHECKSIG","reqSigs":1,"type":"pubkeyhash","addresses":["t1JKRwXGfKTGfPV1z48rvoLyabk31z3xwHa"],"p2sh":"t3U9WHvndqz58mHBX168iveW5E4xMdeBkWw"}}}}}}},"get":{"tags":["Daemon"],"summary":"Decode hex script","description":"Decode a hex-encoded script. **Public**","operationId":"decodeScript","security":[],"parameters":[{"in":"query","name":"hex","required":true,"schema":{"type":"string"},"description":"Hex-encoded transaction","example":"76a91404e2699cec5f44280540fb752c7660aa3ba857cc88ac"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/decodescript"}}},"example":{"status":"success","data":{"asm":"OP_DUP OP_HASH160 04e2699cec5f44280540fb752c7660aa3ba857cc OP_EQUALVERIFY OP_CHECKSIG","reqSigs":1,"type":"pubkeyhash","addresses":["t1JKRwXGfKTGfPV1z48rvoLyabk31z3xwHa"],"p2sh":"t3U9WHvndqz58mHBX168iveW5E4xMdeBkWw"}}}}}}}},"/daemon/getrawtransaction":{"get":{"tags":["Daemon"],"summary":"Get raw transaction data","description":"Gets raw transaction data from the txid, if verbose=0 then only hex data of transaction is shown, if verbose=1 then it will return with object of info of txid. **Public**","operationId":"getRawTransaction","security":[],"parameters":[{"in":"query","name":"txid","required":true,"schema":{"type":"string"},"description":"Txid to get raw tx data from","example":"1ed830027683e98c5670981ee983860485fce5132f30d9b6e8e248789c52c55d"},{"in":"query","name":"verbose","schema":{"default":0,"type":"number"},"description":"If verbose is not set or at 0 only hex-encoded data for the txid will return but if set at 1 it will return an object with info of the txid.","example":1}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"hex":{"type":"string","description":"The serialized, hex-encoded data for 'txid'"},"txid":{"type":"string","description":"The transaction id (same as provided)"},"version":{"type":"number","description":"The version"},"overwintered":{"type":"boolean","description":"The Overwintered flag"},"versiongroupid":{"type":"string","description":"The version group id"},"locktime":{"type":"number","description":"The lock time"},"expiryheight":{"type":"number","description":"Last valid block height for mining transaction"},"vin":{"type":"array","items":{"type":"object","properties":{"coinbase":{"type":"string","description":"Coinbase hash"},"sequence":{"type":"number","description":"The script sequence number"}}}},"vout":{"$ref":"#/components/schemas/vout"},"vJoinSplit":{"$ref":"#/components/schemas/joinsplit"},"valueBalance":{"type":"number","description":"The balance value of FLUX"},"valueBalanceZat":{"type":"integer","description":"The balance value of FLUX"},"vShieldedSpend":{"$ref":"#/components/schemas/shieldedspend"},"vShieldedOutput":{"$ref":"#/components/schemas/shieldedoutput"},"bindingSig":{"type":"string","description":"Binding signature"},"blockhash":{"type":"string","description":"The block hash"},"height":{"type":"integer","description":"Block height"},"confirmations":{"type":"integer","description":"The confirmations"},"time":{"type":"integer","description":"The transaction time in seconds since epoch (Jan 1 1970 GMT)"},"blocktime":{"type":"integer","description":"The block time in seconds since epoch (Jan 1 1970 GMT)"}}}}},"example":{"status":"success","data":{"hex":"0400008085202f89010000000000000000000000000000000000000000000000000000000000000000ffffffff2003f2fa0800324d696e6572732068747470733a2f2f326d696e6572732e636f6dffffffff0490878d9e020000001976a91404e2699cec5f44280540fb752c7660aa3ba857cc88aca0118721000000001976a914a6886f088ddd5aa3d6027b6d826f912a7ba1c6b788ac601de137000000001976a9145227c99503eae5f10a7373a2b0f385c5cc01459a88ac80461c86000000001976a914c0cf057a7735c07aafb9b3d1ff158a775dffa82e88ac00000000000000000000000000000000000000","txid":"1ed830027683e98c5670981ee983860485fce5132f30d9b6e8e248789c52c55d","version":4,"overwintered":true,"versiongroupid":"892f2085","locktime":0,"expiryheight":0,"vin":[{"coinbase":"03f2fa0800324d696e6572732068747470733a2f2f326d696e6572732e636f6d","sequence":4294967295}],"vout":[{"value":112.5001,"valueZat":11250010000,"valueSat":11250010000,"n":0,"scriptPubKey":{"asm":"OP_DUP OP_HASH160 04e2699cec5f44280540fb752c7660aa3ba857cc OP_EQUALVERIFY OP_CHECKSIG","hex":"76a91404e2699cec5f44280540fb752c7660aa3ba857cc88ac","reqSigs":1,"type":"pubkeyhash","addresses":["t1JKRwXGfKTGfPV1z48rvoLyabk31z3xwHa"]}},{"value":5.625,"valueZat":562500000,"valueSat":562500000,"n":1,"scriptPubKey":{"asm":"OP_DUP OP_HASH160 a6886f088ddd5aa3d6027b6d826f912a7ba1c6b7 OP_EQUALVERIFY OP_CHECKSIG","hex":"76a914a6886f088ddd5aa3d6027b6d826f912a7ba1c6b788ac","reqSigs":1,"type":"pubkeyhash","addresses":["t1Z49cm5Wi5RaojyLopqCpjJpK18RXM1asy"]}},{"value":9.375,"valueZat":937500000,"valueSat":937500000,"n":2,"scriptPubKey":{"asm":"OP_DUP OP_HASH160 5227c99503eae5f10a7373a2b0f385c5cc01459a OP_EQUALVERIFY OP_CHECKSIG","hex":"76a914c0cf057a7735c07aafb9b3d1ff158a775dffa82e88ac","reqSigs":1,"type":"pubkeyhash","addresses":["t1RN15YYt5vZqUoU3PGNCtnY1eDKRUs3pkE"]}},{"value":22.5,"valueZat":2250000000,"valueSat":2250000000,"n":3,"scriptPubKey":{"asm":"OP_DUP OP_HASH160 c0cf057a7735c07aafb9b3d1ff158a775dffa82e OP_EQUALVERIFY OP_CHECKSIG","hex":"76a914c0cf057a7735c07aafb9b3d1ff158a775dffa82e88ac","reqSigs":1,"type":"pubkeyhash","addresses":["t1bT5kGPGLzkwkGxVtC96Toxv3AEm86AbAF"]}}],"vJoinSplit":[],"valueBalance":0,"valueBalanceZat":0,"vShieldedSpend":[],"vShieldedOutput":[],"blockhash":"0000008ac60c223e8f7d7ea458264ec308135bde7515ee1440a824ea76610b2d","height":588530,"confirmations":403,"time":1588282383,"blocktime":1588282383}}}}}}}},"/daemon/sendrawtransaction":{"post":{"tags":["Daemon"],"summary":"Send raw transaction","description":"Submits raw transaction (serialized, hex-encoded) to local node and network. Also see createrawtransaction and decoderawtransaction. FluxOS offers no signing call (a fluxnode has no wallet); sign the transaction before sending it. **Public**","operationId":"sendRawTransactionPost","security":[],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"hexstring":{"type":"string","description":"Hex-encoded transaction"},"allowhighfees":{"type":"boolean","default":false,"description":"Allow high fees (optional)"}}},"example":{"hexstring":"0400008085202f8901ab719872dfea1b4f594049722a92efafa4695322d2c08654aafe98c654606636000000006b483045022100e5f02014419280a5c1ed1f94513e8e2bee83f6341863b304fe093dea897f4aa20220022a6e6004dbf1305197f4053bd9dd59e21abd23a31d0188d079eb72cab84e990121036b6a136ce869a0b400548a9126f06d96181ee974ff1c7f5a5e54e39b7f66be05ffffffff0140420f00000000001976a9142e5db3157a9783c6208019323f2c3a02610826a988ac00000000a60a09000000000000000000000000","allowhighfees":true}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"The transaction hash in hex"}}},"example":{"status":"success","data":"381bfe56a049208ff90356153f024395b7a74b5ec470d639dd7e6ffa4487b2fe"}}}}}},"get":{"tags":["Daemon"],"summary":"Send raw transaction","description":"Submits raw transaction (serialized, hex-encoded) to local node and network. Also see createrawtransaction and decoderawtransaction. FluxOS offers no signing call (a fluxnode has no wallet); sign the transaction before sending it. **Public**","operationId":"sendRawTransaction","security":[],"parameters":[{"in":"query","name":"hexstring","required":true,"schema":{"type":"string"},"description":"The hex string of the raw transaction","example":"0400008085202f8901ab719872dfea1b4f594049722a92efafa4695322d2c08654aafe98c654606636000000006b483045022100e5f02014419280a5c1ed1f94513e8e2bee83f6341863b304fe093dea897f4aa20220022a6e6004dbf1305197f4053bd9dd59e21abd23a31d0188d079eb72cab84e990121036b6a136ce869a0b400548a9126f06d96181ee974ff1c7f5a5e54e39b7f66be05ffffffff0140420f00000000001976a9142e5db3157a9783c6208019323f2c3a02610826a988ac00000000a60a09000000000000000000000000"},{"in":"query","name":"allowhighfees","schema":{"default":false,"type":"boolean","enum":[true,false]},"description":"Allow high fees.\n- `hexstring`=`<Hex string of raw tx>`&`allowhighfees`=`true`\n"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"The transaction hash in hex"}}},"example":{"status":"success","data":"381bfe56a049208ff90356153f024395b7a74b5ec470d639dd7e6ffa4487b2fe"}}}}}}},"/daemon/createmultisig":{"post":{"tags":["Daemon"],"summary":"Create multi-sig address","description":"Creates a multi-signature address with n signature of n keys required. **Public**","operationId":"createMultiSigPost","security":[],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"n":{"type":"integer","description":"The number of required signatures out of the n keys or addresses. Followed by Flux addresses in array of strings."},"keys":{"type":"array","description":"Array of keys which are Flux addresses or hex-encoded public keys","items":{"type":"string","description":"Flux address or hex-encoded public key"}}}},"example":{"n":2,"keys":["t1XcXfRFSnSeYmf2mbsMHzHbV8Qo5Zhk817","t1RAxsCaeeqB2XbZqvYU87uTMo9K2RtcA9z"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/createmultisig"}}},"example":{"status":"success","data":{"address":"t3Sia7BaQ6cYYxj31PJWfxhwZwZozNzk9N7","redeemScript":"52210353b1620689dc80w0d9b634616ec8566f80e22fec5edd1c8edf64a8a07babc41f2103450768e972919f7c82ca85d904daf1d3d5beabd25230aca4f363aecfa912457895cd"}}}}}}},"get":{"tags":["Daemon"],"summary":"Create multi-sig address","description":"Creates a multi-signature address with n signature of n keys required. **Public**","operationId":"createMultiSig","security":[],"parameters":[{"in":"query","name":"n","required":true,"schema":{"type":"integer"},"description":"The number of required signatures out of the n keys or addresses. Followed by Flux addresses in array of strings.","example":2},{"in":"query","name":"keys","required":true,"description":"A json array of keys which are Flux addresses or hex-encoded public keys.\n\nExample:\n- `[\"t1XcXfRFSnSeYmf2mbsMHzHbV8Qo5Zhk817\",\"t1RAxsCaeeqB2XbZqvYU87uTMo9K2RtcA9z\"]`\n","schema":{"type":"string"},"example":"[\"t1XcXfRFSnSeYmf2mbsMHzHbV8Qo5Zhk817\",\"t1RAxsCaeeqB2XbZqvYU87uTMo9K2RtcA9z\"]"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/createmultisig"}}},"example":{"status":"success","data":{"address":"t3Sia7BaQ6cYYxj31PJWfxhwZwZozNzk9N7","redeemScript":"52210353b1620689dc80w0d9b634616ec8566f80e22fec5edd1c8edf64a8a07babc41f2103450768e972919f7c82ca85d904daf1d3d5beabd25230aca4f363aecfa912457895cd"}}}}}}}},"/daemon/estimatefee":{"get":{"tags":["Daemon"],"summary":"Estimate fee nblocks","description":"Estimates the approximate fee per kilobyte needed for a transaction to begin confirmation within nblocks blocks. **Public**","operationId":"estimateFee","security":[],"parameters":[{"in":"query","name":"nblocks","required":true,"schema":{"type":"integer"},"description":"Number of nblocks","example":5}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"integer","description":"Estimated fee-per-kilobyte -1.0 is returned if not enough transactions and blocks have been observed to make an estimate."}}},"example":{"status":"success","data":-1}}}}}}},"/daemon/estimatepriority":{"get":{"tags":["Daemon"],"summary":"Estimate priority nblocks","description":"Estimates the approximate priority a zero-fee transaction needs to begin confirmation within nblocks blocks. **Public**","operationId":"estimatePriority","security":[],"parameters":[{"in":"query","name":"nblocks","required":true,"schema":{"type":"integer"},"description":"Number of nblocks","example":5}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"integer","description":"Estimated fee-per-kilobyte -1.0 is returned if not enough transactions and blocks have been observed to make an estimate."}}},"example":{"status":"success","data":0}}}}}}},"/daemon/validateaddress":{"get":{"tags":["Daemon"],"summary":"Info of the Flux address","description":"Return information about the given Flux address.\n\nThe `ismine` and `iswatchonly` fields are **redacted for unauthenticated callers** — they describe this node's wallet, so a node-operator `zelidauth` header is required to receive them. **Public**","operationId":"validateAddress","security":[],"parameters":[{"in":"query","name":"fluxaddress","required":true,"schema":{"type":"string"},"description":"Flux address to validate","example":"t1N6mLX2A64QsyuLbYkfPZSrkLF86hxuuFe"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"isvalid":{"type":"boolean","description":"If the address is valid or not. If not, this is the only property returned."},"address":{"type":"string","description":"The Flux address validated"},"scriptPubKey":{"type":"string","description":"The hex encoded scriptPubKey generated by the address"},"ismine":{"type":"boolean","description":"If the address is yours or not"},"iswatchonly":{"type":"boolean","description":"If address is watch only"},"isscript":{"type":"boolean","description":"If the key is a script"},"pubkey":{"type":"string","description":"The hex value of the raw public key"},"iscompressed":{"type":"boolean","description":"If the address is compressed"},"account":{"type":"string","description":"DEPRECATED. The account associated with the address, \"\" is the default account"}}}}},"example":{"status":"success","data":{"isvalid":true,"address":"t1N6mLX2A64QsyuLbYkfPZSrkLF86hxuuFe","scriptPubKey":"76a9142e5db3157a9783c6208019323f2c3a02610826a988ac","ismine":true,"iswatchonly":false,"isscript":false,"pubkey":"036b6a136ce869a0b400548a9126f06d96181ee974ff1c7f5a5e54e39b7f66be05","iscompressed":true,"account":""}}}}}}}},"/daemon/verifymessage":{"post":{"tags":["Daemon"],"summary":"Verify a message","description":"Verify a signed message. **Public**","operationId":"verifyMessagePost","security":[],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"fluxaddress":{"type":"string","description":"The Flux address to use for the signature"},"signature":{"type":"string","description":"The signature provided by the signer in base 64 encoding"},"message":{"type":"string","description":"The message that was signed"}}},"example":{"fluxaddress":"t1N6mLX2A64QsyuLbYkfPZSrkLF86hxuuFe","signature":"H5j8AoJ+8VaEEJGgw846hSPQoq42X9yiLwn/Nab1pASBFcw8rj5k8J9xpKr1VzepMEOF2ProYxVsQ9i7xalH4Sk=","message":"helloworld"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"boolean","description":"If the signature is verified or not."}}},"example":{"status":"success","data":true}}}}}},"get":{"tags":["Daemon"],"summary":"Verify a message","description":"Verify a signed message. **Public**","operationId":"verifyMessage","security":[],"parameters":[{"in":"query","name":"fluxaddress","required":true,"schema":{"type":"string"},"description":"The Flux address to use for the signature","example":"t1N6mLX2A64QsyuLbYkfPZSrkLF86hxuuFe"},{"in":"query","name":"signature","required":true,"schema":{"type":"string"},"description":"The signature provided by the signer in base 64 encoding","example":"H5j8AoJ+8VaEEJGgw846hSPQoq42X9yiLwn/Nab1pASBFcw8rj5k8J9xpKr1VzepMEOF2ProYxVsQ9i7xalH4Sk="},{"in":"query","name":"message","required":true,"schema":{"type":"string"},"description":"The message that was signed","example":"helloworld"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"boolean","description":"If the signature is verified or not."}}},"example":{"status":"success","data":true}}}}}}},"/daemon/zvalidateaddress":{"get":{"tags":["Daemon"],"summary":"Information about given z address","description":"Return information about the given z address. **Public**","operationId":"zValidateAddress","security":[],"parameters":[{"in":"query","name":"zaddr","required":true,"schema":{"type":"string"},"description":"The z address to validate","example":"za102nkanf5xu6asasvydwp3zlcuure23jqxxz0zqh9catfvc9cu0dfcvl35tz3qkf2q2cxc47g4mk"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"isvalid":{"type":"boolean","description":"If the address is valid or not. If not, this is the only property returned."},"address":{"type":"string","description":"The z address validated"},"type":{"type":"string","description":"Sprout or Sapling"},"diversifier":{"type":"string","description":"The hex value of the diversifier, d"},"diversifiedtransmissionkey":{"type":"string","description":"The hex value of pk_d"},"ismine":{"type":"boolean","description":"If the address is yours or not"}}}}},"example":{"status":"success","data":{"isvalid":true,"address":"za102nkanf5xu6asasvydwp3zlcuure23jqxxz0zqh9catfvc9cu0dfcvl35tz3qkf2q2cxc47g4mk","type":"sapling","diversifier":"7aa76ecd343735d8760c23","diversifiedtransmissionkey":"6cb0022a5910c5a2f1339cdae3b8609656c7e502f1843140469507e7f88b185c","ismine":true}}}}}}}},"/daemon/getbenchmarks":{"get":{"tags":["Daemon"],"summary":"Benchmark results","description":"Return most recent benchmark results. **Public**","operationId":"getBenchmarks","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/getbenchmarks"}}},"example":{"status":"success","data":{"ipaddress":"185.220.177.169","architecture":"amd64","armboard":"","status":"NIMBUS","time":1692874695,"real_cores":10,"cores":10,"ram":31,"ssd":1024,"hdd":0,"ddwrite":1001.733828125,"totalstorage":1024,"disksinfo":[{"disk":"vda","size":1024,"writespeed":1001.733828125}],"eps":1012.08,"ping":7.226,"download_speed":809.3055686875,"upload_speed":310.0325255625,"bench_version":"1.0.20","speed_version":"1.2.0","thunder":false,"error":""}}}}}}}},"/daemon/getbenchstatus":{"get":{"tags":["Daemon"],"summary":"Bench status","description":"This will return the status of the node, what fluxbenchd determined the tier the server could pass for, and if Flux backend is connected. If any one of these return a negative result the FluxNode will fail to confirm. **Public**","operationId":"getBenchStatus","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/benchstatus"}}},"example":{"status":"success","data":{"status":"online","benchmarking":"CUMULUS"}}}}}}}},"/daemon/getblockhashes":{"get":{"tags":["Daemon"],"summary":"Get block hashes","description":"Returns array of block hashes for given height range. **Public**","operationId":"getBlockHashes","security":[],"parameters":[{"name":"high","in":"query","required":true,"schema":{"type":"integer"},"description":"Ending block height"},{"name":"low","in":"query","required":true,"schema":{"type":"integer"},"description":"Starting block height"},{"name":"noOrphans","in":"query","required":false,"schema":{"type":"boolean"},"description":"Exclude orphan blocks. Note the camel-case spelling — FluxOS reads the `noOrphans` query parameter; the lower-case path segment of the route is not read.","example":true},{"name":"logicalTimes","in":"query","required":false,"schema":{"type":"boolean"},"description":"Include logical times. Note the camel-case spelling — FluxOS reads the `logicalTimes` query parameter; the lower-case path segment of the route is not read.","example":false}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"string","description":"Block hash"}}}},"example":{"status":"success","data":["000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f","00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048"]}}}}}},"post":{"tags":["Daemon"],"summary":"Get block hashes (POST)","description":"Returns array of block hashes for given height range. **Public**","operationId":"getBlockHashesPost","security":[],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","required":["high","low"],"properties":{"high":{"type":"integer","description":"Ending block height"},"low":{"type":"integer","description":"Starting block height"},"options":{"type":"object","description":"Passed to fluxd unchanged as the third argument","properties":{"noOrphans":{"type":"boolean","description":"Exclude orphan blocks"},"logicalTimes":{"type":"boolean","description":"Include logical times"}}}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"string"}}}}}}}}}},"/daemon/getaddresstxids":{"get":{"tags":["Daemon"],"summary":"Get address transaction IDs","description":"Get all transaction IDs for a specific address. **Public**","operationId":"getSingleAddresssTxids","security":[],"parameters":[{"name":"address","in":"query","required":true,"schema":{"type":"string"},"description":"Flux address to query"},{"name":"start","in":"query","required":false,"schema":{"type":"integer"},"description":"Starting block height"},{"name":"end","in":"query","required":false,"schema":{"type":"integer"},"description":"Ending block height"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"string","description":"Transaction ID"}}}}}}}}},"post":{"tags":["Daemon"],"summary":"Get address transaction IDs (POST)","description":"Get all transaction IDs for multiple addresses. **Public**","operationId":"getAddressTxids","security":[],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"},"description":"Array of Flux addresses"},"start":{"type":"integer","description":"Starting block height"},"end":{"type":"integer","description":"Ending block height"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"string"}}}}}}}}}},"/daemon/getaddressbalance":{"get":{"tags":["Daemon"],"summary":"Get address balance","description":"Get balance for a specific address. **Public**","operationId":"getSingleAddressBalance","security":[],"parameters":[{"name":"address","in":"query","required":true,"schema":{"type":"string"},"description":"Flux address to query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"balance":{"type":"number","description":"Address balance in satoshis"},"received":{"type":"number","description":"Total received by address"}}}}}}}}}},"post":{"tags":["Daemon"],"summary":"Get address balance (POST)","description":"Get balance for multiple addresses. **Public**","operationId":"getAddressBalance","security":[],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"},"description":"Array of Flux addresses"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object"}}}}}}}}}},"/daemon/getaddressdeltas":{"get":{"tags":["Daemon"],"summary":"Get address deltas","description":"Get balance changes (deltas) for a specific address. **Public**","operationId":"getSingleAddressDeltas","security":[],"parameters":[{"name":"address","in":"query","required":true,"schema":{"type":"string"},"description":"Flux address to query"},{"name":"start","in":"query","required":false,"schema":{"type":"integer"},"description":"Starting block height"},{"name":"end","in":"query","required":false,"schema":{"type":"integer"},"description":"Ending block height"},{"name":"chaininfo","in":"query","required":false,"schema":{"type":"boolean"},"description":"Include chain information"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"satoshis":{"type":"integer","description":"Amount in satoshis"},"txid":{"type":"string","description":"Transaction ID"},"index":{"type":"integer","description":"Output index"},"blockindex":{"type":"integer","description":"Block index"},"height":{"type":"integer","description":"Block height"}}}}}}}}}}},"post":{"tags":["Daemon"],"summary":"Get address deltas (POST)","description":"Get balance changes for multiple addresses. **Public**","operationId":"getAddressDeltas","security":[],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"start":{"type":"integer"},"end":{"type":"integer"},"chaininfo":{"type":"boolean"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object"}}}}}}}}}},"/daemon/getaddressutxos":{"get":{"tags":["Daemon"],"summary":"Get address UTXOs","description":"Get unspent transaction outputs for a specific address. **Public**","operationId":"getSingleAddressUtxos","security":[],"parameters":[{"name":"address","in":"query","required":true,"schema":{"type":"string"},"description":"Flux address to query"},{"name":"chaininfo","in":"query","required":false,"schema":{"type":"boolean"},"description":"Include chain information. Forwarded to fluxd as given, without conversion to a boolean; the POST form with `chainInfo: true` sends a real boolean."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","description":"Address"},"txid":{"type":"string","description":"Transaction ID"},"outputIndex":{"type":"integer","description":"Output index"},"script":{"type":"string","description":"Script hex"},"satoshis":{"type":"integer","description":"Amount in satoshis"},"height":{"type":"integer","description":"Block height"}}}}}}}}}}},"post":{"tags":["Daemon"],"summary":"Get address UTXOs (POST)","description":"Get UTXOs for multiple addresses. **Public**","operationId":"getAddressUtxos","security":[],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}},"chainInfo":{"type":"boolean"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object"}}}}}}}}}},"/daemon/getaddressmempool":{"get":{"tags":["Daemon"],"summary":"Get address mempool transactions","description":"Get mempool transactions for a specific address. **Public**","operationId":"getSingleAddressMempool","security":[],"parameters":[{"name":"address","in":"query","required":true,"schema":{"type":"string"},"description":"Flux address to query"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"txid":{"type":"string"},"index":{"type":"integer"},"satoshis":{"type":"integer"},"timestamp":{"type":"integer"}}}}}}}}}}},"post":{"tags":["Daemon"],"summary":"Get address mempool (POST)","description":"Get mempool transactions for multiple addresses. **Public**","operationId":"getAddressMempool","security":[],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object"}}}}}}}}}},"/daemon/submitblock":{"get":{"tags":["Daemon"],"summary":"Submit block","description":"Submit a block to the network. **User**","operationId":"submitBlock","security":[{"FluxID":[]}],"parameters":[{"name":"hexdata","in":"query","required":true,"schema":{"type":"string"},"description":"Block data in hex format"},{"name":"jsonparametersobject","in":"query","required":false,"schema":{"type":"string"},"description":"Optional JSON parameters"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Block submission result"}}}}}}}},"post":{"tags":["Daemon"],"summary":"Submit block (POST)","description":"Submit a block using POST method. **User**","operationId":"submitBlockPost","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"hexdata":{"type":"string"},"jsonparametersobject":{"type":"string"}},"required":["hexdata"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string"}}}}}}}}},"/daemon/prioritisetransaction":{"get":{"tags":["Daemon"],"summary":"Priortise a transaction","description":"Accepts the transaction into mined blocks at a higher (or lower) priority. **User**","operationId":"prioritiseTransaction","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"txid","required":true,"schema":{"type":"string"},"description":"The transaction id","example":"22ab3d049154c7d4b0f04b381770c655564facdc896a4f7e97aa5662f57a58c6"},{"in":"query","name":"prioritydelta","required":true,"schema":{"type":"integer"},"description":"The priority to add or subtract. The transaction selection algorithm considers the tx as it would have a higher priority. (priority of a transaction is calculated: coinage * value_in_satoshis / txsize)","example":0},{"in":"query","name":"feedelta","required":true,"schema":{"type":"integer"},"description":"The fee value (in satoshis) to add (or subtract, if negative). The fee is not actually paid, only the algorithm for selecting transactions into a block considers the transaction as it would have paid a higher (or lower) fee.","example":10000}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"boolean","description":"Returns true"}}},"example":{"status":"success","data":true}}}}}}},"/daemon/reindex":{"get":{"tags":["Daemon"],"summary":"Reindex Flux daemon","description":"Tries to reindex Flux daemon running on the FluxNode the call is run against. Flux daemon is firstly stopped and then started with reindex flag. **Admin**","operationId":"reindexFlux","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Daemon successfully reindexing"}}}}}}}},"/daemon/stop":{"get":{"tags":["Daemon"],"summary":"Stop Flux daemon","description":"This will stop the Flux daemon from running. **Admin**","operationId":"stop","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Explanation of status"}}},"example":{"status":"success","data":"Stop Flux server"}}}}}}},"/daemon/createfluxnodekey":{"get":{"tags":["Daemon"],"summary":"Create fluxnode private key","description":"Create a new fluxnode private key. **Admin**","operationId":"createFluxNodeKey","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Fluxnode private key"}}},"example":{"status":"success","data":"5JwVKe7UH986ncSL2jG9KdUY2AuZUTDAkTsp4TZoGWdD5cLLiFR"}}}}}}},"/daemon/listfluxnodeconf":{"get":{"tags":["Daemon"],"summary":"The fluxnode conf file","description":"View fluxnode conf file in JSON format, this will return empty for most unless running a hot wallet. **Admin**","operationId":"listFluxNodeConf","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"filter","required":false,"schema":{"type":"string"},"description":"Filter the configuration entries returned","example":"mynode"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"alias":{"type":"string","description":"Alias name"},"status":{"type":"string","description":"Status of fluxnode"},"collateral":{"type":"string","description":"Collateral txid and output index"},"txhash":{"type":"string","description":"Transaction id"},"outputIndex":{"type":"integer","description":"Output index"},"privateKey":{"type":"string","description":"Fluxnode private key"},"address":{"type":"string","description":"Ip address of fluxnode server and port"},"ip":{"type":"string","description":"Ip address of fluxnode server"},"network":{"type":"string","description":"Network type (IPv4, IPv6, onion)"},"added_height":{"type":"integer","description":"Block height fluxnode was added to list"},"confirmed_height":{"type":"integer","description":"Block height fluxnode was confirmed by the network"},"last_confirmed_height":{"type":"integer","description":"Latest block height network confirmed the fluxnode"},"last_paid_height":{"type":"integer","description":"Block the fluxnode was last paid"},"tier":{"type":"string","description":"Tier of fluxnode"},"payment_address":{"type":"string","description":"Address where rewards are paid"},"activesince":{"type":"integer","description":"Last paid time in epoch"},"lastpaid":{"type":"integer","description":"Last paid time in epoch"}}}}}},"example":{"status":"success","data":[{"alias":"zn1","status":"OFFLINE","collateral":"COutPoint(2bcd3c84c84f87eaa86e4e56834c92927a07f9e18718810b92e0d0324456a67c, 0)","txhash":"2bcd3c84c84f87eaa86e4e56834c92927a07f9e18718810b92e0d0324456a67c","outputIndex":0,"privateKey":"93HaYBVUCYjEMeeH1Y4sBGLALQZE1Yc1K64xiqgX37tGBDQL8Xg","address":"127.0.0.2:16125","ip":"UNKNOWN","network":"UNKNOWN","added_height":0,"confirmed_height":0,"last_confirmed_height":0,"last_paid_height":0,"tier":"UNKNOWN","payment_address":"UNKNOWN","activesince":0,"lastpaid":0}]}}}}}}},"/daemon/getfluxnodeoutputs":{"get":{"tags":["Daemon"],"summary":"Fluxnode transaction outputs","description":"Print all fluxnode transaction outputs. **Admin**","operationId":"getFluxNodeOutputs","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"txhash":{"type":"string","description":"Output transaction hash"},"outputidx":{"type":"number","description":"Output index number"}}}}}},"example":{"status":"success","data":[{"txhash":"cee4c36d22609004d286bd83bebf1f28feb33dd6e4889c6c400766253942c1af","outputidx":0}]}}}}}}},"/daemon/startfluxnode":{"get":{"tags":["Daemon"],"summary":"Start FluxNode commmand","description":"Attempts to start one or more FluxNode. This call will only work if running a hot FluxNode which is highly not recommended. It is a control wallet function so basically your wallet containing the collateral funds. **Admin**","operationId":"startFluxNode","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"set","required":true,"schema":{"type":"string"},"description":"Specify which set of FluxNode(s) to start.","example":"alias"},{"in":"query","name":"lockwallet","required":true,"schema":{"type":"boolean","enum":[true,false]},"description":"Lock wallet after completion.\n\nExample:\n- `set`=`<alias>`&`lockwallet`=`false`\n"},{"in":"query","name":"alias","required":false,"schema":{"type":"string"},"description":"FluxNode alias. Required if using 'alias' as the set.","example":"Super1"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/startfluxnode"}}},"example":{"status":"success","data":{"overall":"Successfully started 0 fluxnodes, failed to start 1, total","detail":[{"result":"failed","error":"could not find alias in config. Verify with list-conf."}]}}}}}}}},"/daemon/startdeterministicfluxnode":{"get":{"tags":["Daemon"],"summary":"Start fluxnode command","description":"Attempts to start one fluxnode. Same as the `/daemon/startfluxnode` call this call will only work if running a hot FluxNode which is highly not recommended. It is a control wallet function so basically your wallet containing the collateral funds.  **Admin**","operationId":"startDeterministicFluxNode","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"alias","required":true,"schema":{"type":"string"},"description":"Node name or alias.","example":"Basic1"},{"in":"query","name":"lockwallet","required":false,"schema":{"type":"boolean","default":false,"enum":[true,false]},"description":"Lock wallet after completion.\n\nExample:\n- `alias`=`<alias`&`lockwallet`=`false`\n"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/startfluxnode"}}},"example":{"status":"success","data":{"overall":"Successfully started 0 fluxnodes, failed to start 1, total","detail":[{"alias":"Basic1","result":"failed","error":"could not find alias in config. Verify with list-conf."}]}}}}}}}},"/daemon/verifychain":{"get":{"tags":["Daemon"],"summary":"Verify blockchain data","description":"Verifies blockchain database. **Admin**","operationId":"verifyChain","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"checklevel","schema":{"type":"integer","default":3,"enum":[0,1,2,3,4]},"description":"How thorough the block verification is.\n\nExample:\n- `checklevel`=`1`\n"},{"in":"query","name":"numblocks","schema":{"type":"integer","default":288},"description":"The number of blocks to check","example":200}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"boolean","description":"Verified or not"}}},"example":{"status":"success","data":true}}}}}}},"/daemon/addnode":{"get":{"tags":["Daemon"],"summary":"Add, remove, or try to connect a node","description":"Attempts to add or remove a node from the addnode list. Or try a connection to a node once. **Admin**","operationId":"addNode","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"node","required":true,"schema":{"type":"string"},"description":"The node's ip:port (see `/daemon/getpeerinfo` for nodes)","example":"188.239.61.210:16125"},{"in":"query","name":"command","required":true,"schema":{"type":"string","enum":["add","remove","onetry"]},"description":"Use 'add' to add a node to the list, 'remove' to remove a node from\nthe list, 'onetry' to try a connection to the node once.\n\nExample:\n- `node`=`<ip:port>`&`command`=`add`\n"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/nullmessage"}}},"example":{"status":"success","data":null}}}}}}},"/daemon/clearbanned":{"get":{"tags":["Daemon"],"summary":"Clear banned IP's","description":"Clear all banned IP's. **Admin**","operationId":"clearBanned","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/nullmessage"}}},"example":{"status":"success","data":null}}}}}}},"/daemon/disconnectnode":{"get":{"tags":["Daemon"],"summary":"Disconnect a node","description":"Immediately disconnects from the specified node. **Admin**","operationId":"disconnectNode","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"node","required":true,"schema":{"type":"string"},"description":"The node's ip:port","example":"188.239.61.210:16125"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/nullmessage"}}},"example":{"status":"success","data":null}}}}}}},"/daemon/getaddednodeinfo":{"get":{"tags":["Daemon"],"summary":"Info of added node/nodes","description":"Returns information about the given added node, or all added nodes(note that onetry addnodes are not listed here). If dns is false, only a list of added nodes will be provided, otherwise connected information will also be available. **Admin**","operationId":"getAddedNodeInfo","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"dns","required":true,"schema":{"type":"boolean","enum":[true,false]},"description":"If false, only a list of added nodes will be provided, otherwise connected information will also be available."},{"in":"query","name":"node","schema":{"type":"string"},"description":"The node ip:port","example":"188.239.61.210:16125"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"addednode":{"type":"string","description":"The node ip address"},"connected":{"type":"boolean","description":"If connected"},"addresses":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","description":"The Flux server host and port"},"connected":{"type":"string","description":"Connection, inbound or outbound"}}}}}}}}},"example":{"status":"success","data":[{"addednode":"explorer.runonflux.io","connected":true,"addresses":[{"address":"159.65.254.184:16125","connected":"outbound"}]},{"addednode":"explorer2.runonflux.io","connected":true,"addresses":[{"address":"80.211.207.17:16125","connected":"outbound"}]},{"addednode":"explorer.flux.zelcore.io","connected":true,"addresses":[{"address":"206.189.0.55:16125","connected":"outbound"}]}]}}}}}}},"/daemon/setban":{"get":{"tags":["Daemon"],"summary":"Add or remove a IP from banned list","description":"Attempts add or remove a IP/Subnet from the banned list. **Admin**","operationId":"setBan","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"ip","required":true,"schema":{"type":"string"},"description":"The IP/Subnet (see getpeerinfo for nodes ip) with a optional netmask (default is /32 = single ip)","example":"188.239.61.210"},{"in":"query","name":"command","required":true,"schema":{"type":"string","enum":["add","remove"]},"description":"Use 'add' to add a IP/Subnet to the list, 'remove' to remove a IP/Subnet from the list"},{"in":"query","name":"bantime","schema":{"type":"integer","default":86400},"description":"Time in seconds how long (or until when if absolute is set) the ip is banned (0 or empty means using the default time of 24h which can also be overwritten by the -bantime startup argument)","example":3500},{"in":"query","name":"absolute","schema":{"type":"boolean","enum":[false,true]},"description":"If set, the bantime must be a absolute timestamp in seconds since\nepoch (Jan 1 1970 GMT)\n\nExample:\n- `ip`=`<ipaddress>`&`command`=`<add/remove>`&`bantime`=`1590368400`&`absolute`=`true`\n"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/nullmessage"}}},"example":{"status":"success","data":null}}}}}}},"/daemon/start":{"get":{"tags":["Daemon"],"summary":"Start Flux daemon","description":"Tries to start Flux daemon running on the FluxNode the call is run against without any extra parameters. **AdminAndFluxTeam**","operationId":"startdaemonB","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Daemon successfully started"}}}}}}}},"/daemon/restart":{"get":{"tags":["Daemon"],"summary":"Restart Flux daemon","description":"Tries to restart Flux daemon running on the FluxNode the call is run against. Flux daemon is firstly stopped and then started without any extra parameters. **AdminAndFluxTeam**","operationId":"restartdaemonB","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Daemon successfully restarted"}}}}}}}},"/daemon/ping":{"get":{"tags":["Daemon"],"summary":"Ping request to measure ping time","description":"Requests that a ping be sent to all other nodes, to measure ping time. **AdminAndFluxTeam**","operationId":"ping","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/nullmessage"}}},"example":{"status":"success","data":null}}}}}}},"/daemon/startbenchmark":{"get":{"tags":["Daemon"],"summary":"Start Benchmark daemon","description":"Start Benchmark daemon. **AdminAndFluxTeam**","operationId":"daemonstartbenchmark","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Explanation of status"}}},"example":{"status":"success","data":"Starting process"}}}}}}},"/daemon/stopbenchmark":{"get":{"tags":["Daemon"],"summary":"Stop Benchmark daemon","description":"Stop Benchmark daemon. **AdminAndFluxTeam**","operationId":"stopbenchmark","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Explanation of status"}}},"example":{"status":"success","data":"Stopping process"}}}}}}},"/benchmark/getstatus":{"get":{"tags":["Benchmark"],"summary":"Fluxbench status","description":"This will return the status of the node, what FluxBenchd determined the tier the server could pass for, and if Flux backend is connected. If any one of these return a negative result the FluxNode will fail to confirm. **Public**","operationId":"getStatus","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/benchstatus"}}},"example":{"status":"success","data":{"status":"online","benchmarking":"NIMBUS"}}}}}}}},"/benchmark/help":{"get":{"tags":["Benchmark"],"summary":"Fluxbench calls","description":"This will return with a list of calls for FluxBench. **Public**","operationId":"benchmarkHelp","security":[],"parameters":[{"in":"query","name":"command","required":false,"schema":{"type":"string"},"description":"Show help for this benchmark command only; the full command list when omitted","example":"getstatus"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"List of calls"}}},"example":{"status":"success","data":"== Benchmarks ==\ngetstatus (full_check)\nrestartnodebenchmarks\nsignfluxnodetransaction \"hexstring\"\nstartmultiportbench\n\n== Control ==\nhelp ( \"command\" )\nstop\n\n== Fluxnode ==\ngetbenchmarks\ngetinfo"}}}}}}},"/benchmark/getbenchmarks":{"get":{"tags":["Benchmark"],"summary":"Benchmark results","description":"Return most recent benchmark results. **Public**","operationId":"getBenchmarksBenchmark","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/getbenchmarks"}}},"example":{"status":"success","data":{"ipaddress":"149.154.176.24","architecture":"amd64","armboard":"","status":"STRATUS","time":1692898160,"real_cores":8,"cores":16,"ram":62,"ssd":880,"hdd":0,"ddwrite":830.878984375,"totalstorage":880,"disksinfo":[{"disk":"sda","size":880,"writespeed":830.878984375}],"eps":3449.12,"ping":0.733,"download_speed":1370.830928,"upload_speed":4973.01136,"bench_version":"1.0.20","speed_version":"1.2.0","thunder":false,"error":""}}}}}}}},"/benchmark/getinfo":{"get":{"tags":["Benchmark"],"summary":"Fluxbench status","description":"This will return with the fluxbench status of the fluxnode. **Public**","operationId":"benchmarkGetInfo","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/benchinfo"}}},"example":{"status":"success","data":{"version":"3.8.0","rpcport":16224}}}}}}}},"/benchmark/restartnodebenchmarks":{"get":{"tags":["Benchmark"],"summary":"Restart FluxBench daemon","description":"This will restart the FluxBench daemon and start bench process. **AdminAndFluxTeam**","operationId":"restartNodeBenchmarks","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Explanation of status"}}},"example":{"status":"success","data":"Benchmarks will restart in the next couple minutes"}}}}}}},"/benchmark/stop":{"get":{"tags":["Benchmark"],"summary":"Stop fluxbench daemon","description":"This will stop the fluxbench daemon. **Admin**","operationId":"stopbenchmarkaemon","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Explanation of status"}}},"example":{"status":"success","data":"Fluxbench server stopping"}}}}}}},"/benchmark/signfluxnodetransaction":{"post":{"tags":["Benchmark"],"summary":"Sign FluxNode transaction","description":"Command to get FluxBenchd to sign a FluxNode broadcast. **Admin**","operationId":"signFluxNodeTransactionPost","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"hexstring":{"type":"string","description":"The hex encoded FluxNode broadcast message"}}},"example":{"hexstring":"0500000004566e906c6df24b00ca710cecbbea166a29b9098456bed212207fea66f433ba4500000000ba33bd5e01182ebd5e010f3131362e3230332e3233372e323530411b27b3e254a9f3248d88039a0f062e0d634e130bd34a9e4a1cb27d7aa6ce975cee251be9af6864a1a4a9e9d5fc2b28a07af8bab36a73f912c59ef844a69fa03f5f411c7f47ba609b2c0eb91268b446b31899ce66f90fa1375aab29692f1b252a53a9883120e10c646292486365608dc806c43e2d49b66afdd150a6a7f60b6b2392a83b"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/signfluxnodetransaction"}}},"example":{"status":"success","data":{"status":"complete","tier":"CUMULUS","hex":"0500000004566e906c6df24b00ca710cecbbea166a29b9098456bed212207fea66f433ba4500000000ba33bd5e014d3cbd5e010f3131362e3230332e3233372e323530411b27b3e254a9f3248d88039a0f062e0d634e130bd34a9e4a1cb27d7aa6ce975cee251be9af6864a1a4a9e9d5fc2b28a07af8bab36a73f912c59ef844a69fa03f5f411b38e0e02dfece0ba3b7aae0afdcea7c70c9ea28b11317763f12092214086059e74d542cada464f3ee2c655011c53f6f18c0aa484bff8ce36926c6b295eb9287ff"}}}}}}},"get":{"tags":["Benchmark"],"summary":"Sign FluxNode transaction","description":"Command to get FluxBenchd to sign a FluxNode broadcast. **Admin**","operationId":"signFluxNodeTransaction","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"hexstring","required":true,"schema":{"type":"string"},"description":"The hex encoded fluxnode broadcast message","example":"0500000004566e906c6df24b00ca710cecbbea166a29b9098456bed212207fea66f433ba4500000000ba33bd5e01182ebd5e010f3131362e3230332e3233372e323530411b27b3e254a9f3248d88039a0f062e0d634e130bd34a9e4a1cb27d7aa6ce975cee251be9af6864a1a4a9e9d5fc2b28a07af8bab36a73f912c59ef844a69fa03f5f411c7f47ba609b2c0eb91268b446b31899ce66f90fa1375aab29692f1b252a53a9883120e10c646292486365608dc806c43e2d49b66afdd150a6a7f60b6b2392a83b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/signfluxnodetransaction"}}},"example":{"status":"success","data":{"status":"complete","tier":"CUMULUS","hex":"0500000004566e906c6df24b00ca710cecbbea166a29b9098456bed212207fea66f433ba4500000000ba33bd5e014d3cbd5e010f3131362e3230332e3233372e323530411b27b3e254a9f3248d88039a0f062e0d634e130bd34a9e4a1cb27d7aa6ce975cee251be9af6864a1a4a9e9d5fc2b28a07af8bab36a73f912c59ef844a69fa03f5f411b38e0e02dfece0ba3b7aae0afdcea7c70c9ea28b11317763f12092214086059e74d542cada464f3ee2c655011c53f6f18c0aa484bff8ce36926c6b295eb9287ff"}}}}}}}},"/syncthing/system/error":{"post":{"tags":["Syncthing"],"summary":"Set an error message","description":"Post with an error message in the body (plain text) to register a new error. The new error will be displayed on any active GUI clients. **AdminAndFluxTeam**","operationId":"fluxSyncthingSystemErrorPOST","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"string"},"example":"Test error"}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Syncthing's answer (empty on success)"}}},"example":{"status":"success","data":""}}}}}}},"/syncthing/system/upgrade":{"post":{"tags":["Syncthing"],"summary":"Perform an upgrade","description":"Perform an upgrade to the newest released version and restart. Does nothing if there is no newer version than currently running. **AdminAndFluxTeam**","operationId":"fluxSyncthingUpgradePOST","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Syncthing's answer (empty on success)"}}},"example":{"status":"success","data":""}}}}}}},"/syncthing/config":{"post":{"tags":["Syncthing"],"summary":"Replace the entire Syncthing configuration","description":"Replaces this node&#39;s whole Syncthing configuration with the object sent in `config`. Send the JSON body as `text/plain`: the handler reads the raw stream, and with `Content-Type: application/json` the request never answers. **AdminAndFluxTeam**","operationId":"fluxSyncthingConfigPOST","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"config":{"type":"object","description":"The replacement configuration section"}}},"example":{"config":{"version":37,"folders":[],"devices":[]}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":{}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"}}}},"/syncthing/config/devices":{"post":{"tags":["Syncthing"],"summary":"Modify the device configuration","description":"Sends `config` to Syncthing's `/rest/config/devices` (or `/rest/config/devices/<id>` when `id` is given) with the verb in `method`: `post` (default) adds or replaces the given devices, `put` replaces the section, `patch` changes one device, `delete` removes it. Send the JSON body as `text/plain`: the handler reads the raw stream, and with `Content-Type: application/json` the request never answers. **AdminAndFluxTeam**","operationId":"fluxSyncthingConfigDevicesPOST","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Device id; when given the call addresses `/rest/config/devices/<id>` (answers `Invalid ID supplied` for characters Syncthing ids cannot contain)"},"method":{"type":"string","enum":["get","post","put","patch","delete"],"default":"post","description":"HTTP method used against Syncthing"},"config":{"type":"object","description":"The replacement configuration section"}}},"example":{"config":[{"deviceID":"7IKKJI5-E34NYQT-BCVFJMH-6O5YBNH-ZXRLVCG-7HE6I5Z-V6B5SLM-TNJAFAO","name":"peer-node"}]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":{}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"}}}},"/syncthing/config/folders":{"post":{"tags":["Syncthing"],"summary":"Modify the folder configuration","description":"Sends `config` to Syncthing's `/rest/config/folders` (or `/rest/config/folders/<id>` when `id` is given) with the verb in `method`: `post` (default) adds or replaces the given folders, `put` replaces the section, `patch` changes one folder, `delete` removes it. Send the JSON body as `text/plain`: the handler reads the raw stream, and with `Content-Type: application/json` the request never answers. **AdminAndFluxTeam**","operationId":"fluxSyncthingConfigFoldersPOST","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"config":{"description":"Sent to Syncthing as the request body: one folder object or an array of them for `post`, the whole folder list for `put`, the fields to change for `patch`"},"id":{"type":"string","description":"Folder id; when given the call addresses `/rest/config/folders/<id>` (answers `Invalid ID supplied` for characters Syncthing ids cannot contain)"},"method":{"type":"string","enum":["get","post","put","patch","delete"],"default":"post","description":"HTTP method used against Syncthing"}}},"example":{"config":{"id":"new-folder2","label":"test","filesystemType":"basic","path":"/home/flux100/test2","type":"sendreceive","devices":[{"deviceID":"7IKKJI5-E34NYQT-BCVFJMH-6O5YBNH-ZXRLVCG-7HE6I5Z-V6B5SLM-TNJAFAO","introducedBy":"","encryptionPassword":""}],"rescanIntervalS":3600,"fsWatcherEnabled":true,"fsWatcherDelayS":10,"ignorePerms":false,"autoNormalize":true,"minDiskFree":{"value":1,"unit":"%"},"versioning":{"type":"","params":{},"cleanupIntervalS":3600,"fsPath":"","fsType":"basic"},"copiers":0,"pullerMaxPendingKiB":0,"hashers":0,"order":"random","ignoreDelete":false,"scanProgressIntervalS":0,"pullerPauseS":0,"maxConflicts":0,"disableSparseFiles":false,"disableTempIndexes":false,"paused":false,"weakHashThresholdPct":25,"markerName":".stfolder","copyOwnershipFromParent":false,"modTimeWindowS":0,"maxConcurrentWrites":2,"disableFsync":false,"blockPullOrder":"standard","copyRangeMethod":"standard","caseSensitiveFS":false,"junctionsAsDirs":false,"syncOwnership":true,"sendOwnership":true,"syncXattrs":true,"sendXattrs":true,"xattrFilter":{"entries":[],"maxSingleEntrySize":1024,"maxTotalSize":4096}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":""}}}}}}},"/syncthing/config/defaults/folder":{"post":{"tags":["Syncthing"],"summary":"Replace the default folder config","description":"Replaces the template Syncthing applies to newly created folders. Send the JSON body as `text/plain`: the handler reads the raw stream, and with `Content-Type: application/json` the request never answers. **AdminAndFluxTeam**","operationId":"fluxSyncthingConfigDefaultsFolderPOST","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"method":{"type":"string","enum":["get","post","put","patch","delete"],"default":"put","description":"HTTP method used against Syncthing (`put` replaces the object, `patch` changes only the given fields)"},"config":{"type":"object","description":"The replacement configuration section"}}},"example":{"config":{"type":"sendreceive","rescanIntervalS":3600}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":{}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"}}}},"/syncthing/config/defaults/device":{"post":{"tags":["Syncthing"],"summary":"Replace the default device config","description":"Replaces the template Syncthing applies to newly added devices. Send the JSON body as `text/plain`: the handler reads the raw stream, and with `Content-Type: application/json` the request never answers. **AdminAndFluxTeam**","operationId":"fluxSyncthingConfigDefaultsDevicePOST","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"method":{"type":"string","enum":["get","post","put","patch","delete"],"default":"put","description":"HTTP method used against Syncthing (`put` replaces the object, `patch` changes only the given fields)"},"config":{"type":"object","description":"The replacement configuration section"}}},"example":{"config":{"compression":"metadata","introducer":false}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":{}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"}}}},"/syncthing/config/options":{"post":{"tags":["Syncthing"],"summary":"Replace the options config section","description":"Replaces the Syncthing options configuration section. Send the JSON body as `text/plain`: the handler reads the raw stream, and with `Content-Type: application/json` the request never answers. **AdminAndFluxTeam**","operationId":"fluxSyncthingConfigOptionsPOST","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"method":{"type":"string","enum":["get","post","put","patch","delete"],"default":"put","description":"HTTP method used against Syncthing (`put` replaces the object, `patch` changes only the given fields)"},"config":{"type":"object","description":"The replacement configuration section"}}},"example":{"config":{"globalAnnounceEnabled":true,"relaysEnabled":true}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":{}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"}}}},"/syncthing/config/gui":{"post":{"tags":["Syncthing"],"summary":"Replaces the entire gui object in config","description":"Replaces the entire gui object in config. **FluxTeam**","operationId":"fluxSyncthingConfigGuiPost","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"method":{"type":"string","enum":["get","post","put","patch","delete"],"default":"put","description":"HTTP method used against Syncthing (`put` replaces the object, `patch` changes only the given fields)"},"config":{"type":"object","properties":{"enabled":{"type":"boolean"},"address":{"type":"string","example":"127.0.0.1:8384"},"unixSocketPermissions":{"type":"string","example":""},"user":{"type":"string","example":""},"password":{"type":"string","example":""},"authMode":{"type":"string","example":"static"},"useTLS":{"type":"boolean","example":false},"apiKey":{"type":"string","example":"bpNaKvaT72C8hfrxgh52g2zmLU7s"},"insecureAdminAccess":{"type":"boolean","example":false},"theme":{"type":"string","example":"default"},"debugging":{"type":"boolean"},"insecureSkipHostcheck":{"type":"boolean"},"insecureAllowFrameLoading":{"type":"boolean"}}}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":""}}}}}}},"/syncthing/config/ldap":{"post":{"tags":["Syncthing"],"summary":"Replaces the entire ldap config object","description":"Replaces the entire ldap config object. Send the JSON body as `text/plain`: the handler reads the raw stream, and with `Content-Type: application/json` the request never answers. **AdminAndFluxTeam**","operationId":"fluxSyncthingConfigLdapPost","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"method":{"type":"string","enum":["get","post","put","patch","delete"],"default":"put","description":"HTTP method used against Syncthing (`put` replaces the object, `patch` changes only the given fields)"},"config":{"type":"object","properties":{"enabled":{"type":"boolean"},"address":{"type":"string","example":"127.0.0.1:8384"},"unixSocketPermissions":{"type":"string","example":""},"user":{"type":"string","example":""},"password":{"type":"string","example":""},"authMode":{"type":"string","example":"static"},"useTLS":{"type":"boolean","example":false},"apiKey":{"type":"string","example":"bpNaKvaT72C8hfrxgh52g2zmLU7s"},"insecureAdminAccess":{"type":"boolean","example":false},"theme":{"type":"string","example":"default"},"debugging":{"type":"boolean"},"insecureSkipHostcheck":{"type":"boolean"},"insecureAllowFrameLoading":{"type":"boolean"}}}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":{"address":"","bindDN":"","transport":"plain","insecureSkipVerify":false,"searchBaseDN":"","searchFilter":""}}}}}}}},"/syncthing/cluster/pending/devices":{"post":{"tags":["Syncthing"],"summary":"Remove records about a pending remote device which tried to connect","description":"Remove records about a pending remote device which tried to connect. Valid values for the device parameter are those from the corresponding GET /rest/cluster/pending/devices endpoint. Send the JSON body as `text/plain`: the handler reads the raw stream, and with `Content-Type: application/json` the request never answers. **AdminAndFluxTeam**","operationId":"fluxSyncthingPendingDevicesPOST","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"method":{"type":"string","enum":["get","post","put","patch","delete"],"default":"delete","description":"HTTP method used against Syncthing; `delete` (the default) removes the pending record"},"device":{"type":"string"}}},"example":{"device":"XHZAEFI-RFF7ATI-6LXKNWK-FCSD7FF-3URL6RN-OJQMS5T-EIDFDZX-R6QGYAZ"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":""}}}}}}},"/syncthing/cluster/pending/folders":{"post":{"tags":["Syncthing"],"summary":"Remove records about a pending folder announced from a remote device","description":"Remove records about a pending folder announced from a remote device. Valid values for the folde parameters are those from the corresponding GET /rest/cluster/pending/folders endpoint. Send the JSON body as `text/plain`: the handler reads the raw stream, and with `Content-Type: application/json` the request never answers. **AdminAndFluxTeam**","operationId":"fluxSyncthingPendingFoldersPOST","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"method":{"type":"string","enum":["get","post","put","patch","delete"],"default":"delete","description":"HTTP method used against Syncthing; `delete` (the default) removes the pending record"},"folder":{"type":"string"}}},"example":{"folder":"new-folder2"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":""}}}}}}},"/syncthing/folder/versions":{"post":{"tags":["Syncthing"],"summary":"Restore versioned files in a folder","description":"Restores files from a folder&#39;s version archive. `folder` names the folder and `method` selects the HTTP verb Syncthing is asked with (`post` by default). Send the JSON body as `text/plain`: the handler reads the raw stream, and with `Content-Type: application/json` the request never answers. **AdminAndFluxTeam**","operationId":"fluxSyncthingFolderVersionsPOST","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"config":{"type":"object","description":"The replacement configuration section"},"folder":{"type":"string","description":"Folder id to act on"},"method":{"type":"string","description":"HTTP method to use against Syncthing; `post` by default"}}},"example":{"folder":"fluxmycomponent_myapp","method":"post","config":{"docs/report.csv":"2026-09-01T09:14:00"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":{}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"}}}},"/syncthing/db/scan":{"post":{"tags":["Syncthing"],"summary":"Request immediate scan","description":"Request immediate scan. Takes the optional parameters ```folder``` (folder ID). Send the JSON body as `text/plain`: the handler reads the raw stream, and with `Content-Type: application/json` the request never answers. **AdminAndFluxTeam**","operationId":"fluxSyncthingDbScan","security":[{"FluxID":[]}],"requestBody":{"content":{"text/plain":{"schema":{"type":"object","properties":{"method":{"type":"string","enum":["get","post","put","patch","delete"],"default":"post","description":"HTTP method used against Syncthing"},"folder":{"type":"string","description":"folder"},"sub":{"type":"string","description":"Path relative to the folder root to scan"},"next":{"type":"integer","description":"Seconds until the next scheduled scan"}}},"example":{"folder":"fluxwp_wordpress1678382606717"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":""}}}}}}},"/syncthing/db/revert":{"post":{"tags":["Syncthing"],"summary":"Request revert of a receive only folder","description":"Request revert of a receive only folder. Reverting a folder means to undo all local changes. Send the JSON body as `text/plain`: the handler reads the raw stream, and with `Content-Type: application/json` the request never answers. **AdminAndFluxTeam**","operationId":"fluxSyncthingDbRevert","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"method":{"type":"string","enum":["get","post","put","patch","delete"],"default":"post","description":"HTTP method used against Syncthing"},"folder":{"type":"string","description":"folder"}}},"example":{"folder":"fluxwp_wordpress1678382606717"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":""}}}}}}},"/syncthing/db/prio":{"post":{"tags":["Syncthing"],"summary":"Moves the file to the top of the download queue","description":"Moves the file to the top of the download queue ```folder``` and ```file``` params are mandatory. Send the JSON body as `text/plain`: the handler reads the raw stream, and with `Content-Type: application/json` the request never answers. **AdminAndFluxTeam**","operationId":"fluxSyncthingDbPrio","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"method":{"type":"string","enum":["get","post","put","patch","delete"],"default":"post","description":"HTTP method used against Syncthing"},"folder":{"type":"string","description":"folder"},"file":{"type":"string","description":"File path within the folder (mandatory)"}}},"example":{"folder":"fluxwp_wordpress1678382606717","file":"/"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":{"page":1,"perpage":65536,"progress":[],"queued":[],"rest":[]}}}}}}}},"/syncthing/db/override":{"post":{"tags":["Syncthing"],"summary":"Request override of a send only folder","description":"Request override of a send only folder. Override means to make the local version latest, overriding changes made on other devices. This API call does nothing if the folder is not a send only folder. Takes the mandatory parameter ```folder``` (folder ID). Send the JSON body as `text/plain`: the handler reads the raw stream, and with `Content-Type: application/json` the request never answers. **AdminAndFluxTeam**","operationId":"fluxSyncthingDbOverride","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"method":{"type":"string","enum":["get","post","put","patch","delete"],"default":"post","description":"HTTP method used against Syncthing"},"folder":{"type":"string","description":"folder"}}},"example":{"folder":"fluxwp_wordpress1678382606717"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":""}}}}}}},"/syncthing/deviceid":{"get":{"tags":["Syncthing"],"summary":"Display deviceid","description":"Returns deviceid. **Public**","operationId":"fluxSyncthingDeviceID","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string"}}},"example":{"status":"success","data":"P56IOI7-MZJNU2Y-IQGDREY-DM2MGTI-MGL3BXN-PQ6W5BM-TBBZ4TJ-XZWICQ2"}}}}}}},"/apps/fluxshare/getfile":{"get":{"tags":["Fluxshare"],"summary":"Share files","description":"Downloads a file the node's operator left in the legacy FluxShare (ZelShare) folder. Read-only: FluxShare no longer accepts, shares or deletes files, and the share-token link is gone. **Admin**","operationId":"fluxShareFile","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"file","required":true,"schema":{"type":"string"},"description":"File name of share file to view or download. Can be nested in additional folder.","example":"5688d73c4e136d1e0ef33b600"}],"responses":{"200":{"description":"Share file to view/download","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"},"example":"Hello world"}}}}}},"/apps/fluxshare/getfolder":{"get":{"tags":["Fluxshare"],"summary":"FluxShare - Get folder content","description":"Call to get content of folder in fluxshare. **Admin**","operationId":"GetFolder","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"folder","required":false,"schema":{"type":"string"},"description":"Folder under the share root; the share root when omitted. A named folder that does not exist is an error; a node with no share folder at all answers an empty list.","example":"test"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Name of file"},"size":{"type":"integer","nullable":true,"description":"Size of file in bytes; null for a directory"},"isDirectory":{"type":"boolean","description":"True if item is directory"},"isFile":{"type":"boolean","description":"True if item is file"},"isSymbolicLink":{"type":"boolean","description":"True if item is symbolic link"},"createdAt":{"type":"string","description":"Create date of item"},"modifiedAt":{"type":"string","description":"Modifi date of item"}}}}}},"example":{"status":"success","data":[{"name":"b1fcb9da0a941468f2c8cde01.txt","size":119273,"isDirectory":false,"isFile":true,"isSymbolicLink":false,"createdAt":"2022-04-09T10:38:18.482Z","modifiedAt":"2022-04-09T10:38:18.562Z"}]}}}}}}},"/apps/listrunningapps":{"get":{"tags":["Apps"],"summary":"list running apps","description":"List of running app containers, each as `Names`, `State` and `Status` only. Also lists stopped containers of an app whose backup or restore is in progress. **Public**","operationId":"listRunningApps","security":[],"x-codeSamples":[{"lang":"curl","source":"curl -X GET \"https://api.runonflux.io/apps/listrunningapps\"\n"},{"lang":"JavaScript","source":"const response = await fetch('https://api.runonflux.io/apps/listrunningapps');\nconst apps = await response.json();\n\n// Display running apps\napps.data.forEach(app => {\n  console.log(`App: ${app.Names[0]} - Status: ${app.State}`);\n});\n"},{"lang":"Python","source":"import requests\n\nresponse = requests.get('https://api.runonflux.io/apps/listrunningapps')\napps_data = response.json()\n\nfor app in apps_data['data']:\n    print(f\"App: {app['Names'][0]} - Status: {app['State']}\")\n"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"Names":{"type":"array","items":{"type":"string"},"description":"Docker's container names, verbatim (e.g. `/fluxmycomponent_myapp`)"},"State":{"type":"string","description":"Docker's container state"},"Status":{"type":"string","description":"Docker's human-readable status"}}}}}},"example":{"status":"success","data":[{"Names":["/fluxFoldingAtHome"],"State":"running","Status":"Up 5 days"}]}}}}}}},"/apps/listallapps":{"get":{"tags":["Apps"],"summary":"list all apps","description":"List of every app container on this node, running or not, each as `Names`, `State` and `Status` only. **Public**","operationId":"listAllApps","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"Names":{"type":"array","items":{"type":"string"},"description":"Docker's container names, verbatim (e.g. `/fluxmycomponent_myapp`)"},"State":{"type":"string","description":"Docker's container state"},"Status":{"type":"string","description":"Docker's human-readable status"}}}}}},"example":{"status":"success","data":[{"Names":["/fluxFoldingAtHome"],"State":"running","Status":"Up 5 days"}]}}}}}}},"/apps/listappsimages":{"get":{"tags":["Apps"],"summary":"List of images","description":"List of apps images installed. **FluxTeam**","operationId":"listAppsImages","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"Containers":{"type":"integer","description":"Container number"},"Created":{"type":"integer","description":"Time created in epoch time"},"Id":{"type":"string","description":"Hash of image"},"Labels":{"type":"object","description":"User-defined key/value metadata","properties":{"description":{"type":"string","description":"Description of image"},"maintainer":{"type":"string","description":"Name of maintainer"},"repository":{"type":"string","description":"Url of repository"},"version":{"type":"number","description":"Version number"}}},"ParentId":{"type":"string","description":"Parent Id if available"},"RepoDigests":{"type":"array","items":{"type":"string","description":"Content addressable identifier"}},"RepoTags":{"type":"array","items":{"type":"string","description":"Repo tag name"}},"SharedSize":{"type":"integer","description":"Number of shared size"},"Size":{"type":"integer","description":"Size in bytes"},"VirtualSize":{"type":"integer","description":"Size in bytes"}}}}}},"example":{"status":"success","data":[{"Containers":-1,"Created":1588224617,"Id":"sha256:8bd1fb3dd2de02f8d4403c657da6a19efeef9286981537b30d2a107079018402","Labels":{"description":"Unofficial Folding@Home image for CPU compute","maintainer":"yurinnick","repository":"https://github.com/yurinnick/folding-at-home-docker","version":7.6}},{"ParentId":"","RepoDigests":["yurinnick/folding-at-home@sha256:da4a32a257883ce5b796482d0f82ec1d1f191056600eb490e1195a65f6100d6d"],"RepoTags":["yurinnick/folding-at-home:latest"],"SharedSize":-1,"Size":85515870,"VirtualSize":85515870}]}}}}}}},"/apps/installedapps":{"get":{"tags":["Apps"],"summary":"installed apps","description":"Info of installed apps. **Public**","operationId":"installedApps","security":[],"parameters":[{"in":"query","name":"appname","required":false,"schema":{"type":"string"},"description":"Restrict the listing to one application","example":"myapp"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string","description":"App id"},"repotag":{"type":"string","description":"Repository tag"},"name":{"type":"string","description":"Name of app"},"port":{"type":"integer","description":"Port number"},"cpu":{"type":"number","description":"CPU usage"},"ram":{"type":"integer","description":"Ram usage"},"hdd":{"type":"integer","description":"Disk usage"},"enviromentParameters":{"type":"array","items":{"type":"string","description":"Parameters"}},"commands":{"type":"array","items":{"type":"string","description":"Parameters"}},"containerPort":{"type":"integer","description":"Port number"},"containerData":{"type":"string","description":"Dir of container"}}}}}},"example":{"status":"success","data":[{"_id":"5ea5ded34640e92141c6ce35","repotag":"yurinnick/folding-at-home:latest","name":"fluxFoldingAtHome","port":30000,"cpu":0.5,"ram":500,"hdd":15,"enviromentParameters":["USERS=1MQetQGLuSmf6QVvYJFwuSR66WrU47G6NG","TEAM=262156","ENABLE_GPU=false","ENABLE_SMP=true"],"commands":["--allow","0/0","--web-allow","0/0"],"containerPort":7396,"containerData":"/config"}]}}}}}}},"/apps/availableapps":{"get":{"tags":["Apps"],"summary":"available apps","description":"Info of available apps. **Public**","operationId":"availableApps","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"App name/id"},"repotag":{"type":"string","description":"Repository tag"},"owner":{"type":"string","description":"User's id"},"timestamp":{"type":"integer","description":"Time stamp in epoch time"},"validTill":{"type":"integer","description":"Valid time in epoch time"},"tiered":{"type":"boolean","description":"Tier option"},"port":{"type":"integer","description":"Port number"},"cpu":{"type":"number","description":"CPU usage"},"ram":{"type":"integer","description":"Ram usage"},"hdd":{"type":"integer","description":"Disk usage"},"cpubasic":{"type":"string","description":"CPU usage"},"cpusuper":{"type":"string","description":"CPU usage"},"cpubamf":{"type":"string","description":"CPU usage"},"rambasic":{"type":"integer","description":"Ram usage"},"ramsuper":{"type":"integer","description":"Ram usage"},"rambamf":{"type":"integer","description":"Ram usage"},"hddbasic":{"type":"integer","description":"Disk usage"},"hddsuper":{"type":"integer","description":"Disk usage"},"hddbamf":{"type":"integer","description":"Disk usage"},"enviromentParameters":{"type":"array","items":{"type":"string","description":"Parameters"}},"commands":{"type":"array","items":{"type":"string","description":"Parameters"}},"containerPort":{"type":"integer","description":"Port number"},"containerData":{"type":"string","description":"Dir of container"},"signature":{"type":"string","description":"Signature"},"txid":{"type":"string","description":"Txid"}}}}}},"example":{"status":"success","data":[{"name":"fluxFoldingAtHome","repotag":"yurinnick/folding-at-home:latest","owner":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC","timestamp":1587181519000,"validTill":1608263119000,"tiered":true,"port":30000,"cpu":0.5,"ram":500,"hdd":15,"cpubasic":0.5,"cpusuper":1,"cpubamf":2,"rambasic":500,"ramsuper":1000,"rambamf":4000,"hddbasic":15,"hddsuper":15,"hddbamf":15,"enviromentParameters":["USERS=1MQetQGLuSmf6QVvYJFwuSR66WrU47G6NG","TEAM=262156","ENABLE_GPU=false","ENABLE_SMP=true"],"commands":["--allow","0/0","--web-allow","0/0"],"containerPort":7396,"containerData":"/config","signature":"todo","txid":"todo"}]}}}}}}},"/apps/fluxusage":{"get":{"tags":["Apps"],"summary":"Flux's usage","description":"Will return amount of cpu resource flux is using. **Public**","operationId":"FluxUsage","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"number","description":"Amount of cpu resource using"}}},"example":{"status":"success","data":0.20717773}}}}}}},"/apps/appsresources":{"get":{"tags":["Apps"],"summary":"Flux's usage of resources","description":"Will return data of resource flux is using. **Public**","operationId":"appsResources","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/appsresources"}}},"example":{"status":"success","data":{"appsCpusLocked":0,"appsRamLocked":0,"appsHddLocked":0}}}}}}}},"/apps/registrationinformation":{"get":{"tags":["Apps"],"summary":"Registration Info","description":"Apps registration info. **Public**","operationId":"registrationInformation","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"price":{"type":"object","description":"Price guide","properties":{"cpu":{"type":"integer","description":"FLUX amount per 0.1 cpu core"},"ram":{"type":"integer","description":"FLUX amount per 100 mb"},"hdd":{"type":"number","description":"FLUX amount per 1 gb"}}},"address":{"type":"string","description":"Apps registration address"},"epochstart":{"type":"integer","description":"Fluxapps epoch blockheight start"},"portMin":{"type":"integer","description":"Min number in port range"},"portMax":{"type":"integer","description":"Max number in port range"},"maxImageSize":{"type":"integer","description":"Max number of image size allowed in bytes"},"installation":{"type":"object","properties":{"probability":{"type":"integer","description":"Instances it will spawn this round"},"delay":{"type":"integer","description":"Delay time in seconds"}}},"removal":{"type":"object","properties":{"probability":{"type":"integer","description":"Instances it will remove if amount of apps exceed limit at a 1 out of 20 rate."},"delay":{"type":"integer","description":"Delay time in seconds"}}},"blocksLasting":{"type":"integer","description":"Amount of time registered app is live in blocks. 22000 blocks = 1 month"}}}}},"example":{"status":"success","data":{"price":{"cpu":15,"ram":5,"hdd":2.5},"address":"t1...","epochstart":690000,"portMin":31000,"portMax":39999,"maxImageSize":300000000,"installation":{"probability":2,"delay":120},"removal":{"probability":20,"delay":300},"blocksLasting":22000}}}}}}}},"/apps/temporarymessages":{"get":{"tags":["Apps"],"summary":"Temporary registration info","description":"Temporary registration info that will expire after 1 hour. **Public**","operationId":"getAppsTemporaryMessages","security":[],"parameters":[{"in":"query","name":"hash","required":false,"schema":{"type":"string"},"description":"Aplication hash","example":"e9293e7eebc51586e7b90557f924b70a766ab970c91a6c923520577021424cb9"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"appSpecifications":{"$ref":"#/components/schemas/appspecification"},"type":{"type":"string","description":"Message type"},"version":{"type":"integer","description":"Message version"},"hash":{"type":"string","description":"Message hash"},"timestamp":{"type":"integer","description":"Timestamp of message in epoch/unix"},"signature":{"type":"string","description":"Signature from signed message"},"receivedAt":{"type":"string","description":"Date and time of received message"},"expiredAt":{"type":"string","description":"Date and time when message expires"}}}}}},"example":{"status":"success","data":[{"appSpecifications":{"version":7,"name":"mexcdnxbot","description":"DNX trading bot","owner":"1DSBszWHPNs4MXwRdtV7wDLKDXRefzVYVi","compose":[{"name":"mexcdnxbot","description":"DNX trading bot","repotag":"botinflux/mexc-dnx-bot:latest","ports":[],"domains":[],"environmentParameters":["api_key=mx0vddeecVubo","secret_key=b5c0433de7b2c1105222667871","email_sender=cla23lans@gmail.com","email_receiver=clas23xclans@gmail.com","email_password=cjpv23pnjmuhl"],"commands":[],"containerPorts":[],"containerData":"/tmp","cpu":1,"ram":1000,"hdd":5,"tiered":false,"secrets":"","repoauth":""}],"instances":3,"contacts":["F_S_CONTACTS=https://storage.runonflux.io/v1/contacts/375596725336268"],"geolocation":["a!cAS_ID"],"expire":22000,"nodes":[],"staticip":false},"type":"fluxappregister","version":1,"hash":"11287d6b41cc35657d34e882678fbe8494a820e05eb006ef886512872fe28c98","timestamp":1692715746982,"signature":"Hw4G1u4APaVaw+ZX6qnpYJmHLZrQG/xK3w5WJ2efqTYSYUQUQdW2g6xsr1imi7F/YLybyOj3LQiByxVc7i40Ljk=","receivedAt":"2023-08-22T14:50:33.485Z","expireAt":"2023-08-22T15:50:33.485Z"}]}}}}}}},"/apps/permanentmessages":{"get":{"tags":["Apps"],"summary":"Permanent registration info","description":"Registration info of apps that have been stored to the database. **Public**","operationId":"getAppsPermanentMessages","security":[],"parameters":[{"in":"query","name":"hash","required":false,"schema":{"type":"string"},"description":"Application hash","example":"e9293e7eebc51586e7b90557f924b70a766ab970c91a6c923520577021424cb9"},{"in":"query","name":"owner","required":false,"schema":{"type":"string"},"description":"Application FluxID","example":"15Mt8ctAFTVVzsx9UynnqxgM5JJuiwMPhs"},{"in":"query","name":"appname","required":false,"schema":{"type":"string"},"description":"Application name","example":"FoldingAtFluxCloud1693167320638"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"Message type ```fluxappregister``` or ```fluxappupdate```"},"version":{"type":"integer","description":"Application specification message version, current 1"},"appSpecifications":{"$ref":"#/components/schemas/appspecification"},"hash":{"type":"string","description":"Message hash"},"timestamp":{"type":"integer","description":"Timestamp of message in epoch/unix"},"signature":{"type":"string","description":"Signature from signed message"},"txid":{"type":"string","description":"Transction ID of app payment"},"height":{"type":"integer","description":"Block height of transaction"},"valueSat":{"type":"integer","description":"Flux sat value of payment amount"}}}}}},"example":{"status":"success","data":[{"type":"fluxappupdate","version":1,"appSpecifications":{"version":7,"name":"HH1u","description":"HH1u","owner":"1xw845H9vKEjvcghMiYFy3htnBay7KpN9","compose":[{"name":"brit","description":"brit","repotag":"sandmanshiri/uni:2.0","ports":[38151,37234],"domains":["",""],"environmentParameters":["RP=Mhskap0737","RUP=Mhskap0737","NPU=40","prefix=MHssh20","udport=37234","limit=1","IP=2","SIN=1357"],"commands":[],"containerPorts":[22,37234],"containerData":"s:/home","cpu":0.1,"ram":100,"hdd":3,"tiered":false,"secrets":"","repoauth":""}],"instances":3,"contacts":[],"geolocation":["acEU_PT"],"expire":22000,"nodes":[],"staticip":false},"hash":"bab9b6d419316bebbe2a98d8b585377c8a10177f59e3032a3dafa536490ae46c","timestamp":1693123992018,"signature":"IJ3NFgmxOgsnTfYNLR7u/FlNmUKAaIdto6BmPCuse9p3cVUrNJA9Oj0xJmuMZJsawWv2t7Wv6hWQBQC2DHFRDeg=","txid":"0f2512106561e096193787d1fd35d97114ac85beb84fdf6b11cc7cb32bd85048","height":1456168,"valueSat":3000000},{"type":"fluxappregister","version":1,"appSpecifications":{"version":4,"name":"StreamrNode1693128754201","description":"The Streamr Broker Node hosted via the Flux Cloud","owner":"14N5LBR23NBxJVR4QLgyWnvSb2QmLHAjbL","compose":[{"name":"streamrbroker","description":"The Streamr Broker Node Container","repotag":"streamr/broker-node:latest","ports":[31111,31112,31113],"domains":["","",""],"environmentParameters":["STREAMR__BROKER__PLUGINS__BRUBECK_MINER__BENEFICIARY_ADDRESS=0x11D482E93b08cC46493BC88cf1770Cb91ec59A98"],"commands":[],"containerPorts":[1883,7170,7171],"containerData":"/home/streamr/.streamr","cpu":1,"ram":1000,"hdd":1,"tiered":false}],"instances":3},"hash":"e33205dcd24eed1957e6fd0a5913c7cc6972097f6a00ae72b929f9ffbe4c05c3","timestamp":1693128755202,"signature":"IE/O0HPxxuHKrKz/M6MF+MpVRZ6JyjFQzCSaubyMsjngSGRwuXdQvesauavlD4pWJE3HC0KAdEB0n/MT7h7fN7g=","txid":"8087dfb4a99d9c6984ded97a3ea2b500833f981b8fc35d96ed339363c2bd77be","height":1456206,"valueSat":599000000}]}}}}}}},"/apps/globalappsspecifications":{"get":{"tags":["Apps"],"summary":"Global app specs","description":"List of global app specifications. **Public**","operationId":"getGlobalAppsSpecifications","security":[],"parameters":[{"in":"query","name":"hash","required":false,"schema":{"type":"string"},"description":"Filter by the application message hash","example":"8f14e45fceea167a5a36dedd4bea2543"},{"in":"query","name":"owner","required":false,"schema":{"type":"string"},"description":"Filter by owner FluxID","example":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC"},{"in":"query","name":"appname","required":false,"schema":{"type":"string"},"description":"Filter by application name","example":"myapp"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object"}}}},"example":{"status":"success","data":[{"name":"FoldingAtFluxCloud1692691337989","compose":[{"name":"FoldingAtHome","description":"Folding @ Home for AMD64 Devices.","repotag":"yurinnick/folding-at-home:latest","ports":[35555],"domains":[""],"environmentParameters":["TEAM=222256","USER=stam342kara"],"commands":[],"containerPorts":[7396],"containerData":"/config","cpu":1,"ram":700,"hdd":3,"tiered":false}],"description":"PoUW at Flux layer 2 network. Folding@home is a project focused on disease research. Client Visit was disabled, to check Run On Flux team stats go to https://stats.foldingathome.org/team/262156","hash":"05477aab02112b1db73a83ecee18d04a6933efddff80433c1ac10abf611ec9f1","height":1452583,"instances":3,"owner":"1CS3fDTSkyJhsAST6xoeG4VG8ReWtuYhju","version":4},{"name":"StreamrNode1692696525963","compose":[{"name":"streamrbroker","description":"The Streamr Broker Node Container","repotag":"streamr/broker-node:latest","ports":[31111,31112,31113],"domains":["","",""],"environmentParameters":["STREAMR__BROKER__PLUGINS__BRUBECK_MINER__BENEFICIARY_ADDRESS=0xc60FA67aFd5A4332214D483b4Ff8E2993C8e3999"],"commands":[],"containerPorts":[1883,7170,7171],"containerData":"/home/streamr/.streamr","cpu":1,"ram":1000,"hdd":1,"tiered":false}],"description":"The Streamr Broker Node hosted via the Flux Cloud","hash":"f647632c17c17a8feb7b8f39cc33eb9d0cde448d93ca8a251dab54dbee970638","height":1452619,"instances":3,"owner":"1MhgaXdkNTqxvxxMBBWqmxvWTCRZ1kBYUQ","version":4},{"name":"mexcdnxbot","compose":[{"name":"mexcdnxbot","description":"DNX trading bot","repotag":"botinflux/mexc-dnx-bot:latest","ports":[],"domains":[],"environmentParameters":["F_S_ENV=https://storage.runonflux.io/v1/env/920423489107913"],"commands":[],"containerPorts":[],"containerData":"/tmp","cpu":1,"ram":1000,"hdd":5,"tiered":false,"secrets":"","repoauth":""}],"contacts":["F_S_CONTACTS=https://storage.runonflux.io/v1/contacts/375596725336268"],"description":"DNX trading bot","expire":22000,"geolocation":["a!cAS_ID_NONE"],"hash":"b9f3040c63ba8820acddcff5e503e8047a5c603ed734bb9bac953dcdc04ee33c","height":1452806,"instances":3,"nodes":[],"owner":"1DSBszWHPNs4MXwRdtV7wDLKDXRefzVYVi","staticip":false,"version":7}]}}}}}}},"/apps/appspecifications/{appname}":{"get":{"tags":["Apps"],"summary":"Global app specs of app specified","description":"Returns the specifications of the queried application.\n\nFor an **enterprise application** (specification version 8 or above with `enterprise` set) the `compose` and `contacts` fields are always returned empty. With `decrypt`, which requires the application owner's authentication and an `enterprise-key` header, the owner receives `enterprise` re-encrypted to the session key from that header. Refused while the daemon is not synced. **Public** (decrypted view: **AppOwner**)","operationId":"getApplicationSpecificationAPI","security":[],"parameters":[{"in":"path","name":"appname","required":true,"schema":{"type":"string"},"description":"Application name","example":"mexcdnxbot"},{"in":"query","name":"decrypt","required":false,"schema":{"type":"string"},"description":"Any non-empty value requests the owner view of an enterprise application (decrypt=false requests it too — omit the parameter for the public view). Also accepted as a second path segment.","example":"true"},{"in":"header","name":"enterprise-key","required":false,"schema":{"type":"string"},"description":"Required with `decrypt` — the session key the returned `enterprise` field is encrypted to."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/appname"}}},"example":{"status":"success","data":{"name":"mexcdnxbot","compose":[{"name":"mexcdnxbot","description":"DNX trading bot","repotag":"botinflux/mexc-dnx-bot:latest","ports":[],"domains":[],"environmentParameters":["F_S_ENV=https://storage.runonflux.io/v1/env/920423489107913"],"commands":[],"containerPorts":[],"containerData":"/tmp","cpu":1,"ram":1000,"hdd":5,"tiered":false,"secrets":"","repoauth":""}],"contacts":["F_S_CONTACTS=https://storage.runonflux.io/v1/contacts/375596725336268"],"description":"DNX trading bot","expire":22000,"geolocation":["a!cAS_ID_NONE"],"hash":"b9f3040c63ba8820acddcff5e503e8047a5c603ed734bb9bac953dcdc04ee33c","height":1452806,"instances":3,"nodes":[],"owner":"1DSBszWHPNs4MXwRdtV7wDLKDXRefzVYVi","staticip":false,"version":7}}}}}}}},"/apps/appowner":{"get":{"tags":["Apps"],"summary":"App owner's FluxID","description":"This will return the FluxID of the owner of the app specified. **Public**","operationId":"getApplicationOwnerAPI","security":[],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Appname","example":"CryptPadOnFlux"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"App owner's FluxID"}}},"example":{"status":"success","data":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC"}}}}}}},"/apps/hashes":{"get":{"tags":["Apps"],"summary":"Application Hash info","description":"Get list of app hashes and related info. **Public**","operationId":"getAppHashes","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"txid":{"type":"string","description":"Transaction ID of app payment"},"height":{"type":"integer","description":"Block height of transaction"},"hash":{"type":"string","description":"Hash of app registration"},"value":{"type":"integer","description":"Payment of Flux value in sats"},"message":{"type":"boolean","description":"If message is stored or not."}}}}}},"example":{"status":"success","data":[{"txid":"885f11f8a44cf1ac9673fb5c745688a95715295e3c3d0d69517a17ab652f8780","height":645719,"hash":"b44f1efe7bffc48b62d230f57341ce7fa193b71780491c1bc53c53e502e08d23","value":2800000000,"message":true},{"txid":"91b36e75d0d08640656448de469ff10876dbad3923860b47c1f57a10ab99359f","height":645757,"hash":"c9a1a06bc0ff4786607dff32df4b820aedd5e3ca9803fbb29bb0ffb10e170e42","value":4500000000,"message":true}]}}}}}}},"/apps/location":{"get":{"tags":["Apps"],"summary":"Info regarding app location","description":"This will return data regarding the location of app specified. **Public**","operationId":"getAppsLocation","security":[],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Appname","example":"electrumxtest"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/appslocation"}}},"example":{"status":"success","data":[{"ip":"62.171.163.150","name":"electrumxtest","broadcastedAt":"020-09-19T09:04:56.638Z","expireAt":"2020-09-19T10:09:56.638Z","hash":"6055e9bef2fbd01c3561c4c1f87ba816921b51b6012d76a2f2b78efe8d3a0f8e"},{"ip":"116.203.253.186","name":"electrumxtest","broadcastedAt":"2020-09-19T09:05:09.069Z","expireAt":"2020-09-19T10:10:09.069Z","hash":"6055e9bef2fbd01c3561c4c1f87ba816921b51b6012d76a2f2b78efe8d3a0f8e"}]}}}}}}},"/apps/locations":{"get":{"tags":["Apps"],"summary":"List of app locations","description":"This will return a list of known apps on the network and it's locations data. **Public**","operationId":"getAppsLocations","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/appslocation"}}},"example":{"status":"success","data":[{"ip":"62.171.163.150","name":"electrumxtest","broadcastedAt":"020-09-19T09:04:56.638Z","expireAt":"2020-09-19T10:09:56.638Z","hash":"6055e9bef2fbd01c3561c4c1f87ba816921b51b6012d76a2f2b78efe8d3a0f8e"},{"ip":"116.203.253.186","name":"dibi-UND","broadcastedAt":"2020-09-19T09:24:50.590Z","expireAt":"2020-09-19T10:29:50.590Z","hash":"ahashofappmessage"},{"ip":"62.171.163.150","name":"PacMan","broadcastedAt":"2020-09-19T09:25:02.568Z","expireAt":"2020-09-19T10:30:02.568Z","hash":"818da1ce6a32ed85d02a3e784fbbd0fd21709a4108bdc5d1f6cbc474559cfa7c"},{"ip":"161.35.41.11","name":"FoldingAtHomeB","broadcastedAt":"2020-09-19T09:24:12.428Z","expireAt":"2020-09-19T10:29:12.428Z","hash":"ahashofappmessage"}]}}}}}}},"/apps/calculateprice":{"post":{"tags":["Apps"],"summary":"Calculate price of app","description":"**DEPRECATED**: To get app price. Should be used getAppFiatAndFluxPrice method instead. Calculate price by sending request with specs required for app you are registering. **Public**\nNote: If tiered value is set to true you will also need to add the following key/value pairs\n- `cpubasic: <n value of cpu core>`, `cpusuper: <n value of cpu core>`, `cpubamf: <n value of cpu core>`, `rambasic: <n value in mb>`, `ramsuper: <n value in mb>`, `rambamf: <n value in mb>`, `hddbasic: <n value in gb>`, `hddsuper: <n value in gb>`, `hddbamf: <n value in gb>`","operationId":"getAppPrice","security":[],"deprecated":true,"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"version":{"type":"integer","description":"Version of message which is 7"},"name":{"type":"string","description":"Name of app"},"description":{"type":"string","description":"Description of app"},"owner":{"type":"string","description":"Your FluxID"},"compose":{"type":"array","items":{"type":"object","description":"component specification","properties":{"name":{"type":"string","description":"Name of app"},"description":{"type":"string","description":"Description of component"},"repotag":{"type":"string","description":"Repotag of docker image in this format `namespace/repository:tag`"},"ports":{"type":"array","items":{"type":"integer","description":"Ports list"}},"domains":{"type":"array","items":{"type":"string","description":"Domain list"}},"enviromentParameters":{"type":"array","items":{"type":"string","description":"Environment variables"}},"commands":{"type":"array","items":{"type":"string","description":"Execution list"}},"containerPorts":{"type":"array","items":{"type":"integer","description":"Container ports"}},"containerData":{"type":"string","description":"Directory the data is stored and what dir is tied to the system folder"},"cpu":{"type":"number","description":"CPU amount requesting"},"ram":{"type":"integer","description":"Ram amount requesting in MB"},"hdd":{"type":"integer","description":"Storage space requesting in GB"},"tiered":{"type":"boolean","description":"If set to true you will also need following key/value pairs to provide tiered info. If false do not add the following key/value pairs."},"cpubasic":{"type":"number","description":"CPU amount"},"cpusuper":{"type":"number","description":"CPU amount"},"cpubamf":{"type":"number","description":"CPU amount"},"rambasic":{"type":"integer","description":"Ram amount in MB"},"ramsuper":{"type":"integer","description":"Ram amount in MB"},"rambamf":{"type":"integer","description":"Ram amount in MB"},"hddbasic":{"type":"integer","description":"Storage space in GB"},"hddsuper":{"type":"integer","description":"Storage space in GB"},"hddbamf":{"type":"integer","description":"Storage space in GB"},"secrets":{"type":"string","description":"Array of strings of Secret Environmental Parameters. This will be encrypted and accessible to selected Enterprise Nodes only."},"repoauth":{"type":"string","description":"Docker image authentication for private images in the format of username:apikey. This field will be encrypted and accessible to selected Enterprise Nodes only."}}}},"instances":{"type":"integer","description":"Instances number"},"contacts":{"type":"array","items":{"type":"string","description":"Mail list"}},"geolocation":{"type":"array","items":{"type":"string","description":"Geolocation symbols"}},"expire":{"type":"integer","description":"Number of blocks after apps expire"},"nodes":{"type":"array","items":{"type":"string","description":"Enterprise Nodes IP list"}},"staticip":{"type":"boolean","description":"If set to true apps will be installed of nodes with static IP only."}}},"example":{"version":7,"name":"blockbookneurai","description":"Blockbook for Neurai","owner":"1XcNTEsgVND4eb3bsVa2bjktnZZSruVct","compose":[{"name":"blockbookneurai","description":"Blockbook for Neurai","repotag":"runonflux/blockbook-docker:latest","ports":[38382,38383],"domains":["",""],"environmentParameters":[],"commands":[],"containerPorts":[9199,1337],"containerData":"/root","cpu":2.5,"ram":5000,"hdd":40,"tiered":false,"secrets":"","repoauth":""}],"instances":3,"contacts":[],"geolocation":[],"expire":22000,"nodes":[],"staticip":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"FLUX amount"}}},"example":{"status":"success","data":1.6}}}}}}},"/apps/calculatefiatandfluxprice":{"post":{"tags":["Apps"],"summary":"Calculate price of app","description":"Calculate price by sending request with specs required for app you are registering. The USD price is rounded up to the next figure ending in .49 or .99, and the Flux price follows from it. A caller may send `priceUSD`: it is returned exactly as sent, and refused if below the computed price. Synced (g:) applications pay the full price. **Public**\nNote: If tiered value is set to true you will also need to add the following key/value pairs\n- `cpubasic: <n value of cpu core>`, `cpusuper: <n value of cpu core>`, `cpubamf: <n value of cpu core>`, `rambasic: <n value in mb>`, `ramsuper: <n value in mb>`, `rambamf: <n value in mb>`, `hddbasic: <n value in gb>`, `hddsuper: <n value in gb>`, `hddbamf: <n value in gb>`","operationId":"getAppPriceNew","security":[],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"version":{"type":"integer","description":"Version of message which is 7"},"name":{"type":"string","description":"Name of app"},"description":{"type":"string","description":"Description of app"},"owner":{"type":"string","description":"Your FluxID"},"compose":{"type":"array","items":{"type":"object","description":"component specification","properties":{"name":{"type":"string","description":"Name of app"},"description":{"type":"string","description":"Description of component"},"repotag":{"type":"string","description":"Repotag of docker image in this format `namespace/repository:tag`"},"ports":{"type":"array","items":{"type":"integer","description":"Ports list"}},"domains":{"type":"array","items":{"type":"string","description":"Domain list"}},"enviromentParameters":{"type":"array","items":{"type":"string","description":"Environment variables"}},"commands":{"type":"array","items":{"type":"string","description":"Execution list"}},"containerPorts":{"type":"array","items":{"type":"integer","description":"Container ports"}},"containerData":{"type":"string","description":"Directory the data is stored and what dir is tied to the system folder"},"cpu":{"type":"number","description":"CPU amount requesting"},"ram":{"type":"integer","description":"Ram amount requesting in MB"},"hdd":{"type":"integer","description":"Storage space requesting in GB"},"tiered":{"type":"boolean","description":"If set to true you will also need following key/value pairs to provide tiered info. If false do not add the following key/value pairs."},"cpubasic":{"type":"number","description":"CPU amount"},"cpusuper":{"type":"number","description":"CPU amount"},"cpubamf":{"type":"number","description":"CPU amount"},"rambasic":{"type":"integer","description":"Ram amount in MB"},"ramsuper":{"type":"integer","description":"Ram amount in MB"},"rambamf":{"type":"integer","description":"Ram amount in MB"},"hddbasic":{"type":"integer","description":"Storage space in GB"},"hddsuper":{"type":"integer","description":"Storage space in GB"},"hddbamf":{"type":"integer","description":"Storage space in GB"},"secrets":{"type":"string","description":"Array of strings of Secret Environmental Parameters. This will be encrypted and accessible to selected Enterprise Nodes only."},"repoauth":{"type":"string","description":"Docker image authentication for private images in the format of username:apikey. This field will be encrypted and accessible to selected Enterprise Nodes only."}}}},"instances":{"type":"integer","description":"Instances number"},"contacts":{"type":"array","items":{"type":"string","description":"Mail list"}},"geolocation":{"type":"array","items":{"type":"string","description":"Geolocation symbols"}},"expire":{"type":"integer","description":"Number of blocks after apps expire"},"nodes":{"type":"array","items":{"type":"string","description":"Enterprise Nodes IP list"}},"staticip":{"type":"boolean","description":"If set to true apps will be installed of nodes with static IP only."}}},"example":{"version":7,"name":"blockbookneurai","description":"Blockbook for Neurai","owner":"1XcNTEsgVND4eb3bsVa2bjktnZZSruVct","compose":[{"name":"blockbookneurai","description":"Blockbook for Neurai","repotag":"runonflux/blockbook-docker:latest","ports":[38382,38383],"domains":["",""],"environmentParameters":[],"commands":[],"containerPorts":[9199,1337],"containerData":"/root","cpu":2.5,"ram":5000,"hdd":40,"tiered":false,"secrets":"","repoauth":""}],"instances":3,"contacts":[],"geolocation":[],"expire":22000,"nodes":[],"staticip":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"usd":{"type":"number","description":"Price in USD"},"flux":{"type":"number","description":"Price in FLUX"},"fluxDiscount":{"description":"Percent discount for paying in FLUX, or a note when it cannot be defined"}}}}},"example":{"status":"success","data":{"usd":7.49,"flux":4.73,"fluxDiscount":10}}}}}}}},"/apps/appstart":{"get":{"tags":["Apps"],"summary":"Starts app","description":"This will start the fluxapp. **AppOwnerAbove**","operationId":"AppStart","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Application name, or component_app","example":"myapp"},{"in":"query","name":"global","required":false,"schema":{"type":"boolean"},"description":"Apply on every node the application runs on, rather than only this one","example":false}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Explanation of status"}}},"example":{"status":"success","data":"Application myapp started"}}}}}}},"/apps/appstop":{"get":{"tags":["Apps"],"summary":"Stops app","description":"This will stop the Flux application. **AppOwnerAbove**","operationId":"AppStop","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Application name, or component_app","example":"myapp"},{"in":"query","name":"global","required":false,"schema":{"type":"boolean"},"description":"Apply on every node the application runs on, rather than only this one","example":false}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Explanation of status"}}},"example":{"status":"success","data":"Application myapp stopped"}}}}}}},"/apps/apprestart":{"get":{"tags":["Apps"],"summary":"Restarts app","description":"This will restart the Flux application. **AppOwnerAbove**","operationId":"AppRestart","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Application name, or component_app","example":"myapp"},{"in":"query","name":"global","required":false,"schema":{"type":"boolean"},"description":"Apply on every node the application runs on, rather than only this one","example":false}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Explanation of status"}}},"example":{"status":"success","data":"Application myapp restarted"}}}}}}},"/apps/apppause":{"get":{"tags":["Apps"],"summary":"Pause app","description":"**Removed.** Pausing applications is no longer supported and this endpoint always answers **HTTP 200** with `status: error` and `data.code: 410` — `Pausing applications is no longer supported. Use appstop to stop an application.` Use `GET /apps/appstop` instead. When `appname` is given the caller is still authorised before the refusal is returned. **AppOwnerAbove**","operationId":"appsAppPause","deprecated":true,"security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":false,"schema":{"type":"string"},"description":"Application name, or component_app","example":"myapp"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"error","data":{"code":410,"name":"Deprecated","message":"Pausing applications is no longer supported. Use appstop to stop an application."}}}}}}}},"/apps/appunpause":{"get":{"tags":["Apps"],"summary":"Unpause app","description":"**Removed.** Pausing applications is no longer supported and this endpoint always answers **HTTP 200** with `status: error` and `data.code: 410`. Use `GET /apps/appstart` to start a stopped application. **AppOwnerAbove**","operationId":"AppUnpause","deprecated":true,"security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":false,"schema":{"type":"string"},"description":"Application name, or component_app","example":"myapp"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"error","data":{"code":410,"name":"Deprecated","message":"Pausing applications is no longer supported. Use appstop to stop an application."}}}}}}}},"/apps/apptop":{"get":{"tags":["Apps"],"summary":"List of running processes","description":"Display the running processes of a container. **AppOwnerAbove**","operationId":"AppTop","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Application name, or component_app","example":"myapp"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"processes":{"type":"array","items":{"type":"string","description":"Each process running in the container, where each is process is an array of values corresponding to the titles"}},"Titles":{"type":"array","items":{"type":"string","description":"The ps column titles"}}}}}},"example":{"status":"success","data":{"Processes":[[999,22001,21971,0,1123,"?","00:00:00","/bin/bash /opt/fahclient/entrypoint.sh --allow 0/0 --web-allow 0/0"],[999,22069,22001,0,1123,"?","00:00:01","/opt/fahclient/FAHClient --user=1CcoEkKQZcwUXPSps4bZJDjUM3mqe9bNXf --team=262156 --passkey= --gpu=false --smp=true --power=full --gui-enabled=false --allow 0/0 --web-allow 0/0"],[999,22085,22081,5,1123,"?","/opt/fahclient/cores/cores.foldingathome.org/v7/lin/64bit/avx/Core_a7.fah/FahCore_a7 -dir 00 -suffix 01 -version 706 -lifeline 15 -checkpoint 15 -np 2"]],"Titles":["UID","PID","PPID","C","STIME","TTY","TIME","CMD"]}}}}}}}},"/apps/applog":{"get":{"tags":["Apps"],"summary":"App's log","description":"This will fetch the logs of a fluxapp. **AppOwnerAbove**","operationId":"AppLogs","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Application name, or component_app","example":"myapp"},{"in":"query","name":"lines","required":false,"schema":{"oneOf":[{"type":"integer","description":"Number of lines to return"},{"type":"string","description":"Use all for full log (the default)"}]},"example":30}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"App's log"}}},"example":{"status":"success","data":"21:12:16:****************************** FAHClient ******************************\n21:12:16:    Version: 7.6.9\n21:12:16:     Author: Joseph Coffland <joseph@cauldrondevelopment.com>\n21:12:16:  Copyright: 2020 foldingathome.org\n21:12:16:   Homepage: https://foldingathome.org/\n21:12:16:       Date: Apr 17 2020\n21:12:16:       Time: 18:11:26\n21:12:16:   Revision: 398c2b17fa535e0cc6c9d10856b2154c32771646\n21:12:16:     Branch: master\n21:12:16:   Compiler: GNU 8.3.0\n21:12:16:    Options: -std=c++11 -ffunction-sections -fdata-sections -O3 -funroll-loops\n21:12:16:             -fno-pie\n21:12:16:   Platform: linux2 4.19.0-5-amd64\n21:12:16:       Bits: 64\n21:12:16:       Mode: Release\n21:12:16:       Args: --user=1CcoEkKQZcwUXPSps4bZJDjUM3mqe9bNXf --team=262156 --passkey=\n21:12:16:             --gpu=false --smp=true --power=full --gui-enabled=false --allow 0/0\n21:12:16:             --web-allow 0/0\n21:12:16:******************************** CBang ********************************\n21:12:16:       Date: Apr 17 2020\n21:12:16:       Time: 18:10:13\n21:12:16:   Revision: 2fb0be7809c5e45287a122ca5fbc15b5ae859a3b\n21:12:16:     Branch: master\n21:12:16:   Compiler: GNU 8.3.0\n21:12:16:    Options: -std=c++11 -ffunction-sections -fdata-sections -O3 -funroll-loops\n21:12:16:             -fno-pie -fPIC\n21:12:16:   Platform: linux2 4.19.0-5-amd64\n21:12:16:       Bits: 64\n21:12:16:       Mode: Release\n21:12:16:******************************* System ********************************"}}}}}}},"/apps/appinspect":{"get":{"tags":["Apps"],"summary":"Info of the app","description":"Displays detailed info of the container. **AppOwnerAbove**","operationId":"AppInspect","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Application name, or component_app","example":"myapp"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"Id":{"type":"string","description":"ID of the container"},"Created":{"type":"string","description":"Date and time when container was created"},"Path":{"type":"string","description":"Script path"},"Args":{"type":"array","items":{"type":"string","description":"Runtime arguments"}},"State":{"type":"object","properties":{"Status":{"type":"string","description":"State/status of container"},"Running":{"type":"boolean","description":"Is container running"},"Paused":{"type":"boolean","description":"Is container paused"},"Restarting":{"type":"boolean","description":"Is container restarting"},"OOMKilled":{"type":"boolean","description":"Has memory limit exceeded on container"},"Dead":{"type":"boolean","description":"Is container dead"},"Pid":{"type":"integer","description":"Process id"},"ExitCode":{"type":"integer","description":"Exitcode number"},"Error":{"type":"string","description":"Description of errors"},"StartedAt":{"type":"string","description":"Start date and time"},"FinishedAt":{"type":"string","description":"Finished date and time"}}},"Image":{"type":"string","description":"Image id"},"ResolvConfPath":{"type":"string","description":"Path of containers resolv.conf"},"HostnamePath":{"type":"string","description":"Path of containers hostname"},"HostsPath":{"type":"string","description":"Path of hosts"},"LogPath":{"type":"string","description":"Path of log"},"Name":{"type":"string","description":"Container name"},"RestartCount":{"type":"integer","description":"Number of restarts"},"Driver":{"type":"string","description":"Storage driver type"},"Platform":{"type":"string","description":"OS type"},"MountLabel":{"type":"string","description":"Container mount label"},"ProcessLabel":{"type":"string","description":"Container process label"},"AppArmorProfile":{"type":"string","description":"Application Armor profile"},"ExecIDs":{"type":"string","description":"Exec ids of commands"},"HostConfig":{"type":"object","properties":{"Binds":{"type":"array","items":{"type":"string","description":"Path to bind directory"}},"ContainerIDFile":{"type":"string","description":"File id"},"LogConfig":{"type":"object","properties":{"Type":{"type":"string","description":"Log file format type"},"Config":{"type":"object","description":"Configuration"}}},"NetworkMode":{"type":"string","description":"Network mode"},"PortBindings":{"type":"object","properties":{"7396/tcp":{"type":"array","items":{"type":"object","properties":{"HostIp":{"type":"string","description":"Ip of host"},"HostPort":{"type":"integer","description":"Port number"}}}}}},"RestartPolicy":{"type":"object","properties":{"Name":{"type":"string","description":"Policy name"},"MaximumRetryCount":{"type":"integer","description":"Max numbers of restarts"}}},"AutoRemove":{"type":"boolean","description":"Is autoremove feature on"},"VolumeDriver":{"type":"string","description":"Optional volume driver for the container"},"VolumesFrom":{"type":"string","description":"Mount volumes from the specified container"},"CapAdd":{"type":"string","description":"Add Linux capabilities"},"CapDrop":{"type":"string","description":"Drop Linux capabilities"},"Capabilities":{"type":"string","description":"OS capabilities"},"Dns":{"type":"string","description":"Set custom DNS servers"},"DnsOptions":{"type":"string","description":"Set DNS options"},"DnsSearch":{"type":"string","description":"Set custom DNS search domains"},"ExtraHosts":{"type":"string","description":"Extra hosts"},"GroupAdd":{"type":"string","description":"Add additional groups to join"},"IpcMode":{"type":"string","description":"IPC mode to use"},"Cgroup":{"type":"string","description":"Cgroup for the container"},"Links":{"type":"string","description":"Links to another container"},"OomScoreAdj":{"type":"integer","description":"Tune host's OOM preferences (-1000 to 1000)"},"PidMode":{"type":"string","description":"Pid to use"},"Privileged":{"type":"boolean","description":"Extended privileges to this container"},"PublishAllPorts":{"type":"boolean","description":"Publish all exposed ports to random ports"},"ReadonlyRootfs":{"type":"boolean","description":"Mount the container’s root filesystem as read only"},"SecurityOpt":{"type":"string","description":"Security Options"},"UTSMode":{"type":"string","description":"UTS namespace to use"},"UsernsMode":{"type":"string","description":"Sets the usernamespace mode for the container when usernamespace remapping option is enabled"},"ShmSize":{"type":"integer","description":"Size of /dev/shm"},"Runtime":{"type":"string","description":"Runtime to use for this container"},"ConsoleSize":{"type":"array","items":{"type":"string","description":"Initial console size, as an [height, width] array. (Windows only)"}},"Isolation":{"type":"string","description":"Isolation technology of the container. (Windows only)"},"CpuShares":{"type":"integer","description":"Value containing the container's CPU Shares"},"Memory":{"type":"integer","description":"Memory limit in bytes"},"NanoCpus":{"type":"integer","description":"CPU quota in units of 10<sup>-9</sup> CPUs"},"CgroupParent":{"type":"string","description":"Path to cgroups under which the container's cgroup is created"},"BlkioWeight":{"type":"number","description":"Block IO weight (relative weight)"},"BlkioWeightDevice":{"type":"string","description":"Block IO weight (relative device weight)"},"BlkioDeviceReadBps":{"type":"string","description":"Limit read rate (bytes per second)"},"BlkioDeviceWriteBps":{"type":"string","description":"Limit write rate (bytes per second)"},"BlkioDeviceReadIOps":{"type":"string","description":"Limit read rate (IO per second)"},"BlkioDeviceWriteIOps":{"type":"string","description":"Limit write rate (IO per second)"},"CpuPeriod":{"type":"integer","description":"The length of a CPU period in microseconds"},"CpuQuota":{"type":"integer","description":"Microseconds of CPU time that the container can get in a CPU period"},"CpuRealtimePeriod":{"type":"integer","description":"CPU real-time period limit in microseconds"},"CpuRealtimeRuntime":{"type":"integer","description":"CPU real-time runtime limit in microseconds"},"CpusetCpus":{"type":"string","description":"CPUs in which to allow execution"},"CpusetMems":{"type":"string","description":"Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems"},"Devices":{"type":"string","description":"A list of devices to add to the container"},"DeviceCgroupRules":{"type":"string","description":"A list of cgroup rules to apply to the container"},"DeviceRequests":{"type":"string","description":"A list of requests for devices to be sent to device drivers"},"KernelMemory":{"type":"integer","description":"Kernel memory limit"},"KernelMemoryTCP":{"type":"integer","description":"Hard limit for kernel TCP buffer memory (in bytes)"},"MemoryReservation":{"type":"integer","description":"Memory soft limit in bytes"},"MemorySwap":{"type":"integer","description":"Swap limit equal to memory plus swap: -1 to enable unlimited swap"},"MemorySwappiness":{"type":"string","description":"Container's memory swappiness behavior"},"OomKillDisable":{"type":"boolean","description":"Whether to disable OOM Killer for the container or not"},"PidsLimit":{"type":"integer","description":"Container's pids limit. Set -1 for unlimited."},"Ulimits":{"type":"array","items":{"type":"object","description":"A list of resource limits to set in the container","properties":{"Name":{"type":"string"},"Hard":{"type":"integer"},"Soft":{"type":"integer"}}}},"CpuCount":{"type":"integer","description":"The number of usable CPUs (Windows only)"},"CpuPercent":{"type":"integer","description":"The usable percentage of the available CPUs (Windows only)"},"IOMaximumIOps":{"type":"integer","description":"Maximum IOps for the container system drive (Windows only)"},"IOMaximumBandwidth":{"type":"integer","description":"Maximum IO in bytes per second for the container system drive"},"MaskedPaths":{"type":"array","items":{"type":"string","description":"The list of paths to be masked inside the container"}},"ReadonlyPaths":{"type":"array","items":{"type":"string","description":"The list of paths to be set as read-only inside the container"}}}},"GraphDriver":{"type":"object","description":"Information about a container's graph driver","properties":{"Data":{"type":"object","properties":{"LowerDir":{"type":"string"},"MergedDir":{"type":"string"},"UpperDir":{"type":"string"},"WorkDir":{"type":"string"}}},"Name":{"type":"string"}}},"Mounts":{"$ref":"#/components/schemas/mounts"},"Config":{"type":"object","properties":{"Hostname":{"type":"string","description":"The hostname to use for the container, as a valid RFC 1123 hostname"},"Domainname":{"type":"string","description":"The domain name to use for the container"},"User":{"type":"string","description":"The user that commands are run as inside the container"},"AttachStdin":{"type":"boolean","description":"Whether to attach to stdin"},"AttachStdout":{"type":"boolean","description":"Whether to attach to stdout"},"AttachStderr":{"type":"boolean","description":"Whether to attach to stderr"},"ExposedPorts":{"type":"object","description":"An object mapping ports to an empty object","additionalProperties":{"type":"object","default":{}}},"Tty":{"type":"boolean","description":"Attach standard streams to a TTY, including stdin if it is not closed"},"OpenStdin":{"type":"boolean","description":"Open stdin"},"StdinOnce":{"type":"boolean","description":"Close stdin after one attached client disconnects"},"Env":{"type":"array","items":{"type":"string","description":"A list of environment variables to set inside the container"}},"Cmd":{"type":"array","items":{"type":"string","description":"Command to run specified as a string or an array of strings"}},"Image":{"type":"string","description":"The name of the image to use when creating the container"},"Volumes":{"type":"object","description":"An object mapping mount point paths inside the container to empty objects","additionalProperties":{"type":"object","default":{}}},"WorkingDir":{"type":"string","description":"The working directory for commands to run in"},"Entrypoint":{"type":"array","items":{"type":"string","description":"The entry point for the container as a string or an array of strings"}},"OnBuild":{"type":"string","description":"ONBUILD metadata that were defined in the image's Dockerfile"},"Labels":{"type":"object","description":"User-defined key/value metadata","properties":{"description":{"type":"string"},"maintainer":{"type":"string"},"repository":{"type":"string"},"version":{"type":"string"}}}}},"NetworkSettings":{"type":"object","description":"NetworkSettings exposes the network settings in the API","properties":{"Bridge":{"type":"string","description":"Name of the network's bridge"},"SandboxID":{"type":"string","description":"SandboxID uniquely represents a container's network stack"},"HairpinMode":{"type":"boolean","description":"Indicates if hairpin NAT should be enabled on the virtual interface"},"LinkLocalIPv6Address":{"type":"string","description":"IPv6 unicast address using the link-local prefix"},"LinkLocalIPv6PrefixLen":{"type":"integer","description":"Prefix length of the IPv6 unicast address"},"Ports":{"type":"object","description":"PortMap describes the mapping of container ports to host ports, using the container's port-number and protocol as key. If a container's port is mapped for multiple protocols, separate entries are added to the mapping table.","additionalProperties":{"type":"array","items":{"type":"object","properties":{"HostIp":{"type":"string","description":"Host IP address that the container's port is mapped to"},"HostPort":{"type":"string","description":"Host port number that the container's port is mapped to"}}}}},"SandboxKey":{"type":"string","description":"SandboxKey identifies the sandbox"},"SecondaryIPAddresses":{"type":"array","items":{"type":"object","description":"Address represents an IPv4 or IPv6 IP address","properties":{"Addr":{"type":"string","description":"IP address"},"PrefixLen":{"type":"integer","description":"Mask length of the IP address"}}}},"SecondaryIPv6Addresses":{"type":"array","items":{"type":"object","description":"Address represents an IPv4 or IPv6 IP address","properties":{"Addr":{"type":"string","description":"IP address"},"PrefixLen":{"type":"integer","description":"Mask length of the IP address"}}}},"EndpointID":{"type":"string","description":"EndpointID uniquely represents a service endpoint in a Sandbox"},"Gateway":{"type":"string","description":"Gateway address for the default \"bridge\" network"},"GlobalIPv6Address":{"type":"string","description":"Global IPv6 address for the default \"bridge\" network"},"GlobalIPv6PrefixLen":{"type":"integer","description":"Mask length of the global IPv6 address"},"IPAddress":{"type":"string","description":"IPv4 address for the default \"bridge\" network"},"IPPrefixLen":{"type":"integer","description":"Mask length of the IPv4 address"},"IPv6Gateway":{"type":"string","description":"IPv6 gateway address for this network"},"MacAddress":{"type":"string","description":"MAC address for the container on the default \"bridge\" network"},"Networks":{"type":"object","description":"Information about all networks that the container is connected to","properties":{"fluxDockerNetwork":{"$ref":"#/components/schemas/fluxnetwork"}}}}}}}}},"example":{"status":"success","data":{"Id":"3cf131c856714g2s877r711931faa6622fe5aa9345fa392cbef54e5b9483c6a1","Created":"2020-05-16T16:40:36.11971926Z","Path":"/opt/fahclient/entrypoint.sh","Args":["--allow","0/0","--web-allow","0/0"],"State":{"Status":"paused","Running":true,"Paused":true,"Restarting":false,"OOMkilled":false,"Dead":false,"Pid":22001,"ExitCode":0,"Error":"","StartedAt":"2020-05-16T16:43:53.607846737Z","FinishedAt":"2020-05-16T16:42:21.220760109Z"},"Image":"sha256:8bd1fb3dd2de02f8d4403c657da6a19efeef9286981537b30d2a107079018402","ResolvConfPath":"/var/lib/docker/containers/3cf131c856714g2s877r711931faa6622fe5aa9345fa392cbef54e5b9483c6a1/resolv.conf","HostnamePath":"/var/lib/docker/containers/3cf131c856714g2s877r711931faa6622fe5aa9345fa392cbef54e5b9483c6a1/hostname","HostsPath":"/var/lib/docker/containers/3cf131c856714g2s877r711931faa6622fe5aa9345fa392cbef54e5b9483c6a1/hosts","LogPath":"/var/lib/docker/containers/3cf131c856714g2s877r711931faa6622fe5aa9345fa392cbef54e5b9483c6a1/3cf131c856714g2s877r711931faa6622fe5aa9345fa392cbef54e5b9483c6a1-json.log","Name":"/fluxFoldingAtHome","RestartCount":0,"Driver":"overlay2","Platform":"linux","MountLabel":"","ProcessLabel":"","AppArmorProfile":"docker-default","ExecIDs":null,"HostConfig":{"Binds":["/home/user/flux/ZelApps/fluxFoldingAtHome:/config"],"ContainerIDFile":"","LogConfig":{"Type":"json-file","Config":{}},"NetworkMode":"fluxDockerNetwork","PortBindings":{"7396/tcp":[{"HostIp":"","HostPort":30000}]},"RestartPolicy":{"Name":"unless-stopped","MaximumRetryCount":0},"AutoRemove":false,"VolumeDriver":"","VolumesFrom":null,"CapAdd":null,"CapDrop":null,"Capabilities":null,"Dns":null,"DnsOptions":null,"DnsSearch":null,"ExtraHosts":null,"GroupAdd":null,"IpcMode":"private","Cgroup":"","Links":null,"OomScoreAdj":0,"PidMode":"","Privileged":false,"PublishAllPorts":false,"SecurityOpt":null,"UTSMode":"","UsernsMode":"","ShmSize":67108864,"Runtime":"runc","ConsoleSize":[0,0],"Isolation":"","CpuShares":0,"Memory":524288000,"NanoCpus":500000000,"CgroupParent":"","BlkioWeight":null,"BlkioWeightDevice":null,"BlkioDeviceReadBps":null,"BlkioDeviceWriteBps":null,"BlkioDeviceReadIOps":null,"BlkioDeviceWriteIOps":null,"CpuPeriod":0,"CpuQuota":0,"CpuRealtimePeriod":0,"CpuRealtimeRuntime":0,"CpusetCpus":"","CpusetMems":"","Devices":null,"DeviceCgroupRules":null,"DeviceRequests":null,"KernelMemory":0,"KernelMemoryTCP":0,"MemoryReservation":0,"MemorySwap":-1,"MemorySwappiness":null,"OomKillDisable":false,"PidsLimit":null,"Ulimits":[{"Name":"nofile","Hard":16384,"Soft":8192}],"CpuCount":0,"CpuPercent":0,"IOMaximumIOps":0,"IOMaximumBandwidth":0,"MaskedPaths":["/proc/asound","/proc/acpi","/proc/kcore","/proc/keys","/proc/latency_stats","/proc/timer_list","/proc/timer_stats","/proc/sched_debug","/proc/scsi","/sys/firmware"],"ReadonlyPaths":["/proc/bus","/proc/fs","/proc/irq","/proc/sys","/proc/sysrq-trigger"]},"GraphDriver":{"Data":{"LowerDir":"/var/lib/docker/overlay2/ddd72fca4ad0e998d127g587463fed04d0927e364d3e5627cdc1860752fdf3d963-init/diff:/var/lib/docker/overlay2/37f925753b6ff671205ad58326379748c1ec9124ada87615bd18a76d7f538e9f/diff:/var/lib/docker/overlay2/f09d20a3b3010cf03adc8a99651adc3cecd33ed8bce8915f1e29c266d78801c5/diff:/var/lib/docker/overlay2/1be67c986305e14d788b8787651cd7bb90b9398adaf94fe287dbf07661eaca0d/diff:/var/lib/docker/overlay2/66d7763a8fc1b81c5c63ab187db968b74t26e3bc2a25d2d8039cac0971fdb9ed/diff","MergedDir":"/var/lib/docker/overlay2/ddd72fca4ad0e998f98a48463fed04d0927e364d3e5627cdc1860752fdf3d963/merged","UpperDir":"/var/lib/docker/overlay2/ddd72fca4ad0e998d127g587463fed04d0927e364d3e5627cdc1860752fdf3d963/diff","WorkDir":"/var/lib/docker/overlay2/ddd72fca4ad0e998d127g587463fed04d0927e364d3e5627cdc1860752fdf3d963/work"},"Name":"overlay2"},"Mounts":[{"Type":"bind","Source":"/home/user/flux/ZelApps/fluxFoldingAtHome","Destination":"/config","Mode":"","RW":true,"Propagation":"rprivate"}],"Config":{"Hostname":"3cf131c85671","Domainname":"","User":"folding","AttachStdin":true,"AttachStdout":true,"AttachStderr":true,"ExposedPorts":{"36330/tcp":{},"7396/tcp":{}},"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["USER=1CcoEkKQZcwUXPSps4bZJDjUM3mqe9bNXf","TEAM=262156","ENABLE_GPU=false","ENABLE_SMP=true","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","POWER=full"],"Cmd":["--allow","0/0","--web-allow","0/0"],"Image":"yurinnick/folding-at-home:latest","Volumes":null,"WorkingDir":"/opt/fahclient","Entrypoint":["/opt/fahclient/entrypoint.sh"],"OnBuild":null,"Labels":{"description":"Unofficial Folding@Home image for CPU compute","maintainer":"yurinnick","repository":"https://github.com/yurinnick/folding-at-home-docker","version":7.6}},"NetworkSettings":{"Bridge":"","SandboxID":"asdf1234hjkl5678","HairpinMode":false,"LinkLocalIPv6Address":"","LinkLocalIPv6PrefixLen":0,"Ports":{"36330/tcp":null,"7396/tcp":[{"HostIp":"0.0.0.0","HostPort":30000}]},"SandboxKey":"/var/run/docker/netns/asdf1234hjkl","SecondaryIPAddresses":null,"SecondaryIPv6Addresses":null,"EndpointID":"","Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":"","IPAddress":"","IPPrefixLen":0,"IPv6Gateway":"","MacAddress":"","Networks":{"fluxDockerNetwork":{"IPAMConfig":null,"Links":null,"Aliases":["1278j8c85671"],"NetworkID":"1aae1cddff7c12875a99b0c0be79835d74f5e23cdafdaf3fb20addb782795c4","EndpointID":"a94a5e37af12398fce10312e2060891d026231e1270d5f4163d2bfb06fe32137","Gateway":"143.17.0.1","IPAddress":"143.17.0.1","IPPrefixLen":16,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"02.34:ac:11:01:06","DriverOpts":null}}}}}}}}}}},"/apps/appstats":{"get":{"tags":["Apps"],"summary":"App stats based on resource usage","description":"Returns containers resource usage. **AppOwnerAbove**","externalDocs":{"url":"https://docs.docker.com/engine/api/v1.40/#operation/ContainerStats"},"operationId":"AppStats","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Application name, or component_app","example":"myapp"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"},"example":{"status":"success","data":{"read":"2020-09-18T00:35:37.306888517Z","preread":"2020-09-18T00:35:36.072193466Z"},"pids_stats":{},"blkio_stats":{"io_service_bytes_recursive":[],"io_serviced_recursive":[],"io_queue_recursive":[],"io_service_time_recursive":[],"io_wait_time_recursive":[],"io_merged_recursive":[],"io_time_recursive":[],"sectors_recursive":[]},"num_procs":0,"storage_stats":{},"cpu_stats":{"cpu_usage":{"total_usage":7296404247,"percpu_usage":[3217120277,4079283970],"usage_in_kernelmode":570000000,"usage_in_usermode":6550000000},"system_cpu_usage":516655370000000,"online_cpus":2,"throttling_data":{"periods":842,"throttled_periods":179,"throttled_time":8202758092}},"precpu_stats":{"cpu_usage":{"total_usage":7296404247,"percpu_usage":[3217120277,4079283970],"usage_in_kernelmode":570000000,"usage_in_usermode":6550000000},"system_cpu_usage":516653230000000,"online_cpus":2,"throttling_data":{"periods":842,"throttled_periods":179,"throttled_time":8202758092}},"memory_stats":{"usage":15024128,"max_usage":82767872,"stats":{"active_anon":3551232,"active_file":1179648,"cache":1392640,"dirty":0,"hierarchical_memory_limit":209715200,"hierarchical_memsw_limit":0,"inactive_anon":3555328,"inactive_file":126976,"mapped_file":1388544,"pgfault":17858,"pgmajfault":194,"pgpgin":23417,"pgpgout":21363,"rss":7020544,"rss_huge":0,"total_active_anon":3551232,"total_active_file":1179648,"total_cache":1392640,"total_dirty":0,"total_inactive_anon":3555328,"total_inactive_file":126976,"total_mapped_file":1388544,"total_pgfault":17858,"total_pgmajfault":194,"total_pgpgin":23417,"total_pgpgout":21363,"total_rss":7020544,"total_rss_huge":0,"total_unevictable":0,"total_writeback":0,"unevictable":0,"writeback":0},"limit":209715200},"name":"/fluxdibi-UND","id":"1e2f681c8a356c0af561bcefb3a85b8dbe690487598a004fef1c4a65001e0078","networks":{"eth0":{"rx_bytes":4191270113,"rx_packets":3346216,"rx_errors":0,"rx_dropped":0,"tx_bytes":300477601,"tx_packets":2264232,"tx_errors":0,"tx_dropped":0}}}}}}}}},"/apps/appchanges":{"get":{"tags":["Apps"],"summary":"Container changes","description":"Data of changes made to container. If no changes it will return a null response which is usually the case. **AppOwnerAbove**\n\nKind values:\n- `0 = Modified`\n- `1 = Added`\n- `2 = Deleted`","operationId":"AppChanges","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Application name, or component_app","example":"myapp"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string","description":"Path to changed file"},"kind":{"type":"integer","enum":[0,1,2],"description":"Change type"}}}}}},"example":{"status":"success","data":[null]}}}}}}},"/apps/appexec":{"post":{"tags":["Apps"],"summary":"Run a command in the container","description":"Run new commands inside running containers. Asked of a node that does not run the application, it answers an error saying so. **AppOwnerAbove**","operationId":"AppExec","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"appname":{"type":"string","description":"App name"},"cmd":{"type":"array","items":{"type":"string","description":"Command to run"}},"env":{"type":"array","items":{"type":"string","description":"New list of environment variables(optional)"}}}},"example":{"appname":"dibi-UND","cmd":["date"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"string","description":"Output depends on the command"},"example":"Sun Sep 20 10:18:38 UTC 2020"}}}}}},"/apps/appremove":{"get":{"tags":["Apps"],"summary":"Uninstall application","description":"This will stop, clean data, close port, and remove the container. `appname` is the application name; component names (containing `_`) are refused. The response is a stream of status objects; with `global` it is a single envelope. **AppOwnerAbove**","operationId":"Appremove","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Name of the app","example":"myapp"},{"in":"query","name":"force","required":false,"schema":{"type":"boolean","default":false},"description":"Defaults to false. If true, forces removal without checking if the app exists."},{"in":"query","name":"global","required":false,"schema":{"type":"boolean","default":false},"description":"Defaults to false (local removal). If true, removes the app from all nodes in the network."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/streamdata"},"example":{"status":"Flux App myapp was successfully removed"}}}}}}},"/apps/createfluxnetwork":{"get":{"tags":["Apps"],"summary":"Create flux network","description":"This will create flux network if none is detected. **AdminAndFluxTeam**","operationId":"createFluxNetwork","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Explanation of status"}}},"example":{"status":"success","data":"Flux Network already exists."}}}}}}},"/apps/rescanglobalappsinformation":{"get":{"tags":["Apps"],"summary":"Rescan and update global FluxApps info database","description":"Rescans global apps permanent messages since selected blockheight and updates global apps information database. **AdminAndFluxTeam**","operationId":"rescanGlobalAppsInformationAPI","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"blockheight","required":true,"schema":{"type":"integer"},"description":"Block height to rescan from","example":680000},{"in":"query","name":"removelastinformation","schema":{"type":"boolean","default":false,"enum":[true,false]},"description":"If set to true then before the actual rescan happens all global information specifications will be removed."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Rescan successful"}}}}}}}},"/apps/reindexglobalappsinformation":{"get":{"tags":["Apps"],"summary":"Reindex appsinformation collection and rebuild","description":"This will drop appslocations collection, recreate indexes, and rebuild incoming messages. **AdminAndFluxTeam**","operationId":"reindexGlobalAppsInformationAPI","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Reindex successful"}}}}}}}},"/apps/reindexglobalappslocation":{"get":{"tags":["Apps"],"summary":"Reindex appslocations collection and rebuild","description":"Function that drops information about running apps and rebuilds indexes. **AdminAndFluxTeam**","operationId":"reindexGlobalAppsLocationAPI","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Reindex successful"}}}}}}}},"/apps/checkdockerexistance":{"post":{"tags":["Apps"],"summary":"Checks Docker Hub for image","description":"**Deprecated.** No longer checks the registry; answers `deprecated` for any request that carries a repotag. **User**","operationId":"checkDockerAccessibility","deprecated":true,"security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"repotag":{"type":"string","description":"Repotag of docker image in this format `namespace/repository:tag`"}}},"example":{"repotag":"bharathshetty4/supermario:latest"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"deprecated"}}}}}}}},"/apps/appregister":{"post":{"tags":["Apps"],"summary":"App registration","description":"Registers a new application on Flux: submits its signed specification for the network to deploy. **User**\n\nNote: Signature is following message signed in the format shown below\n- `this.updatetype + this.version + JSON.stringify(fluxAppSpecFormatted) + this.timestamp`\n\nExample:\n- `fluxappregister1{\"version\":7,\"name\":\"blockbookneurai\",\"description\":\"Blockbook for Neurai\",\"owner\":\"1XcNTEsgVND4eb3bsVa2bjktnZZSruVct\",\"compose\":[{\"name\":\"blockbookneurai\",\"description\":\"Blockbook for Neurai\",\"repotag\":\"runonflux/blockbook-docker:latest\",\"ports\":[38382,38383],\"domains\":[\"\",\"\"],\"environmentParameters\":[\"COIN=neurai\",\"BLOCKBOOK_PORT=9168\",\"BLOCKBOOKGIT_URL=https://github.com/NeuraiProject/blockbook\"],\"commands\":[],\"containerPorts\":[9168,1337],\"containerData\":\"/root\",\"cpu\":2.5,\"ram\":5000,\"hdd\":40,\"tiered\":false,\"secrets\":\"\",\"repoauth\":\"\"}],\"instances\":3,\"contacts\":[],\"geolocation\":[],\"expire\":22000,\"nodes\":[],\"staticip\":false}1692605469050`","operationId":"Appregister","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"Message type"},"version":{"type":"integer","description":"Message version"},"appSpecification":{"$ref":"#/components/schemas/appspecification"},"timestamp":{"type":"integer","description":"Current timestamp in epoch/unix"},"signature":{"type":"string","description":"Signature of data message you signed with FluxID."}}},"example":{"type":"fluxappregister","version":1,"appSpecification":{"version":7,"name":"blockbookneurai","description":"Blockbook for Neurai","owner":"1XcNTEsgVND4eb3bsVa2bjktnZZSruVct","compose":[{"name":"blockbookneurai","description":"Blockbook for Neurai","repotag":"runonflux/blockbook-docker:latest","ports":[38382,38383],"domains":["",""],"environmentParameters":[],"commands":[],"containerPorts":[9199,1337],"containerData":"/root","cpu":2.5,"ram":5000,"hdd":40,"tiered":false,"secrets":"","repoauth":""}],"instances":3,"contacts":[],"geolocation":[],"expire":22000,"nodes":[],"staticip":false},"timestamp":1692605469050,"signature":"II3DdnuO5j6qPVAjid4zac3QRUpvdwwSwCGYoHTQqozveFPnSAueeYW3oPN1+oN2pJSFnXgxeT/odisfGRF5uu0="}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Hash of entire message and will be stored for 1 hour"}}},"example":{"status":"success","data":"a7a5b90b25ccc0a8379ec960c103103390369d1d6d18f88281372b944531dc23"}}}}}}},"/apps/appupdate":{"post":{"tags":["Apps"],"summary":"App update","description":"This call is to provide required info to update app on Flux. **User**\n\nNote: Signature is following message signed in the format shown below\n- `this.updatetype + this.version + JSON.stringify(fluxAppSpecFormatted) + this.timestamp`\n\nExample:\n- `fluxappupdate1{\"version\":7,\"name\":\"blockbookneurai\",\"description\":\"Blockbook for Neurai\",\"owner\":\"1HWjQ9S3MyzV6EbtDMEkpHm31parya412N\",\"compose\":[{\"name\":\"blockbookneurai\",\"description\":\"Blockbook for Neurai\",\"repotag\":\"runonflux/blockbook-docker:latest\",\"ports\":[38382,38383],\"domains\":[\"\",\"\"],\"environmentParameters\":[\"COIN=neurai\",\"BLOCKBOOK_PORT=9168\",\"BLOCKBOOKGIT_URL=https://github.com/NeuraiProject/blockbook\"],\"commands\":[],\"containerPorts\":[9168,1337],\"containerData\":\"/root\",\"cpu\":2.5,\"ram\":5000,\"hdd\":40,\"tiered\":false,\"secrets\":\"\",\"repoauth\":\"\"}],\"instances\":3,\"contacts\":[],\"geolocation\":[],\"expire\":22000,\"nodes\":[],\"staticip\":false}1692697789387`","operationId":"updateAppGlobalyApi","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"appSpecification":{"$ref":"#/components/schemas/appspecification"},"timestamp":{"type":"integer","description":"Current timestamp in epoch/unix"},"signature":{"type":"string","description":"Signature of data message you signed with FluxID."},"type":{"type":"string","description":"Message type"},"version":{"type":"integer","description":"Message version"}}},"example":{"type":"fluxappupdate","version":1,"appSpecification":{"version":7,"name":"blockbookneurai","description":"Blockbook for Neurai","owner":"1HWjQ9S3MyzV6EbtDMEkpHm31parya412N","compose":[{"name":"blockbookneurai","description":"Blockbook for Neurai","repotag":"runonflux/blockbook-docker:latest","ports":[38382,38383],"domains":["",""],"environmentParameters":["COIN=neurai","BLOCKBOOK_PORT=9168","BLOCKBOOKGIT_URL=https://github.com/NeuraiProject/blockbook"],"commands":[],"containerPorts":[9168,1337],"containerData":"/root","cpu":2.5,"ram":5000,"hdd":40,"tiered":false,"secrets":"","repoauth":""}],"instances":3,"contacts":[],"geolocation":[],"expire":22000,"nodes":[],"staticip":false},"timestamp":1692697789387,"signature":"HxtjvY3/CSoKxlaAZ4seno5qNYSZLVQ30IEqC1pw8644YjtN0H5IC131XaPkTrptUmxTHCVxE/gIQZsld4lWX54="}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Hash of entire message and will be stored for 1 hour"}}},"example":{"status":"success","data":"a7a5b90b25ccc0a8379ec960c103103390369d1d6d18f88281372b944531dc23"}}}}}}},"/apps/deploymentinformation":{"get":{"tags":["Apps"],"summary":"Deployment information","description":"This will return deployment information. **Public**","operationId":"getDeploymentInformatio","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":{"price":[{"height":-1,"cpu":3,"ram":1,"hdd":0.5,"minPrice":1,"port":2,"scope":6,"staticip":3},{"height":983000,"cpu":0.3,"ram":0.1,"hdd":0.05,"minPrice":0.1,"port":2,"scope":6,"staticip":3},{"height":1004000,"cpu":0.06,"ram":0.02,"hdd":0.01,"minPrice":0.01,"port":2,"scope":6,"staticip":3},{"height":1288000,"cpu":0.15,"ram":0.05,"hdd":0.02,"minPrice":0.01,"port":2,"scope":6,"staticip":3}],"appSpecsEnforcementHeights":{"1":0,"2":0,"3":983000,"4":1004000,"5":1142000,"6":1300000,"7":1420000},"address":"t3aGJvdtd8NR6GrnqnRuVEzH6MbrXuJFLUX","portMin":1,"portMax":65535,"enterprisePorts":["0-1023",8080,8081,8443,25565,6667],"bannedPorts":["16100-16299","26100-26299","30000-30099",8384,27017,22,23,25,3389,5900,5800,161,512,513,5901,3388,4444,123],"maxImageSize":2000000000,"minimumInstances":3,"maximumInstances":100,"blocksLasting":22000,"minBlocksAllowance":5000,"maxBlocksAllowance":264000,"blocksAllowanceInterval":1000}}}}}}}},"/apps/enterprisenodes":{"get":{"tags":["Apps"],"summary":"List of enterprise nodes","description":"This will return a list of enterprise nodes. **Public**","operationId":"getEnterpriseNodes","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":[{"tier":"STRATUS","payment_address":"t3c4EfxLoXXSRZCRnPRF3RpjPi9mBzF5yoJ","txhash":"9c271f03885a58b91b0529e3c59744397898b91a36bc129395244dd714a49247","outidx":0,"pubkey":"045bd4f81d7bda582141793463edb58e0f3228a873bd6b6680b78586db2969f51dfeda672eae65e64ca814316f77557012d02c73db7876764f5eddb6b6d9d02b5b","ip":"65.21.76.151","collateralPoints":30,"maturityPoints":500,"pubKeyPoints":500,"enterprisePoints":2000,"enterpriseApps":0,"score":3030},{"tier":"STRATUS","payment_address":"t3c4EfxLoXXSRZCRnPRF3RpjPi9mBzF5yoJ","txhash":"2b9f7c3f9d537c931345a095de6083fc4d90abdaeafad4920aa7efa61a046a03","outidx":0,"pubkey":"045bd4f81d7bda582141793463edb58e0f3228a873bd6b6680b78586db2969f51dfeda672eae65e64ca814316f77557012d02c73db7876764f5eddb6b6d9d02b5b","ip":"135.181.62.100","collateralPoints":30,"maturityPoints":500,"pubKeyPoints":500,"enterprisePoints":2000,"enterpriseApps":0,"score":3030},{"tier":"CUMULUS","payment_address":"t1dQ3eY9fk2VyLKMsMSRDsKhV6vQGuozvtU","txhash":"00eac3603342d31a57aa37a64bd4204ecc3ea0abd82e6d848b7d6e30c0c54af0","outidx":0,"pubkey":"043b7284fe091ce9fc5bfc2e4e898a944d116ec3bbd1cb1669f6a4ade792175216e348c48afb300d01e2d9e0ced10ad934341a11d4cc866ca2f8839a558ca558ad","ip":"71.203.179.136","collateralPoints":2,"maturityPoints":0,"pubKeyPoints":2,"enterprisePoints":0,"enterpriseApps":0,"score":4}]}}}}}}},"/apps/requestmessage/{hash}":{"get":{"tags":["Apps"],"summary":"Request application message hash.","description":"This will request application message hash. **AdminAndFluxTeam**","operationId":"getRequestmessage","security":[{"FluxID":[]}],"parameters":[{"in":"path","name":"hash","required":true,"schema":{"type":"string"},"description":"Application hash","example":"bf3d860a1d5d0379519afc7da441fb56c688f83e528162d5f6825c05f6c27e7a"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":{"message":"Application hash bf3d860a1d5d0379519afc7da441fb56c688f83e528162d5f6825c05f6c27e7a requested from the network"}}}}}}}},"/apps/checkhashes":{"get":{"tags":["Apps"],"summary":"Request check for missing application message.","description":"This will tigger check for misssing application messages. **AdminAndFluxTeam**","operationId":"getCheckhashes","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":{"message":"Running sync on missing application messages"}}}}}}}},"/apps/latestspecificationversion":{"get":{"tags":["Apps"],"summary":"Get latest application specification version","description":"Get the latest version of application specifications available. **Public**","operationId":"getLatestApplicationSpecificationAPI","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"integer","description":"Latest specification version"}}},"example":{"status":"success","data":8}}}}}}},"/apps/updatetolatestspecs/{appname}":{"get":{"tags":["Apps"],"summary":"Update app to latest specifications","description":"Returns the application's stored specification converted to the latest specification format (nothing is stored), for the owner to sign as an update. For an enterprise application an `enterprise-key` header is mandatory, and `enterprise` comes back encrypted to the session key it carries, with `compose` and `contacts` emptied. Refused while the daemon is not synced. **AppOwner**","operationId":"updateApplicationSpecificationAPI","security":[{"FluxID":[]}],"parameters":[{"name":"appname","in":"path","required":true,"schema":{"type":"string"},"description":"Name of the application to update","example":"electrumxtest"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","description":"The specification in the latest format"}}},"example":{"status":"success","data":{"version":8,"name":"electrumxtest","owner":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC","instances":3,"compose":[]}}}}}}}},"/apps/apporiginalowner/{appname}":{"get":{"tags":["Apps"],"summary":"Get application original owner","description":"Get the original owner of a specific application. **Public**","operationId":"getApplicationOriginalOwner","security":[],"parameters":[{"name":"appname","in":"path","required":true,"schema":{"type":"string"},"description":"Name of the application","example":"electrumxtest"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"Original owner FluxID/address"}}},"example":{"status":"success","data":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC"}}}}}}},"/apps/installinglocation/{appname}":{"get":{"tags":["Apps"],"summary":"Get app installing location","description":"Get the location where a specific app is currently being installed. **Public**","operationId":"getAppInstallingLocation","security":[],"parameters":[{"name":"appname","in":"path","required":true,"schema":{"type":"string"},"description":"Name of the application","example":"electrumxtest"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"ip":{"type":"string","description":"IP address of node installing the app"},"name":{"type":"string","description":"Application name"},"broadcastedAt":{"type":"string","format":"date-time","description":"When installation started"},"expireAt":{"type":"string","format":"date-time","description":"When installation expires"},"hash":{"type":"string","description":"Installation hash"}}}}}},"example":{"status":"success","data":[{"ip":"192.168.1.100","name":"electrumxtest","broadcastedAt":"2023-11-15T10:00:00.000Z","expireAt":"2023-11-15T11:00:00.000Z","hash":"abc123def456"}]}}}}}}},"/apps/installinglocations":{"get":{"tags":["Apps"],"summary":"Get all apps installing locations","description":"Get locations where all apps are currently being installed. **Public**","operationId":"getAppsInstallingLocations","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"ip":{"type":"string","description":"IP address of node"},"name":{"type":"string","description":"Application name"},"broadcastedAt":{"type":"string","format":"date-time"},"expireAt":{"type":"string","format":"date-time"},"hash":{"type":"string"}}}}}},"example":{"status":"success","data":[{"ip":"192.168.1.100","name":"app1","broadcastedAt":"2023-11-15T10:00:00.000Z","expireAt":"2023-11-15T11:00:00.000Z","hash":"abc123"}]}}}}}}},"/apps/installingerrorslocation/{appname}":{"get":{"tags":["Apps"],"summary":"Get app installation errors location","description":"Get the location where a specific app had installation errors. **Public**","operationId":"getAppInstallingErrorsLocation","security":[],"parameters":[{"name":"appname","in":"path","required":true,"schema":{"type":"string"},"description":"Name of the application","example":"electrumxtest"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"ip":{"type":"string","description":"IP address of node with errors"},"name":{"type":"string","description":"Application name"},"broadcastedAt":{"type":"string","format":"date-time"},"expireAt":{"type":"string","format":"date-time"},"hash":{"type":"string","description":"Error hash"},"error":{"type":"string","description":"Error message"}}}}}},"example":{"status":"success","data":[{"ip":"192.168.1.100","name":"electrumxtest","error":"Failed to pull Docker image"}]}}}}}}},"/apps/installingerrorslocations":{"get":{"tags":["Apps"],"summary":"Get all apps installation errors locations","description":"Get locations where all apps had installation errors. **Public**","operationId":"getAppsInstallingErrorsLocations","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"ip":{"type":"string"},"name":{"type":"string"},"error":{"type":"string"},"broadcastedAt":{"type":"string","format":"date-time"},"expireAt":{"type":"string","format":"date-time"},"hash":{"type":"string"}}}}}},"example":{"status":"success","data":[{"ip":"192.168.1.100","name":"app1","error":"Installation timeout"}]}}}}}}},"/apps/whitelistedrepositories":{"get":{"tags":["Apps"],"summary":"Get whitelisted repositories","description":"**Deprecated.** The whitelist is retired; always returns an empty list. **Public**","operationId":"whitelistedRepositories","deprecated":true,"security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"string","description":"Whitelisted repository URL"}}}},"example":{"status":"success","data":[]}}}}}}},"/apps/verifyappregistrationspecifications":{"post":{"tags":["Apps"],"summary":"Verify app registration specifications","description":"Verify and format application registration specifications. The body is the application specification itself, read raw (send it as `text/plain`). Refused while the daemon is not synced; also runs the placement-feasibility and name-conflict checks, and returns an enterprise application with `compose` and `contacts` emptied. **Public**","operationId":"verifyAppRegistrationParameters","security":[],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"$ref":"#/components/schemas/appspecification"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","description":"Formatted and verified app specifications"}}},"example":{"status":"success","data":{"version":4,"name":"myapp","description":"My application","owner":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC"}}}}}}}},"/apps/verifyappupdatespecifications":{"post":{"tags":["Apps"],"summary":"Verify app update specifications","description":"Verify and format application update specifications. The body is the application specification itself, read raw (send it as `text/plain`). **Public**","operationId":"verifyAppUpdateParameters","security":[],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"$ref":"#/components/schemas/appspecification"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","description":"Formatted and verified app update specifications"}}},"example":{"status":"success","data":{"version":5,"name":"myapp","description":"Updated application"}}}}}}}},"/apps/getappspecsusdprice":{"get":{"tags":["Apps"],"summary":"Get application specifications USD price","description":"Get the USD price for application specifications and resource usage. **Public**","operationId":"getAppSpecsUSDPrice","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","description":"The node's `fluxapps.usdprice` pricing configuration","properties":{"height":{"type":"integer","description":"Height from which this price set is valid"},"cpu":{"type":"number","description":"USD per 0.1 CPU core"},"ram":{"type":"number","description":"USD per 100 MB RAM"},"hdd":{"type":"number","description":"USD per GB storage"},"minPrice":{"type":"number","description":"Minimum price of a registration or update"},"port":{"type":"number","description":"Additional price per enterprise port"},"scope":{"type":"number","description":"Additional price for targeting specific nodes or private images"},"staticip":{"type":"number","description":"Additional price for targeting nodes with a static IP"},"fluxmultiplier":{"type":"number","description":"Multiplier applied when paying in FLUX (1 means no discount)"},"multiplier":{"type":"number","description":"Global price multiplier"},"minUSDPrice":{"type":"number","description":"Minimum USD price payable by card or PayPal"}}}}},"example":{"status":"success","data":{"height":-1,"cpu":0.15,"ram":0.05,"hdd":0.02,"minPrice":0.01,"port":2,"scope":4,"staticip":2,"fluxmultiplier":0.95,"multiplier":1,"minUSDPrice":0.99}}}}}}}},"/apps/applogpolling/{appname}":{"get":{"tags":["Apps"],"summary":"Poll application logs","description":"Poll application logs with real-time updates. **AppOwnerAbove**","operationId":"appLogPolling","security":[{"FluxID":[]}],"parameters":[{"name":"appname","in":"path","required":true,"schema":{"type":"string"},"description":"Name of the application","example":"electrumxtest"},{"name":"since","in":"query","required":false,"schema":{"type":"string"},"description":"Only lines after this time (anything Date.parse accepts); ignored when `cursor` is sent."},{"in":"query","name":"lineCount","required":false,"schema":{"type":"string","default":"all"},"description":"Most recent lines to return, or `all` (default `all`).","example":"100"},{"in":"query","name":"cursor","required":false,"schema":{"type":"string"},"description":"Opaque cursor from a previous response; resumes where that poll stopped","example":"eyJwb3MiOjQyfQ"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"Not wrapped in `data` — the fields sit beside `status`.","properties":{"status":{"$ref":"#/components/schemas/status"},"logs":{"type":"array","items":{"type":"string"}},"lineCount":{"description":"The line limit applied (`all` or a number)"},"logCount":{"type":"integer"},"sinceTimestamp":{"type":"string"},"cursor":{"type":"string","nullable":true,"description":"Position reached; send it back as `cursor` to receive only newer lines"},"rolledOver":{"type":"boolean","description":"The line the cursor pointed at was rotated away by Docker; lines in between are lost"},"skipped":{"type":"boolean","description":"The cursor was further back than one read reaches; it was moved forward and the lines in between were not delivered"},"truncated":{"type":"boolean","description":"The log holds more than the line limit (reported only when no cursor was sent)"}}},"example":{"status":"success","logs":["2026-10-01T10:00:00.000000000Z Application started"],"lineCount":100,"logCount":1,"sinceTimestamp":"","cursor":"eyJwb3MiOjQyfQ","rolledOver":false,"skipped":false,"truncated":true}}}}}}},"/apps/appmonitorstream/{appname}":{"get":{"tags":["Apps"],"summary":"Stream application monitoring data","description":"**Removed.** Streaming monitoring data is no longer supported and this endpoint always answers **HTTP 200** with `status: error` and `data.code: 410`. Read stored samples with `GET /apps/appmonitor` instead. **Public**","operationId":"appMonitorStream","deprecated":true,"security":[],"parameters":[{"name":"appname","in":"path","required":true,"schema":{"type":"string"},"description":"Name of the application","example":"electrumxtest"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"error","data":{"code":410,"name":"Deprecated","message":"The stats stream has been removed. Poll /apps/appstats for a live reading or /apps/appmonitor for the collected series."}}}}}}}},"/apps/testappinstall/{appname}":{"get":{"tags":["Apps"],"summary":"Test application installation","description":"Test if an application can be installed without actually installing it. Any logged-in user may test a pending registration by passing its temporary-message hash as `appname`; testing an application already known to the network (by name) requires the Flux Team. The response is streamed, like `GET /apps/installapplocally/{appname}`; on a node whose architecture the images do not support, it reports that validation passed and the installation was skipped. **User** (a known application: **FluxTeam**)","operationId":"testAppInstall","security":[{"FluxID":[]}],"parameters":[{"name":"appname","in":"path","required":true,"schema":{"type":"string"},"description":"Name of the application to test","example":"electrumxtest"}],"responses":{"200":{"description":"Stream of test-installation progress objects","content":{"application/json":{"schema":{"$ref":"#/components/schemas/streamdata"},"example":{"status":"Checking architecture compatibility..."}}}},"503":{"description":"Refused before the handler runs: the node is still reconciling its applications after boot (Retry-After 15), or has not yet obtained the network policy — the signed bundle carrying the blocked-repository list — so it cannot establish that an image is allowed (Retry-After 30).","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"status":"error","data":{"code":503,"name":"ServiceUnavailable","message":"Node has not yet obtained the network policy"}}}}}}}},"/apps/installapplocally/{appname}":{"get":{"tags":["Apps"],"summary":"Install application locally","description":"Installs a specific application locally on this node. The response is **streamed**: a sequence of JSON objects is written as the install progresses — image pull progress, volume creation, container start — and the connection closes when the install finishes or fails. A failure after the stream has started is written into the stream rather than signalled by the HTTP status, so read the objects rather than the status code.\n\nAny logged-in user may install a pending registration by passing its temporary-message hash as `appname`; installing an application already known to the network (by name) requires the Flux Team. Refused while another application on this node is undergoing an operation. **User** (a known application: **FluxTeam**)","operationId":"installAppLocally","security":[{"FluxID":[]}],"parameters":[{"name":"appname","in":"path","required":true,"schema":{"type":"string"},"description":"Name of the application to install","example":"electrumxtest"}],"responses":{"200":{"description":"Stream of installation progress objects","content":{"application/json":{"schema":{"$ref":"#/components/schemas/streamdata"},"example":{"status":"Downloading image","progressDetail":{"current":41943040,"total":104857600},"progress":"[=========>          ]  40MB/100MB","id":"6a1f8b3c9d2e"}}}},"503":{"description":"Refused before the handler runs: the node is still reconciling its applications after boot (Retry-After 15), or has not yet obtained the network policy — the signed bundle carrying the blocked-repository list — so it cannot establish that an image is allowed (Retry-After 30).","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"status":"error","data":{"code":503,"name":"ServiceUnavailable","message":"Node has not yet obtained the network policy"}}}}}}}},"/apps/redeploy/{appname}":{"get":{"tags":["Apps"],"summary":"Redeploy application","description":"Redeploy an existing application on this node. Component names (containing `_`) are refused, and the redeploy is skipped with a warning while a restore runs for the application. The response is streamed; with `global` it is a single envelope (`<app> queried for global hard|soft redeploy`). **AppOwnerAbove**","operationId":"redeployAPI","security":[{"FluxID":[]}],"parameters":[{"name":"appname","in":"path","required":true,"schema":{"type":"string"},"description":"Name of the application to redeploy"},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"Hard redeploy — removes the application's volumes and data on this node"},{"name":"global","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"Redeploy globally across network"}],"responses":{"200":{"description":"A stream of JSON objects written as the work progresses — progress objects and status envelopes — ending when it finishes or fails. A failure after the stream has started is written into it rather than signalled by the HTTP status.","content":{"application/json":{"schema":{"type":"object"},"example":{"status":"success","data":{"message":"Application softly removed. Awaiting installation..."}}}}},"503":{"description":"Refused before the handler runs: the node is still reconciling its applications after boot (Retry-After 15), or has not yet obtained the network policy — the signed bundle carrying the blocked-repository list — so it cannot establish that an image is allowed (Retry-After 30).","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"status":"error","data":{"code":503,"name":"ServiceUnavailable","message":"Node has not yet obtained the network policy"}}}}}}}},"/apps/reconstructhashes":{"get":{"tags":["Apps"],"summary":"Reconstruct application message hashes","description":"Reconstruct the application message hash collection. **AdminAndFluxTeam**","operationId":"reconstructAppMessagesHashCollectionAPI","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"message":{"type":"string","description":"Reconstruction status"}}}}},"example":{"status":"success","data":{"message":"Hash collection reconstruction initiated"}}}}}}}},"/apps/startmonitoring/{appname}":{"get":{"tags":["Apps"],"summary":"Start application monitoring","description":"**Removed.** Monitoring is no longer started or stopped per application — this endpoint always answers **HTTP 200** with `status: error` and `data.code: 410`. Monitoring runs for every installed application; read it with `GET /apps/appmonitor`. **Public**","operationId":"startAppMonitoringAPI","deprecated":true,"security":[],"parameters":[{"name":"appname","in":"path","required":true,"schema":{"type":"string"},"description":"Name of the application to monitor","example":"electrumxtest"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"message":{"type":"string","description":"Monitoring status"}}}}},"example":{"status":"error","data":{"code":410,"name":"Deprecated","message":"Application monitoring is managed by the node and runs for every app. This endpoint no longer has any effect and will be removed."}}}}}}}},"/apps/stopmonitoring/{appname}":{"get":{"tags":["Apps"],"summary":"Stop application monitoring","description":"**Removed.** Monitoring is no longer started or stopped per application — this endpoint always answers **HTTP 200** with `status: error` and `data.code: 410`. **Public**","operationId":"stopAppMonitoringAPI","deprecated":true,"security":[],"parameters":[{"name":"appname","in":"path","required":true,"schema":{"type":"string"},"description":"Name of the application","example":"electrumxtest"},{"name":"deletedata","in":"query","required":false,"schema":{"type":"boolean","default":false},"description":"Whether to delete monitoring data"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"message":{"type":"string","description":"Stop monitoring status"}}}}},"example":{"status":"error","data":{"code":410,"name":"Deprecated","message":"Application monitoring is managed by the node and runs for every app. This endpoint no longer has any effect and will be removed."}}}}}}}},"/apps/getpublickey":{"post":{"tags":["Apps"],"summary":"Get public key for app operations","description":"The public key an enterprise application's owner encrypts the enterprise content of that app to. ArcaneOS nodes only; refused while the daemon is not synced. The body is read raw, so send it as `text/plain` (an `application/json` body is consumed before the handler reads it). **User**","operationId":"getPublicKey","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","required":["owner","name"],"properties":{"owner":{"type":"string","description":"App owner FluxID"},"name":{"type":"string","description":"Application name"}}},"example":{"owner":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC","name":"myapp"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string","description":"The public key to encrypt the application's enterprise content to"}}},"example":{"status":"success","data":"04a1f3d..."}}}}}}},"/explorer/utxo":{"get":{"tags":["Explorer"],"summary":"View utxo history","description":"View unspent transaction outputs of selected address. **Public**","operationId":"explorerGetAddressUtxos","security":[],"parameters":[{"in":"query","name":"address","required":true,"schema":{"type":"string"},"description":"Flux address to look up utxo's","example":"t1edbnsYnGXxyYNt4kJJPhZktDWNaKwkznY"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"txid":{"type":"string","description":"The transaction id"},"vout":{"type":"integer","description":"Output index within the transaction"},"height":{"type":"integer","description":"Block height of transaction"},"address":{"type":"string","description":"Flux address"},"satoshis":{"type":"integer","description":"Value of Flux in satoshi"},"scriptPubKey":{"type":"string","description":"Script public key"},"coinbase":{"type":"boolean","description":"If coinbase or not. Present only when the daemon runs without insightexplorer."},"confirmations":{"type":"integer","description":"Present only when the daemon runs with insightexplorer=1 (instead of coinbase)"}}}}}},"example":{"status":"success","data":[{"txid":"dc7113577d1ccf539032c4e0155a3099fdc227d8c26ee0191628735c2b4cf4dc","vout":2,"height":288132,"address":"t1edbnsYnGXxyYNt4kJJPhZktDWNaKwkznY","satoshis":10011373238,"scriptPubKey":"76a914e3b4a37c811d29cead34b20a67baeed714b415e388ac","coinbase":false},{"txid":"f9315e66c62bd356973d3fd63ace4d6327dbcf26a4d084d50ff3ec0441577196","vout":0,"height":288287,"address":"t1edbnsYnGXxyYNt4kJJPhZktDWNaKwkznY","satoshis":10315062273,"scriptPubKey":"76a914e3b4a37c811d29cead34b20a67baeed714b415e388ac","coinbase":false}]}}}}}}},"/explorer/transactions":{"get":{"tags":["Explorer"],"summary":"View transaction history","description":"View transaction history of selected address. **Public**","operationId":"getAddressTransactions","security":[],"parameters":[{"in":"query","name":"address","required":true,"schema":{"type":"string"},"description":"Flux address to look up tx history","example":"t1edbnsYnGXxyYNt4kJJPhZktDWNaKwkznY"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","description":"Transactions of the address, newest first","items":{"type":"object","properties":{"txid":{"type":"string","description":"The transaction id"}}}}}},"example":{"status":"success","data":[{"txid":"2dbd48d70af588b3781acc2763fab1d2515b3d508d89e4cd20e34f911cd9085a"},{"txid":"1ffe6f5b8b15fbcbd5dfc6b9f0f1d6fc02aae4434bbf45705fa96ad56c47d6e1"},{"txid":"5120e5e0a4129f26ccd630710697219f482148aabddf47f2e0ebc212e3e18cbd"}]}}}}}}},"/explorer/balance":{"get":{"tags":["Explorer"],"summary":"View balance","description":"View balance of selected address. **Public**","operationId":"explorerGetAddressBalance","security":[],"parameters":[{"in":"query","name":"address","required":true,"schema":{"type":"string"},"description":"Flux address to look up balance","example":"t1edbnsYnGXxyYNt4kJJPhZktDWNaKwkznY"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"integer","description":"Flux balance in satoshi value"}}},"example":{"status":"success","data":7089180145154}}}}}}},"/explorer/scannedheight":{"get":{"tags":["Explorer"],"summary":"View scanned block height","description":"View scanned block height on the explorer that it has synced. **Public**","operationId":"getScannedHeight","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"generalScannedHeight":{"type":"integer","description":"Block height"}}}}},"example":{"status":"success","data":{"generalScannedHeight":593977}}}}}}}},"/explorer/issynced":{"get":{"tags":["Explorer"],"summary":"Check if explorer is synced","description":"Check if the explorer is fully synchronized with the blockchain. **Public**","operationId":"isExplorerSynced","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"boolean","description":"True when the last block the explorer processed had fewer than 2 confirmations (the explorer is at the chain tip); false until a block has been processed."}}},"example":{"status":"success","data":true}}}}}}},"/explorer/reindex":{"get":{"tags":["Explorer"],"summary":"Reindex collection","description":"Drop Flux collection and recreate it. **AdminAndFluxTeam**","operationId":"reindexExplorer","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"rescanapps","required":false,"schema":{"type":"boolean","default":false},"description":"Also drop and rebuild the global application collections. The handler's query fallback reads `rescanapps` (not `reindexapps`); the path form is `/explorer/reindex/true`.","example":false}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Explorer database reindex initiated"}}}}}}}},"/explorer/restart":{"get":{"tags":["Explorer"],"summary":"Restart block processing","description":"Restarts Flux collection. **AdminAndFluxTeam**","operationId":"restartBlockProcessing","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Block processing initiated"}}}}}}}},"/explorer/stop":{"get":{"tags":["Explorer"],"summary":"Stops block processing","description":"Stops Flux collection. **AdminAndFluxTeam**","operationId":"stopBlockProcessing","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Block processing is stopped"}}}}}}}},"/explorer/rescan":{"get":{"tags":["Explorer"],"summary":"Rescan explorer","description":"Rescan explorer from selected block height. **AdminAndFluxTeam**","operationId":"rescanExplorer","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"blockheight","required":true,"schema":{"type":"integer"},"description":"Block height to start rescan from","example":585000},{"in":"query","name":"rescanapps","required":false,"schema":{"type":"boolean","default":false},"description":"Also roll back the global application messages and information above `blockheight`","example":false}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Explorer rescan from blockheight 585000 initiated"}}}}}}}},"/apps/operations/{jobId}":{"get":{"tags":["Apps"],"summary":"Poll a long-running operation","description":"The single status resource for every long-running operation a node accepts. Endpoints that start work (the volume file operations, for example) answer `202 Accepted` with a `jobId`, a `Location` header pointing here and an `Operation-Id` header; this endpoint owns the polling contract.\n\nA running operation answers `200` with a non-terminal body and a `Retry-After` header. **Completion is read from the `status` field, never inferred from the HTTP code** — a failed operation is still a successful poll. Terminal statuses are `Succeeded`, `Failed`, `Canceled` and `Evicted` (the node took the work away — neither the caller's request nor their input was at fault).\n\nUnknown, expired and not-yours are one answer (`404`): a `jobId` must not tell a caller whether someone else has an operation running. Operations registered with an owner are readable only by that FluxID; operations registered without one treat the `jobId` itself as the capability. **Public** (the `jobId` is the capability)","operationId":"getOperation","security":[],"parameters":[{"in":"path","name":"jobId","required":true,"schema":{"type":"string"},"description":"Operation id, as returned by the endpoint that started the work","example":"op_2f8f1a1c-1a2b-4c3d-9e8f-0a1b2c3d4e5f"},{"in":"query","name":"sinceSeq","required":false,"schema":{"type":"integer","minimum":0},"description":"How far through an operation's line-numbered output the caller has already read. Anything that is not a non-negative whole number is treated as no cursor at all.","example":120}],"responses":{"200":{"description":"Operation state","headers":{"Retry-After":{"description":"Seconds to wait before polling again (running operations only)","schema":{"type":"integer"}},"Expires":{"description":"When a terminal operation will be pruned from the registry","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/operation"}}},"example":{"status":"success","data":{"jobId":"op_2f8f1a1c-1a2b-4c3d-9e8f-0a1b2c3d4e5f","kind":"fileoperation.copy","status":"Running","createdAt":1772719200000,"lastUpdatedAt":1772719214000,"progress":["Copying..."],"error":null,"detail":{"app":"mycomponent_myapp","operation":"fileoperation.copy","bytesDone":41943040,"bytesTotal":104857600}}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"404":{"description":"Operation not found, expired, or not readable by this caller","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"error","data":{"message":"Operation not found"}}}}},"500":{"$ref":"#/components/responses/InternalServerError"}}},"delete":{"tags":["Apps"],"summary":"Cancel a long-running operation","description":"Requests cancellation of an operation. **Best effort, and said so plainly**: the flag is raised here and the worker stops at its next checkpoint, so `status` stays `Running` until it does. Poll `GET /apps/operations/{jobId}` for the terminal state. **Public** (the `jobId` is the capability)","operationId":"cancelOperation","security":[],"parameters":[{"in":"path","name":"jobId","required":true,"schema":{"type":"string"},"description":"Operation id","example":"op_2f8f1a1c-1a2b-4c3d-9e8f-0a1b2c3d4e5f"}],"responses":{"200":{"description":"Cancellation requested","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"jobId":{"type":"string"},"cancelRequested":{"type":"boolean"},"status":{"type":"string","description":"The operation status at the moment of the request"}}}}},"example":{"status":"success","data":{"jobId":"op_2f8f1a1c-1a2b-4c3d-9e8f-0a1b2c3d4e5f","cancelRequested":true,"status":"Running"}}}}},"404":{"description":"Operation not found","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"error","data":{"message":"Operation not found"}}}}},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/apps/moveobject":{"post":{"tags":["Volume Browser"],"summary":"Move a file or folder within an app volume","description":"Moves `source` to `destination` inside the application's persistent volume. Both operands are resolved relative to the volume root; a path that escapes it is refused.\n\nAnswers `202 Accepted` with a `jobId` — poll `GET /apps/operations/{jobId}`. A move is registered as a job like the other three because paste is one gesture in a file browser: cut-paste returning a result while copy-paste returned a job would put two response shapes inside a single user action. **AppOwnerAbove**","operationId":"moveAppsObject","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/volumeObjectOperation"},"example":{"appname":"myapp","component":"mycomponent","source":"data/report.csv","destination":"archive/report.csv","overwrite":false}}}},"responses":{"202":{"$ref":"#/components/responses/OperationAccepted"},"500":{"$ref":"#/components/responses/InternalServerError"},"503":{"description":"Refused before any work starts: another file operation is running for this application, the node is at its concurrent-operation limit, the file-operation image is still being fetched, or the node is still reconciling its applications after boot. `Retry-After` says when to retry; `data.operation` (jobId, kind, statusUrl) names the operation being waited behind, when there is one.","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"}}}}}}},"/apps/copyobject":{"post":{"tags":["Volume Browser"],"summary":"Copy a file or folder within an app volume","description":"Copies `source` to `destination` inside the application's persistent volume, preserving ownership, timestamps and symlinks. The volume's free space is checked against the measured size of the source before the copy starts, and the ceiling is enforced against what actually lands.\n\nA directory copied onto an existing directory overlays it rather than replacing it wholesale; a file over a file is replaced, and a file over a directory is refused. Answers `202 Accepted` with a `jobId` — poll `GET /apps/operations/{jobId}`. **AppOwnerAbove**","operationId":"copyAppsObject","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/volumeObjectOperation"},"example":{"appname":"myapp","component":"mycomponent","source":"data","destination":"backup/data","overwrite":false}}}},"responses":{"202":{"$ref":"#/components/responses/OperationAccepted"},"500":{"$ref":"#/components/responses/InternalServerError"},"503":{"description":"Refused before any work starts: another file operation is running for this application, the node is at its concurrent-operation limit, the file-operation image is still being fetched, or the node is still reconciling its applications after boot. `Retry-After` says when to retry; `data.operation` (jobId, kind, statusUrl) names the operation being waited behind, when there is one.","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"}}}}}}},"/apps/compressobject":{"post":{"tags":["Volume Browser"],"summary":"Compress a file or folder into an archive","description":"Creates an archive of `source` at `destination` inside the application's persistent volume. The destination extension chooses the format and must be one of `.zip`, `.tar.gz` or `.tgz`; anything else is refused.\n\n`source` is one path or a list of paths. One path: a directory's *contents* are archived at the top level (a file goes in under its own name), so extracting the archive to a destination reproduces the source under that name. A list (at most 1000 entries; an entry may not be listed twice or sit inside another listed entry): each entry is archived by its path relative to the deepest folder holding all of them, and a directory arrives as that directory — what a file browser sends for a selection, even of one item. The archive's size is bounded as it is written (the volume's free space), not measured up front. Answers `202 Accepted` with a `jobId` — poll `GET /apps/operations/{jobId}`. **AppOwnerAbove**","operationId":"compressAppsObject","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/volumeObjectOperation"},"examples":{"folder":{"summary":"One folder, its contents at the archive's top level","value":{"appname":"myapp","component":"mycomponent","source":"data","destination":"backup/data.tar.gz","overwrite":false}},"selection":{"summary":"A selection, each entry by its path from the deepest common folder","value":{"appname":"myapp","component":"mycomponent","source":["logs/a.txt","notes.txt"],"destination":"backup/selection.zip","overwrite":false}}}}}},"responses":{"202":{"$ref":"#/components/responses/OperationAccepted"},"500":{"$ref":"#/components/responses/InternalServerError"},"503":{"description":"Refused before any work starts: another file operation is running for this application, the node is at its concurrent-operation limit, the file-operation image is still being fetched, or the node is still reconciling its applications after boot. `Retry-After` says when to retry; `data.operation` (jobId, kind, statusUrl) names the operation being waited behind, when there is one.","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"}}}}}}},"/apps/extractobject":{"post":{"tags":["Volume Browser"],"summary":"Extract an archive within an app volume","description":"Extracts the archive at `source` to `destination` inside the application's persistent volume. The source is accepted by extension rather than by sniffing its content — `.zip`, `.tar.gz` or `.tgz` — so a caller who names what they uploaded cannot have it interpreted as something else.\n\nHow much an extraction will write cannot be measured up front, so the volume's remaining capacity is the only bound: on a full volume the request is refused outright rather than expressed as a limit nothing enforces. Answers `202 Accepted` with a `jobId` — poll `GET /apps/operations/{jobId}`. **AppOwnerAbove**","operationId":"extractAppsObject","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/volumeObjectOperation"},"example":{"appname":"myapp","component":"mycomponent","source":"backup/data.tar.gz","destination":"data","overwrite":true}}}},"responses":{"202":{"$ref":"#/components/responses/OperationAccepted"},"500":{"$ref":"#/components/responses/InternalServerError"},"503":{"description":"Refused before any work starts: another file operation is running for this application, the node is at its concurrent-operation limit, the file-operation image is still being fetched, or the node is still reconciling its applications after boot. `Retry-After` says when to retry; `data.operation` (jobId, kind, statusUrl) names the operation being waited behind, when there is one.","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"}}}}}}},"/apps/fileoperationimage/{imageid}":{"get":{"tags":["Volume Browser"],"summary":"Serve a container image to a peer node","description":"Node-to-node transfer of the file-operation image (the image volume file operations run in) to a peer node that cannot pull it from the registry. The caller is identified by its remote address rather than by a forwarded header, and the requested `imageid` is *compared* against the images this node expects to hold — never used to look one up — so there is no \"send me image X\" here. A caller that is not a confirmed node, or an id this node does not hold, gets `403`/`404` respectively; a node already serving the image to its maximum number of peers answers `503`. **Public** (peer nodes only)","operationId":"serveImageToPeer","security":[],"parameters":[{"in":"path","name":"imageid","required":true,"schema":{"type":"string"},"description":"The image id as the *calling* node's daemon files it, which need not be what this node's daemon calls it","example":"sha256:6a1f8b3c9d2e4f5a6b7c8d9e0f1a2b3c4d5e6f708192a3b4c5d6e7f8091a2b3c"}],"responses":{"200":{"description":"Image stream","content":{"application/x-tar":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Remote address could not be determined"},"403":{"description":"Caller is not a node entitled to this image"},"404":{"description":"This node does not hold the requested image"},"503":{"description":"This node is already serving the image to its maximum number of peers; retry after `Retry-After`","headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}},"/apps/placementfeasibility":{"post":{"tags":["Apps"],"summary":"Ask whether a specification can be placed","description":"Answers whether a prospective application specification can reach its instance count on the network as it stands right now, and with how much provider diversity. Send the specification you are about to register.\n\n`category` is the availability promise the network can make:\n- `impossible` — fewer eligible nodes than instances. Every\n  approximation counts *toward* eligibility, so the shortfall is proven\n  and registration will reject the spec.\n\n- `constrained` — the instance count is reachable, but a synced app's\n  instances outnumber the available fault domains, so some instances must\n  share a provider. Deliverable, with less resiliency than the instance\n  count implies; registration warns.\n\n- `ok` — the requested count and diversity are both deliverable.\n\nReturns `503` while the node list or the IP location table is still filling in, rather than answering from a partial view. **User**","operationId":"placementFeasibility","security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"An application specification. Only the placement-relevant fields are read — `instances`, `geolocation`, and the per-component `cpu`/`ram`/`hdd`/`tiered` and `containerData` (which decides whether a component is synced)."},"example":{"instances":5,"geolocation":["acEU"],"compose":[{"name":"mycomponent","cpu":2,"ram":4000,"hdd":40,"tiered":false,"containerData":"/data"}]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/placementAdvice"}}},"example":{"status":"success","data":{"instances":5,"candidateCount":1832,"domainCount":964,"maxPerDomain":1,"placeable":true,"tableAvailable":true,"tableGenerated":"2026-09-01T00:00:00.000Z","syncedApp":true,"category":"ok","constrained":false,"satisfiable":true,"normalizedGeolocation":["acEU"],"coarsenedEntries":[]}}}}},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/apps/placementlocations":{"get":{"tags":["Apps"],"summary":"Live placement geography","description":"Node, fault-domain and tier counts per continent and country, taken from this node's own IP location table in one pass over the confirmed node list. Nodes the table cannot resolve are counted in `unresolved` rather than guessed at.\n\nReturns `503` while the node list is still filling in, and reports `tableAvailable: false` when the location table itself is absent — the tree *is* the product here, so its absence is unavailability rather than an empty answer. Query parameters are rejected. **Public**","operationId":"placementLocations","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"tableAvailable":{"type":"boolean"},"tableGenerated":{"type":"string","nullable":true},"total":{"type":"object","properties":{"nodes":{"type":"integer"},"domains":{"type":"integer"}}},"unresolved":{"type":"integer","description":"Nodes the location table could not resolve"},"continents":{"type":"object","description":"Per-continent tree, each carrying its countries and tier counts"}}}}},"example":{"status":"success","data":{"tableAvailable":true,"tableGenerated":"2026-09-01T00:00:00.000Z","total":{"nodes":6387,"domains":3204},"unresolved":12,"continents":{"EU":{"nodes":2810,"domains":1490,"tiers":{"CUMULUS":1402,"NIMBUS":701,"STRATUS":707}}}}}}}},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/apps/heldcomponents":{"get":{"tags":["Apps"],"summary":"Application components this node holds","description":"Every application component this node holds — the union of the containers running right now, the identifiers the reconciler has committed to, and the components an operator has explicitly stopped. A component that is stopped is still held.\n\nAsked by peers during placement; running containers are read from Docker per request, behind a one-second cache. Query parameters are rejected. **Public**","operationId":"heldComponents","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"string"}}}},"example":{"status":"success","data":["fluxmycomponent_myapp","fluxwordpress"]}}}}}}},"/apps/promotedfolders":{"get":{"tags":["Apps"],"summary":"Syncthing folders promoted on this node","description":"The Syncthing folder ids this node has promoted to `sendreceive` — the folders it holds the writable copy of. Asked by a peer before it promotes a folder of its own.\n\n`ready` is `false` until the Syncthing monitor has completed its first pass; the `folders` list is empty until then and must not be read as \"this node has promoted nothing\". Query parameters are rejected. POST the same path to also receive what each receive-only folder holds. **Public**","operationId":"promotedFolders","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"ready":{"type":"boolean","description":"Whether the monitor has produced a view yet"},"folders":{"type":"array","items":{"type":"string"}}}}}},"example":{"status":"success","data":{"ready":true,"folders":["fluxmycomponent_myapp"]}}}}}}},"post":{"tags":["Apps"],"summary":"Promoted Syncthing folders, with what each receive-only folder holds","description":"The same answer as `GET /apps/promotedfolders`, plus `holding`: for each receive-only Syncthing folder on this node, how many bytes of the owner's data it holds that the cluster index does not (`bytes`), and when that data was last written (`newestModified`, Unix ms). A peer asks for it before promoting a folder of its own, so the node that holds the data wins the election rather than the node with the lowest address.\n\n`holding` is the application owner's information, so it is only included for a caller entitled to it: a Flux Team session (`zelidauth` header), or a body signed by a node on the deterministic node list. A signed body carries `target` (the `ip:port` of the node being asked, checked against this node's own address so a captured request cannot be replayed at another node), `timestamp` (a JSON number, Unix ms, no older than 5 minutes and no more than 2 minutes ahead of this node's clock), `pubKey` (the asking node's public key as it appears on the node list) and `signature` (by that key, over `JSON.stringify` of the body without `signature`, keys in the order sent). Any other caller gets the open answer — `ready` and `folders` without `holding` — rather than an error.\n\nAnswers **HTTP 503** while this node's network state has not started, instead of waiting for the node list; a peer reads that as \"alive, not ready\". The body is read as JSON (`Content-Type: application/json`). **Public** (`holding`: **FluxTeam** or a signed Fluxnode request)","operationId":"promotedFolderHoldings","security":[{},{"FluxID":[]}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"target":{"type":"string","description":"`ip:port` of the node being asked; a bare IP means port 16127"},"timestamp":{"type":"integer","description":"Unix milliseconds"},"pubKey":{"type":"string","description":"Public key of the asking node, as listed on the deterministic node list"},"signature":{"type":"string","description":"Signature by `pubKey` over `JSON.stringify` of the body without `signature`"}}},"example":{"target":"203.0.113.10:16127","timestamp":1772719200000,"pubKey":"04c2b8b...","signature":"H+ZB3oSrsw6XkBxxlbwk33LEBJ..."}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"ready":{"type":"boolean","description":"Whether the Syncthing monitor has completed its first pass"},"folders":{"type":"array","description":"Folder ids this node has promoted to sendreceive","items":{"type":"string"}},"holding":{"type":"object","description":"Present only for an entitled caller. Folder id to what this node holds in it; `{}` before the monitor has measured anything.","additionalProperties":{"type":"object","properties":{"bytes":{"type":"integer"},"newestModified":{"type":"integer","description":"Unix milliseconds"}}}}}}}},"example":{"status":"success","data":{"ready":true,"folders":["fluxmycomponent_myapp"],"holding":{"fluxothercomponent_otherapp":{"bytes":6227702579,"newestModified":1772719100000}}}}}}},"503":{"description":"This node's network state has not started, so it cannot yet tell who is asking","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"status":"error","data":{"code":503,"name":"ServiceUnavailable","message":"Network state is not ready"}}}}}}}},"/apps/appcomponentnames":{"get":{"tags":["Apps"],"summary":"Component names of an application","description":"The component names of a registered application, each with whether it is a g: (masterSlave) component, and the application's total cpu/ram/hdd. A component_app name is accepted. Restricted to the Flux Team rather than the owner: an owner reads the specification itself and has no use for this, and the node operator is not a party to a customer's app at all. **FluxTeam**","operationId":"getApplicationComponentNames","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Application name","example":"myapp"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":{"components":[{"name":"mycomponent","masterSlave":false}],"resources":{"cpu":0.5,"ram":1000,"hdd":5}}}}}}}}},"/apps/messagescount":{"get":{"tags":["Apps"],"summary":"Count of app messages by owner","description":"How many global application messages carry the given owner. **Public**","operationId":"getAppsMessagesCount","security":[],"parameters":[{"in":"query","name":"appowner","required":true,"schema":{"type":"string"},"description":"Owner FluxID","example":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"integer"}}},"example":{"status":"success","data":17}}}}}}},"/apps/tamperingevents":{"get":{"tags":["Apps"],"summary":"Runtime tampering events","description":"Containers on this node whose running image no longer matches the image of the registered specification, most recently seen first. Reported per application when `appname` is given, otherwise across every application on the node. **Public**","operationId":"getTamperingEvents","security":[],"parameters":[{"in":"query","name":"appname","required":false,"schema":{"type":"string"},"description":"Restrict to one application","example":"myapp"},{"in":"query","name":"limit","required":false,"schema":{"type":"integer","minimum":1},"description":"Maximum events to return; clamped to the service maximum","example":50}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"appName":{"type":"string"},"detectedAt":{"type":"string"},"lastSeen":{"type":"string"}}}}}},"example":{"status":"success","data":[{"appName":"myapp","detectedAt":"2026-09-01T09:14:00.000Z","lastSeen":"2026-09-01T11:02:00.000Z"}]}}}}}}},"/apps/appkill":{"get":{"tags":["Apps"],"summary":"Kill an app","description":"Stops the application's containers with a kill signal rather than a graceful stop. A kill is a stop that carries a signal, so it is recorded as the same desired state with a mode — the reconciler applies it where it stops the container. **AppOwnerAbove**","operationId":"appKill","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Application or component name","example":"myapp"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string"}}},"example":{"status":"success","data":"Application myapp killed"}}}}}}},"/apps/appmonitor":{"get":{"tags":["Apps"],"summary":"App monitoring data","description":"Stored CPU, memory, network and disk samples for an application on this node. **AppOwnerAbove**","operationId":"appMonitor","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Application or component name","example":"myapp"},{"in":"query","name":"range","required":false,"schema":{"type":"integer","minimum":1},"description":"Window in milliseconds back from now; all stored samples when omitted. Windows longer than a day are thinned to one sample per hour.","example":3600000}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"integer","description":"Unix milliseconds"},"data":{"type":"object","description":"The sample, in Docker's container-stats shape"}}}}}},"example":{"status":"success","data":[{"timestamp":1772719200000,"data":{"cpu_stats":{"cpu_usage":{"total_usage":123456789},"system_cpu_usage":987654321000,"online_cpus":4},"memory_stats":{"usage":52428800,"limit":1048576000}}}]}}}}}}},"/apps/redeploycomponent":{"get":{"tags":["Apps"],"summary":"Redeploy a single component","description":"Redeploys one component of a composed application on this node without touching its siblings. `appname` is the *application* name and `component` the component name — an `appname` containing an underscore is refused.\n\nWith `force`, the redeploy is the hard one: the component's volume is unmounted and removed, so the app's data on this node is gone. Skipped while a restore is running for the application. **AppOwnerAbove**","operationId":"redeployComponent","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"appname","required":true,"schema":{"type":"string"},"description":"Application name (not `component_app`)","example":"myapp"},{"in":"query","name":"component","required":true,"schema":{"type":"string"},"description":"Component name","example":"mycomponent"},{"in":"query","name":"force","required":false,"schema":{"type":"boolean"},"description":"Hard redeploy — removes the component's volume and data on this node","example":false}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Component mycomponent of myapp redeployed"}}}}},"503":{"description":"Refused before the handler runs: the node is still reconciling its applications after boot (Retry-After 15), or has not yet obtained the network policy — the signed bundle carrying the blocked-repository list — so it cannot establish that an image is allowed (Retry-After 30).","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"status":"error","data":{"code":503,"name":"ServiceUnavailable","message":"Node has not yet obtained the network policy"}}}}}}}},"/flux/peers":{"get":{"tags":["Flux"],"summary":"Connected peers","description":"Detailed information about every peer connection this node holds, in both directions. To narrow the list use `GET /flux/peers/{filter}`; the filter is read from the path only, and a `filter` query parameter is ignored. **Public**","operationId":"getPeers","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object"}}}},"example":{"status":"success","data":[{"ip":"202.61.234.13","port":"16127","direction":"outbound","latency":42,"missedPongs":0,"lastPingTime":1772719195000,"lastPongTime":1772719195042,"connectedAt":1772712000000,"uptime":7200000,"source":"deterministic","isAlive":true,"badMessages":0,"capabilities":[],"remoteClockOffsetMs":3,"lastTransmissionDelay":12,"messagesReceived":5120,"messagesSent":4980,"bytesReceived":7340032,"bytesSent":6291456,"remoteVersion":"8.20.0","reconnects":0}]}}}}}}},"/flux/peers/{filter}":{"get":{"tags":["Flux"],"summary":"Connected peers, filtered","description":"`GET /flux/peers` narrowed by a path segment: `outbound` or `inbound` restrict the list to one direction, and an `ip:port` returns that single peer as an object (an error envelope `Peer <ip:port> not found` when no such connection exists). Any other value returns every peer. **Public**","operationId":"getPeersFiltered","security":[],"parameters":[{"in":"path","name":"filter","required":true,"schema":{"type":"string"},"description":"`outbound`, `inbound`, or a peer's `ip:port`","example":"outbound"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"oneOf":[{"type":"array","items":{"type":"object"}},{"type":"object"}]}}},"example":{"status":"success","data":[{"ip":"202.61.234.13","port":"16127","direction":"outbound","latency":42,"source":"deterministic","isAlive":true,"connectedAt":1772712000000,"uptime":7200000}]}}}}}}},"/flux/unstablenodes":{"get":{"tags":["Flux"],"summary":"Nodes flagged as unstable","description":"Peers this node has seen disconnect five or more times within the tracking window, with the count and the time of the first disconnect. **Public**","operationId":"getUnstableNodes","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object","properties":{"ip":{"type":"string"},"port":{"type":"string"},"disconnects":{"type":"integer"},"firstDisconnect":{"type":"integer"}}}}}},"example":{"status":"success","data":[{"ip":"202.61.234.13","port":"16127","disconnects":7,"firstDisconnect":1772712000000}]}}}}}}},"/flux/peerhistory":{"get":{"tags":["Flux"],"summary":"Peer connection history","description":"Connection and disconnection events from this node's peer history ring buffer, oldest first (`limit` keeps the most recent N). Every filter is optional and they combine. **AdminAndFluxTeam**","operationId":"getPeerHistory","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"ip","required":false,"schema":{"type":"string"},"description":"IP or IP prefix to match","example":"75.6.52"},{"in":"query","name":"code","required":false,"schema":{"type":"integer"},"description":"WebSocket close code, matched against each event's `closeCode`","example":4004},{"in":"query","name":"event","required":false,"schema":{"type":"string"},"description":"Event type","example":"disconnected"},{"in":"query","name":"limit","required":false,"schema":{"type":"integer"},"description":"Most recent N events","example":50},{"in":"query","name":"since","required":false,"schema":{"type":"integer"},"description":"Unix milliseconds; only events after this moment","example":1773520000000}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object"}}}},"example":{"status":"success","data":[{"ip":"75.6.52.11","port":"16127","direction":"inbound","event":"disconnected","closeCode":4004,"timestamp":1773520100000}]}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"}}}},"/flux/topology":{"get":{"tags":["Flux"],"summary":"Peer-exchange topology","description":"What this node's peers have reported about *their* peers: an `outbound`/`inbound` list per reporting node, with the number of reporters and of distinct known peers. **Public**","operationId":"getTopology","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"reporters":{"type":"integer"},"knownPeers":{"type":"integer"},"topology":{"type":"object"}}}}},"example":{"status":"success","data":{"reporters":24,"knownPeers":312,"topology":{"202.61.234.13:16127":{"outbound":["95.216.1.2:16127"],"inbound":["51.15.3.4:16127"]}}}}}}}}}},"/flux/networkhealth":{"get":{"tags":["Flux"],"summary":"Network health and diagnosis history","description":"This node's view of network health: the monitor's current status, whether it considers the network to be in steady state, and its recent diagnosis history. **Public**","operationId":"getNetworkHealth","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"status":{"type":"object"},"inSteadyState":{"type":"boolean"},"history":{"type":"array","items":{"type":"object"}}}}}},"example":{"status":"success","data":{"status":{"healthy":true},"inSteadyState":true,"history":[]}}}}}}}},"/flux/clockdrift":{"get":{"tags":["Flux"],"summary":"Clock drift of this node","description":"The node's time offset as reported by its NTP client (`chrony` or `systemd-timesyncd`), with the source that answered and the node's own Unix time in seconds. A node whose clock has drifted is refused by signature-gated peer endpoints, so this is the first thing to check when those return \"stale\". **Public**","operationId":"clockDrift","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"source":{"type":"string","description":"`chrony`, `timesyncd`, or none detected"},"offset":{"type":"number","description":"Offset in seconds"},"time":{"type":"integer","description":"Node time, Unix seconds"}}}}},"example":{"status":"success","data":{"source":"chrony","offset":0.000184,"time":1772719200}}}}}}}},"/flux/enterpriseappowners":{"get":{"tags":["Flux"],"summary":"Enterprise application owners","description":"The FluxIDs allowed to install on enterprise nodes: the union of every enterprise node's allowed owners, read from the signed network policy bundle this node holds. Until the node has obtained that policy it answers an error envelope, `Network policy not yet obtained`, rather than an empty list; the error is not cached, a successful answer is cached for an hour. **Public**","operationId":"getEnterpriseAppOwners","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"string"}}}},"example":{"status":"success","data":["1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC"]}}}}}}},"/flux/portsinuse":{"post":{"tags":["Flux"],"summary":"Ports in use on this node","description":"The ports this node currently has in use, returned **signed** so the caller can attribute the answer to this node.\n\nTwo kinds of caller are accepted. A peer node signs its ask with `pubKey`, `signature` and `timestamp`; the timestamp window is checked *before* the signature, so an ask outside it is refused as stale regardless of who sent it — a node whose clock has drifted can read which problem it has from one line. A node operator or the Flux team may instead authenticate with a `zelidauth` header and send an empty body. **AdminAndFluxTeam** (or a signed peer request)","operationId":"portsInUse","security":[{"FluxID":[]},{}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"pubKey":{"type":"string","description":"Public key of the asking node"},"signature":{"type":"string"},"timestamp":{"type":"integer","description":"Unix milliseconds; the ask is refused outside its validity window"}}},"example":{"pubKey":"04c2b8b...","signature":"H+ZB3oSrsw6XkBxxlbwk33LEBJ...","timestamp":1772719200000}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"pubKey":{"type":"string","description":"Public key of the answering node"},"ports":{"type":"array","items":{"type":"integer"}},"askedAt":{"type":"integer","nullable":true},"signature":{"type":"string","description":"This node's signature over the answer"}}}}},"example":{"status":"success","data":{"pubKey":"04a1f3d...","ports":[31350,31351],"askedAt":1772719200000,"signature":"IHs1c2..."}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"}}}},"/flux/addoutgoingpeer":{"get":{"tags":["Flux"],"summary":"Ask this node to connect back to you","description":"Asks this node to open an outgoing connection to the given `ip`. The request is only honoured when it comes *from* that address and the address belongs to a confirmed node, so a node can ask a peer to connect back to it but cannot direct a peer at a third party. Refused while this node is unconfirmed, or when the connection already exists. **Public** (self-attested)","operationId":"addOutgoingPeer","security":[],"parameters":[{"in":"query","name":"ip","required":true,"schema":{"type":"string"},"description":"`ip` or `ip:port` — must match the requester's own address","example":"202.61.234.13:16127"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Outgoing connection to 202.61.234.13:16127 initiated"}}}}}}}},"/flux/startdiscovery":{"get":{"tags":["Flux"],"summary":"Start peer discovery","description":"Starts this node's peer discovery loop. **FluxTeam**","operationId":"startDiscovery","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Discovery started"}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"}}}},"/flux/currentbranch":{"get":{"tags":["Flux"],"summary":"Git branch FluxOS is running","description":"The branch of the FluxOS working tree on this node. **FluxTeam**","operationId":"getCurrentBranch","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string"}}},"example":{"status":"success","data":"master"}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"}}}},"/flux/currentcommitid":{"get":{"tags":["Flux"],"summary":"Git commit FluxOS is running","description":"The commit id of the FluxOS working tree on this node. **FluxTeam**","operationId":"getCurrentCommitId","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string"}}},"example":{"status":"success","data":"10d0954961e0a2f3c5b7d8e9f0a1b2c3d4e5f607"}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"}}}},"/flux/rebuildui":{"get":{"tags":["Flux"],"summary":"Reinstall the FluxOS UI","description":"Fetches the published CloudUI release again and reinstalls it, unconditionally — the periodic check stands down when the installed hash already matches the release, and a UI that is damaged rather than out of date matches all the same. Repairing one is what this is for.\n\nRefused on ArcaneOS, where the watchdog owns CloudUI; the refusal names the component to ask instead. Replaces the removed `/flux/rebuildhome`. **AdminAndFluxTeam**","operationId":"rebuildUi","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"CloudUI rebuilt"}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"}}}},"/flux/eventstream":{"get":{"tags":["Flux"],"summary":"Server-sent event stream","description":"A `text/event-stream` of FluxOS events. Each event carries a monotonic `id`; send it back in the `Last-Event-ID` header to resume.\n\nA resuming consumer that fell behind the retention ring is told so *before* it is handed the survivors: a `stream:gap` event names `afterId`, `oldestRetainedId` and how many events were `dropped`. Silence here is what turns a dropped event into a timeout somewhere else entirely. A `: keepalive` comment is written every 15 seconds.\n\nAnswers `404` on nodes where the event stream is not enabled. **Public**","operationId":"eventStream","security":[],"parameters":[{"in":"header","name":"Last-Event-ID","required":false,"schema":{"type":"integer"},"description":"Resume after this event id","example":4211}],"responses":{"200":{"description":"Event stream","content":{"text/event-stream":{"schema":{"type":"string"},"example":"event: stream:gap\ndata: {\"afterId\":4211,\"oldestRetainedId\":4300,\"dropped\":88}\nid: 4211\n\nevent: app:installed\ndata: {\"app\":\"myapp\"}\nid: 4301\n"}}},"404":{"description":"Event stream not enabled on this node"}}}},"/flux/testcounters":{"get":{"tags":["Flux"],"summary":"Internal event counters (test builds only)","description":"The internal event counters the event bus keeps. Available only on nodes where the test event stream is enabled; every other node answers `404`. **Public**","operationId":"testCounters","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":{"app":{"installed":3}}}}}},"404":{"description":"Test counters not enabled on this node"}}}},"/flux/zelid":{"get":{"tags":["Flux"],"summary":"FluxID of the node operator (deprecated)","description":"Deprecated alias of `GET /flux/id`. **Public**","operationId":"getFluxZelID","deprecated":true,"security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"string"}}},"example":{"status":"success","data":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC"}}}}}}},"/benchmark/getstoredbenchmark":{"get":{"tags":["Benchmark"],"summary":"Last stored benchmark result","description":"The benchmark result this node has stored locally, with the tier it qualified for. Answers an error message when the node has never stored one. Cached for an hour. **Public**","operationId":"getStoredBenchmark","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"benchmark":{"type":"object"},"tier":{"type":"string"}}}}},"example":{"status":"success","data":{"tier":"STRATUS","benchmark":{"cores":8,"ram":32,"ssd":880}}}}}}}}},"/benchmark/start":{"get":{"tags":["Benchmark"],"summary":"Start the benchmark daemon","description":"Starts `fluxbenchd` on the node (falling back to `zelbenchd` on older installs). **AdminAndFluxTeam**","operationId":"startBenchmarkDaemon","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Benchmark successfully started"}}}}}}}},"/benchmark/restart":{"get":{"tags":["Benchmark"],"summary":"Restart the benchmark daemon","description":"Restarts the benchmark daemon on the node. **AdminAndFluxTeam**","operationId":"restartBenchmarkDaemon","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Benchmark successfully restarted"}}}}}}}},"/benchmark/signzelnodetransaction":{"get":{"tags":["Benchmark"],"summary":"Sign a FluxNode transaction (deprecated)","description":"Deprecated alias of `GET /benchmark/signfluxnodetransaction`. **Admin**","operationId":"signZelNodeTransactionGet","deprecated":true,"security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"hexstring","required":true,"schema":{"type":"string"},"description":"Transaction hex string","example":"0400008085202f89"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/signfluxnodetransaction"}}}}}}}},"post":{"tags":["Benchmark"],"summary":"Sign a FluxNode transaction, POST (deprecated)","description":"Deprecated alias of `POST /benchmark/signfluxnodetransaction`. **Admin**","operationId":"signZelNodeTransactionPost","deprecated":true,"security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","properties":{"hexstring":{"type":"string"}}},"example":{"hexstring":"0400008085202f89"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/signfluxnodetransaction"}}}}}}}}},"/arcane/authchallenge":{"get":{"tags":["ArcaneOS"],"summary":"Request a configuration challenge","description":"Issues a one-time challenge bound to the requester's IP address, to be answered by `POST /arcane/configsync`. HTTPS only.\n\nAvailable **only on ArcaneOS nodes** — every other node answers `501`. A node whose `flux-configd` is not reachable answers `502`, and a requester that has exhausted its challenge allowance answers `429`. **Public**","operationId":"arcaneAuthChallenge","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"challenge":{"type":"string"}}}}},"example":{"status":"success","data":{"challenge":"8f14e45fceea167a5a36dedd4bea2543"}}}}},"400":{"description":"Requester IP address could not be determined"},"403":{"description":"Not an HTTPS connection (`ForbiddenProtocol`)"},"429":{"description":"Challenge limit reached for this requester"},"500":{"$ref":"#/components/responses/InternalServerError"},"501":{"description":"Not an ArcaneOS node"},"502":{"description":"`flux-configd` is not available"}}}},"/arcane/configsync":{"post":{"tags":["ArcaneOS"],"summary":"Synchronise node configuration","description":"Applies a signed configuration to an ArcaneOS node. Answer a challenge from `GET /arcane/authchallenge` with its encrypted form and a signature over it, alongside the configuration to apply. HTTPS only.\n\nAvailable **only on ArcaneOS nodes** — every other node answers `501`, and a node whose `flux-configd` is not reachable answers `502`. **Public** (the signed challenge is the credential)","operationId":"arcaneConfigSync","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["challenge","encryptedChallenge","signature","configData"],"properties":{"challenge":{"type":"string","description":"The challenge as issued"},"encryptedChallenge":{"type":"string"},"signature":{"type":"string"},"configData":{"type":"object","description":"The configuration to apply"}}},"example":{"challenge":"8f14e45fceea167a5a36dedd4bea2543","encryptedChallenge":"BASE64...","signature":"H+ZB3oSrsw6XkBxxlbwk33LEBJ...","configData":{"apiport":16127}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"$ref":"#/components/schemas/statusmessage"}}},"example":{"status":"success","data":{"message":"Configuration synchronised"}}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"description":"The challenge answer failed authentication"},"403":{"description":"Not an HTTPS connection (`ForbiddenProtocol`)"},"501":{"description":"Not an ArcaneOS node"},"502":{"description":"`flux-configd` is not available"}}}},"/hostinfo":{"servers":[{"url":"http://169.254.43.43:16101","description":"The node's host-information listener, reachable only from application containers on that node"}],"get":{"tags":["Apps"],"summary":"Host information for an app container","description":"Lets an application learn about the node it runs on. Served by a separate listener on port `16101`, bound to the link-local address `169.254.43.43`, so only the node's application containers can reach it.\n\nThe caller is identified by its socket address: it must lie inside the subnet of an application's Flux Docker network, and that application is named in `appName`. Any other caller is answered with the unauthorized error envelope. No `zelidauth` header is read.\n\n`id` is the node's collateral identifier (collateral transaction hash followed by its output index). `ip` is the node's public IP without the port. `geo` is the node's geolocation record without its `ip` and `org` fields. `benchmark` holds the node's benchmarked resources, from the live benchmark when it reports a valid tier and from the last stored benchmark otherwise; `eps_singlethread` appears only when the benchmark reports it. When the collateral, IP, geolocation or benchmark is not available yet, the call answers an error envelope naming which. **Public** (application containers on this node only)","operationId":"getHostInfo","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"appName":{"type":"string","description":"The application whose container is calling"},"id":{"type":"string","description":"Collateral transaction hash followed by its output index"},"ip":{"type":"string","description":"The node's public IP"},"geo":{"type":"object","description":"The node's geolocation record, without `ip` and `org`"},"benchmark":{"type":"object","properties":{"vcores":{"type":"number"},"ram":{"type":"number"},"disk":{"type":"number"},"diskwritespeed":{"type":"number"},"eps":{"type":"number"},"download_speed":{"type":"number"},"upload_speed":{"type":"number"},"eps_singlethread":{"type":"number"}}}}}}},"example":{"status":"success","data":{"appName":"myapp","id":"405e86b48a5d6846763f260154ca15383854ce5a2efad31474e55ff60cb629790","ip":"185.199.108.1","geo":{"continent":"Europe","continentCode":"EU","country":"Germany","countryCode":"DE","region":"HE","regionName":"Hesse","lat":50.1109,"lon":8.6821,"isp":"Hetzner Online GmbH","asn":"AS24940 Hetzner Online GmbH","mobile":false,"proxy":false,"hosting":true,"static":true,"dataCenter":true},"benchmark":{"vcores":8,"ram":7.1,"disk":220,"diskwritespeed":540.25,"eps":489.2,"download_speed":150.45,"upload_speed":50.21}}}}}}}}},"/payment/paymentrequest":{"get":{"tags":["Payments"],"summary":"Create a payment request","description":"Issues an id for one browser-and-wallet meeting. The page that wants paying listens on this node's WebSocket `/ws/payment/<paymentId>` and hands the wallet a callback to `POST /payment/verifypayment?paymentid=<paymentId>`; the transaction id the wallet posts there is delivered to that listener and to nothing else. The id (`<ms timestamp>_<32 hex chars>`) is unguessable, held in the issuing node's memory for one hour, valid only on that node, and spent once delivered (or dropped when the listening socket closes before an answer). Issuance is limited per caller address (the socket peer, or the address a recognised balancer reports): more than 5 per second answers `429` `Too many payment requests`, and a caller already holding 10 pending ids answers `429` `Too many pending payment requests`. **Public**","operationId":"paymentRequest","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"paymentId":{"type":"string"}}}}},"example":{"status":"success","data":{"paymentId":"1772719200000_3f9a1c0e7b2d4a6f8e1c3b5d7f9a2c4e"}}}}},"429":{"description":"Issuance rate (5/s) or pending-id cap (10) for this caller exceeded"}}}},"/payment/verifypayment":{"post":{"tags":["Payments"],"summary":"Deliver a wallet payment callback","description":"The callback a wallet posts after broadcasting its transaction. The transaction id (`transaction_id`, as ZelCore sends it, or `txid`; a string of at most 500 characters) is handed to the browser listening on `/ws/payment/<paymentid>` for an id minted by `GET /payment/paymentrequest` on this node, and the id is spent once the browser receives it. Nothing is verified and nothing is recorded: the transaction id is relayed as a claim, not checked against any chain (an app is paid when a transaction on chain matches its message hash). Any content type is accepted; a body no parser claims is limited to 10,000 bytes (`413`). Validation failures (`No payment ID is specified`, `Invalid payment ID format`, `No transaction ID is specified`, `Transaction ID must be a string`, `Invalid transaction ID length`, `Payment request not found or has expired`) are error envelopes. **Public**","operationId":"verifyPayment","security":[],"parameters":[{"in":"query","name":"paymentid","required":false,"schema":{"type":"string"},"description":"Payment request id, when not sent in the body","example":"1772719200000_k3j9xq2mv8p"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"paymentid":{"type":"string"},"transaction_id":{"type":"string","description":"Transaction id as sent by ZelCore"},"txid":{"type":"string","description":"Transaction id (equivalent to `transaction_id`)"}}},"example":{"paymentid":"1772719200000_3f9a1c0e7b2d4a6f8e1c3b5d7f9a2c4e","transaction_id":"9f2c1e..."}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"message":{"type":"string"},"paymentId":{"type":"string"},"txid":{"type":"string"},"success_url":{"type":"string"}}}}},"example":{"status":"success","data":{"message":"Payment received successfully","paymentId":"1772719200000_3f9a1c0e7b2d4a6f8e1c3b5d7f9a2c4e","txid":"9f2c1e...","success_url":"https://home.runonflux.io/successcheckout"}}}}},"413":{"description":"Request body too large"},"500":{"$ref":"#/components/responses/InternalServerError"}}}},"/syncthing/metrics":{"get":{"tags":["Syncthing"],"summary":"Full Syncthing metrics","description":"A complete snapshot of this node's Syncthing state — health, system, connections and per-folder figures — collected at request time. **FluxTeam**","operationId":"getSyncthingMetrics","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":{"timestamp":1772719200000,"overall":{"healthy":true,"syncProgress":100,"issues":[]}}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"}}}},"/syncthing/metrics/health":{"get":{"tags":["Syncthing"],"summary":"Syncthing health summary","description":"The condensed form of `GET /syncthing/metrics`: overall health, sync progress and issue list, plus system uptime, connection counts and folder counts. **FluxTeam**","operationId":"getSyncthingHealthSummary","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"timestamp":{"type":"integer"},"healthy":{"type":"boolean"},"syncProgress":{"type":"number"},"issues":{"type":"array","items":{"type":"string"}},"health":{"type":"object"},"system":{"type":"object"},"connections":{"type":"object"},"folders":{"type":"object"}}}}},"example":{"status":"success","data":{"timestamp":1772719200000,"healthy":true,"syncProgress":100,"issues":[],"health":{"status":"OK","error":null},"system":{"uptime":864000,"status":"running"},"connections":{"connected":12,"total":14},"folders":{"total":6,"syncing":0}}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"}}}},"/syncthing/metrics/history":{"get":{"tags":["Syncthing"],"summary":"Syncthing metrics history","description":"The most recent metrics snapshots this node has retained, oldest first. **FluxTeam**","operationId":"getSyncthingMetricsHistory","security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"integer","minimum":1},"description":"Most recent N snapshots; the full retained history when omitted","example":20}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"snapshots":{"type":"array","items":{"type":"object"}},"count":{"type":"integer"},"maxSnapshots":{"type":"integer"}}}}},"example":{"status":"success","data":{"snapshots":[],"count":0,"maxSnapshots":100}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"}}}},"/syncthing/peer/diagnostics":{"get":{"tags":["Syncthing"],"summary":"Peer sync diagnostics","description":"Per-peer synchronisation diagnostics for the folders this node shares — what each peer is connected as, how far it has got, and where a folder is stalled. **FluxTeam**","operationId":"getPeerSyncDiagnostics","security":[{"FluxID":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object"}}},"example":{"status":"success","data":{"timestamp":1772719200000,"localDeviceId":"P56IOI7-MZJNU2Y-IQGDREY-DM2MGTI-MGL3BXN-PQ6W5BM-TBBZ4TJ-XZWICQ2","summary":{"totalFolders":0,"foldersWithIssues":0,"cannotSyncFolders":[],"peersMoreUpdated":[],"disconnectedPeers":[],"connectedPeers":[]},"folders":{},"devices":{},"issues":[],"recommendations":[]}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"}}}},"/explorer/fusion/coinbase":{"get":{"tags":["Explorer"],"summary":"Fusion coinbase transactions for an address (deprecated)","description":"Fusion coinbase transactions belonging to an address. Retained for compatibility with the Fusion mining pool integration and no longer part of the maintained explorer surface. On a node whose daemon runs with insightexplorer the call answers the error \"Data unavailable. Deprecated\". **Public**","operationId":"getAddressFusionCoinbase","deprecated":true,"security":[],"parameters":[{"in":"query","name":"address","required":true,"schema":{"type":"string"},"description":"Flux transparent address","example":"t1Xyz9k4B4bfCkGtDNmPo3bNPGnZ8kzu9Sn"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"array","items":{"type":"object"}}}},"example":{"status":"success","data":[]}}}}}}},"/daemon/createzelnodekey":{"get":{"tags":["Daemon"],"summary":"Create fluxnode private key (deprecated)","description":"Deprecated alias of `GET /daemon/createfluxnodekey`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **Admin**","operationId":"createzelnodekey","deprecated":true,"security":[{"FluxID":[]}],"responses":{"200":{"description":"Identical to `GET /daemon/createfluxnodekey`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}},"/daemon/getzelnodecount":{"get":{"tags":["Daemon"],"summary":"Flux node count (deprecated)","description":"Deprecated alias of `GET /daemon/getfluxnodecount`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **Public**","operationId":"getzelnodecount","deprecated":true,"security":[],"responses":{"200":{"description":"Identical to `GET /daemon/getfluxnodecount`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}},"/daemon/getzelnodeoutputs":{"get":{"tags":["Daemon"],"summary":"Fluxnode transaction outputs (deprecated)","description":"Deprecated alias of `GET /daemon/getfluxnodeoutputs`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **Admin**","operationId":"getzelnodeoutputs","deprecated":true,"security":[{"FluxID":[]}],"responses":{"200":{"description":"Identical to `GET /daemon/getfluxnodeoutputs`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}},"/daemon/getzelnodestatus":{"get":{"tags":["Daemon"],"summary":"Flux node status (deprecated)","description":"Deprecated alias of `GET /daemon/getfluxnodestatus`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **Public**","operationId":"getzelnodestatus","deprecated":true,"security":[],"responses":{"200":{"description":"Identical to `GET /daemon/getfluxnodestatus`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}},"/daemon/listzelnodeconf":{"get":{"tags":["Daemon"],"summary":"The fluxnode conf file (deprecated)","description":"Deprecated alias of `GET /daemon/listfluxnodeconf`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **Admin**","operationId":"listzelnodeconf","deprecated":true,"security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"filter","required":false,"schema":{"type":"string"},"description":"Filter the list","example":"ENABLED"}],"responses":{"200":{"description":"Identical to `GET /daemon/listfluxnodeconf`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}},"/daemon/listzelnodes":{"get":{"tags":["Daemon"],"summary":"Flux node list (deprecated)","description":"Deprecated alias of `GET /daemon/listfluxnodes`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **Public**","operationId":"listzelnodes","deprecated":true,"security":[],"parameters":[{"in":"query","name":"filter","required":false,"schema":{"type":"string"},"description":"Filter the list","example":"ENABLED"},{"in":"query","name":"limit","required":false,"schema":{"type":"integer","minimum":1,"maximum":9999999},"description":"Return only the first `limit` entries of the ranked list. Applied only to a successful answer and only when the value is a whole number from 1 to 9999999 without a leading zero; any other value is ignored and the full list is returned.","example":100}],"responses":{"200":{"description":"Identical to `GET /daemon/listfluxnodes`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}},"/daemon/startdeterministiczelnode":{"get":{"tags":["Daemon"],"summary":"Start fluxnode command (deprecated)","description":"Deprecated alias of `GET /daemon/startdeterministicfluxnode`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **Admin**","operationId":"startdeterministiczelnode","deprecated":true,"security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"alias","required":false,"schema":{"type":"string"},"description":"FluxNode alias","example":"mynode"},{"in":"query","name":"lockwallet","required":false,"schema":{"type":"boolean"},"description":"Lock the wallet afterwards","example":false}],"responses":{"200":{"description":"Identical to `GET /daemon/startdeterministicfluxnode`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}},"/daemon/startzelnode":{"get":{"tags":["Daemon"],"summary":"Start FluxNode command (deprecated)","description":"Deprecated alias of `GET /daemon/startfluxnode`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **Admin**","operationId":"startzelnode","deprecated":true,"security":[{"FluxID":[]}],"parameters":[{"in":"query","name":"set","required":false,"schema":{"type":"string"},"description":"Which set of FluxNode(s) to start, as for `GET /daemon/startfluxnode`","example":"alias"},{"in":"query","name":"lockwallet","required":false,"schema":{"type":"boolean"},"description":"Lock the wallet afterwards","example":false},{"in":"query","name":"alias","required":false,"schema":{"type":"string"},"description":"FluxNode alias","example":"mynode"}],"responses":{"200":{"description":"Identical to `GET /daemon/startfluxnode`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}},"/daemon/viewdeterministiczelnodelist":{"get":{"tags":["Daemon"],"summary":"Deterministic FluxNode list (deprecated)","description":"Deprecated alias of `GET /daemon/viewdeterministicfluxnodelist`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **Public**","operationId":"viewdeterministiczelnodelist","deprecated":true,"security":[],"parameters":[{"in":"query","name":"filter","required":false,"schema":{"type":"string"},"description":"Filter the list","example":"ENABLED"},{"in":"query","name":"limit","required":false,"schema":{"type":"integer","minimum":1,"maximum":9999999},"description":"Return only the first `limit` entries of the ranked list. Applied only to a successful answer and only when the value is a whole number from 1 to 9999999 without a leading zero; any other value is ignored and the full list is returned.","example":100}],"responses":{"200":{"description":"Identical to `GET /daemon/viewdeterministicfluxnodelist`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}},"/zelid/loginphrase":{"get":{"tags":["ID"],"summary":"Obtain login phrase (deprecated)","description":"Deprecated alias of `GET /id/loginphrase`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **Public**","operationId":"zelidLoginPhrase","deprecated":true,"security":[],"responses":{"200":{"description":"Identical to `GET /id/loginphrase`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}},"/zelid/emergencyphrase":{"get":{"tags":["ID"],"summary":"Obtain emergency login phrase (deprecated)","description":"Deprecated alias of `GET /id/emergencyphrase`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **Public**","operationId":"zelidEmergencyPhrase","deprecated":true,"security":[],"responses":{"200":{"description":"Identical to `GET /id/emergencyphrase`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}},"/zelid/loggedsessions":{"get":{"tags":["ID"],"summary":"Obtain all logged sessions of a FluxID (deprecated)","description":"Deprecated alias of `GET /id/loggedsessions`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **User**","operationId":"zelidLoggedSessions","deprecated":true,"security":[{"FluxID":[]}],"responses":{"200":{"description":"Identical to `GET /id/loggedsessions`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}},"/zelid/loggedusers":{"get":{"tags":["ID"],"summary":"Gets information about logged users (deprecated)","description":"Deprecated alias of `GET /id/loggedusers`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **Admin**","operationId":"zelidLoggedUsers","deprecated":true,"security":[{"FluxID":[]}],"responses":{"200":{"description":"Identical to `GET /id/loggedusers`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}},"/zelid/activeloginphrases":{"get":{"tags":["ID"],"summary":"Lists active login phrases (deprecated)","description":"Deprecated alias of `GET /id/activeloginphrases`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **Admin**","operationId":"zelidActiveLoginPhrases","deprecated":true,"security":[{"FluxID":[]}],"responses":{"200":{"description":"Identical to `GET /id/activeloginphrases`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}},"/zelid/logoutcurrentsession":{"get":{"tags":["ID"],"summary":"Logs out current session (deprecated)","description":"Deprecated alias of `GET /id/logoutcurrentsession`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **User**","operationId":"zelidLogoutCurrentSession","deprecated":true,"security":[{"FluxID":[]}],"responses":{"200":{"description":"Identical to `GET /id/logoutcurrentsession`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}},"/zelid/logoutallsessions":{"get":{"tags":["ID"],"summary":"Logs out all sessions (deprecated)","description":"Deprecated alias of `GET /id/logoutallsessions`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **User**","operationId":"zelidLogoutAllSessions","deprecated":true,"security":[{"FluxID":[]}],"responses":{"200":{"description":"Identical to `GET /id/logoutallsessions`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}},"/zelid/logoutallusers":{"get":{"tags":["ID"],"summary":"Logs out all users (deprecated)","description":"Deprecated alias of `GET /id/logoutallusers`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **Admin**","operationId":"zelidLogoutAllUsers","deprecated":true,"security":[{"FluxID":[]}],"responses":{"200":{"description":"Identical to `GET /id/logoutallusers`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}},"/zelid/verifylogin":{"post":{"tags":["ID"],"summary":"Login into Flux (deprecated)","description":"Deprecated alias of `POST /id/verifylogin`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **Public**","operationId":"zelidVerifyLogin","deprecated":true,"security":[],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","description":"Identical to the body of `POST /id/verifylogin`."}}}},"responses":{"200":{"description":"Identical to `POST /id/verifylogin`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}},"/zelid/providesign":{"post":{"tags":["ID"],"summary":"Provide signature (deprecated)","description":"Deprecated alias of `POST /id/providesign`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **Public**","operationId":"zelidProvideSign","deprecated":true,"security":[],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","description":"Identical to the body of `POST /id/providesign`."}}}},"responses":{"200":{"description":"Identical to `POST /id/providesign`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}},"/zelid/checkprivilege":{"post":{"tags":["ID"],"summary":"Checks the privilege level of a user (deprecated)","description":"Deprecated alias of `POST /id/checkprivilege`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **Public**","operationId":"zelidCheckPrivilege","deprecated":true,"security":[],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","description":"Identical to the body of `POST /id/checkprivilege`."}}}},"responses":{"200":{"description":"Identical to `POST /id/checkprivilege`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}},"/zelid/logoutspecificsession":{"post":{"tags":["ID"],"summary":"Logs out a specific session (deprecated)","description":"Deprecated alias of `POST /id/logoutspecificsession`, kept for callers written against the pre-rebrand vocabulary. Identical behaviour and identical response; use the canonical endpoint in new code. **User**","operationId":"zelidLogoutSpecificSession","deprecated":true,"security":[{"FluxID":[]}],"requestBody":{"required":true,"content":{"text/plain":{"schema":{"type":"object","description":"Identical to the body of `POST /id/logoutspecificsession`."}}}},"responses":{"200":{"description":"Identical to `POST /id/logoutspecificsession`","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"description":"As returned by the canonical endpoint"}}}}}}}}}},"components":{"schemas":{"operation":{"type":"object","description":"The state of a long-running operation, as served by GET /apps/operations/{jobId}.","properties":{"jobId":{"type":"string","description":"Operation id, of the form `op_<uuid>`"},"kind":{"type":"string","description":"What the operation is doing, e.g. `fileoperation.copy`"},"status":{"type":"string","description":"`Running`, or one of the terminal states. `Evicted` means the node took the work away — distinct from `Canceled`, which the caller asked for, and from `Failed`, where the caller's input was at fault.","enum":["Running","Succeeded","Failed","Canceled","Evicted"]},"createdAt":{"type":"integer","description":"Unix milliseconds"},"lastUpdatedAt":{"type":"integer","description":"Unix milliseconds"},"progress":{"type":"array","description":"Line-numbered progress output; use `sinceSeq` to read only what is new","items":{"type":"string"}},"error":{"nullable":true,"type":"object","description":"An RFC 9457 problem object when the operation failed, otherwise null. Registry credentials are scrubbed from `detail`.","properties":{"type":{"type":"string"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"},"code":{"type":"string"},"retryAfterMs":{"type":"integer"}}},"detail":{"nullable":true,"type":"object","description":"Operation-specific detail, built at read time"}}},"volumeObjectOperation":{"type":"object","description":"Operands for a file operation inside an application's persistent volume. Each field may also be sent as a query parameter.","required":["appname","component","source","destination"],"properties":{"appname":{"type":"string","description":"Application name"},"component":{"type":"string","description":"Component name; `null` for a pre-v4 (single-component) application"},"source":{"oneOf":[{"type":"string"},{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"string"}}],"description":"Path relative to the volume root. `POST /apps/compressobject` also accepts a list of up to 1000 paths; the other operations take one."},"destination":{"type":"string","description":"Path relative to the volume root"},"overwrite":{"type":"boolean","description":"Replace an existing destination. `false` by default, in which case an occupied destination is refused.","default":false}}},"placementAdvice":{"type":"object","description":"The answer of POST /apps/placementfeasibility.","properties":{"instances":{"type":"integer","description":"The instance count the answer was computed for"},"candidateCount":{"type":"integer","description":"Eligible nodes for the spec's geolocation and tier requirements"},"domainCount":{"type":"integer","description":"Distinct fault domains among the candidates"},"maxPerDomain":{"type":"integer","description":"Instances that would have to share a single fault domain"},"placeable":{"type":"boolean"},"tableAvailable":{"type":"boolean","description":"Whether the IP location table was available"},"tableGenerated":{"type":"string","nullable":true},"syncedApp":{"type":"boolean","description":"Whether any component of the spec is synced"},"category":{"type":"string","description":"The availability promise the network can make for this spec","enum":["ok","constrained","impossible"]},"constrained":{"type":"boolean"},"satisfiable":{"type":"boolean"},"normalizedGeolocation":{"type":"array","items":{"type":"string"}},"coarsenedEntries":{"type":"array","description":"Geolocation entries that had to be widened to be answerable","items":{"type":"string"}}}},"signature":{"description":"Signature of signed loginPhrase with zelid.","type":"string","example":"H+ZB3oSrsw6XkBxxlbwk33LEBJYvqtbMIm2kL9JzuoXMC6pSZd0lBHdnhJYzMTXv81zZQ7G/pkK1NvYN7cNF0GE="},"FluxIDLogin":{"type":"object","properties":{"loginPhrase":{"description":"Login Phrase. Provided by GET /id/loginphrase.","type":"string","minLength":40,"example":"1574991374806spbcvsuwerl52tppx9dw5khuz8rew13mkq86gg8r2c"},"zelid":{"description":"FluxID or any P2PKH bitcoin address or ethereum address","type":"string","minLength":25,"maxLength":42,"example":"1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC"},"signature":{"$ref":"#/components/schemas/signature"}}},"status":{"type":"string","description":"Explanation of status","enum":["success","error"]},"nullmessage":{"type":"string","description":"Null. Status will return with success if call/command was successful."},"statusmessage":{"type":"object","properties":{"message":{"type":"string","description":"Explanation of status"}}},"streamdata":{"type":"object","properties":{"status":{"type":"string","description":"Status of installation"},"progressDetail":{"type":"object","properties":{"current":{"type":"integer","description":"Progress in bytes"},"total":{"type":"integer","description":"Total byte size of download"}}},"progress":{"type":"string","description":"Progress bar animation to the download"},"id":{"type":"string","description":"Operation Id"},"data":{"oneOf":[{"type":"object","properties":{"message":{"type":"string","description":"Message of volume creation being completed"}}},{"type":"string","description":"Message of app successfully being started"}]}}},"benchstatus":{"type":"object","properties":{"status":{"type":"string","description":"Status of server"},"benchmarking":{"type":"string","description":"Tier server passed for CUMULUS/NIMMBUS/STRATUS"},"zelback":{"type":"string","description":"Status of Flux backend"}}},"benchinfo":{"type":"object","properties":{"version":{"type":"string","description":"Version number"},"rpcport":{"type":"integer","description":"Rpc port number"}}},"createmultisig":{"type":"object","properties":{"address":{"type":"string","description":"The value of the new multisig address"},"redeemScript":{"type":"string","description":"The string value of the hex-encoded redemption script"}}},"decodescript":{"type":"object","properties":{"asm":{"type":"string","description":"Script public key"},"reqSigs":{"type":"integer","description":"The required signatures"},"type":{"type":"string","description":"The output type"},"addresses":{"type":"array","items":{"type":"string","description":"Flux address"}},"p2sh":{"type":"string","description":"Script address"}}},"decoderawtransaction":{"type":"object","properties":{"txid":{"type":"string","description":"The transaction id"},"version":{"type":"integer","description":"The version"},"overwintered":{"type":"boolean","description":"The Overwintered flag"},"versiongroupid":{"type":"string","description":"The version group id"},"locktime":{"type":"integer","description":"The lock time"},"expiryheight":{"type":"integer","description":"Last valid block height for mining transaction"},"vin":{"type":"array","items":{"type":"object","properties":{"txid":{"type":"string","description":"The transaction id"},"vout":{"type":"integer","description":"The output index"},"scriptSig":{"type":"object","properties":{"asm":{"type":"string","description":"Script public key"},"hex":{"type":"string","description":"The hex"}}},"sequence":{"type":"integer","description":"The script sequence number"}}}},"vout":{"$ref":"#/components/schemas/vout"},"vJoinSplit":{"$ref":"#/components/schemas/joinsplit"},"valueBalance":{"type":"number","description":"The balance value of FLUX"},"valueBalanceZat":{"type":"number","description":"The balance value of FLUX"},"vShieldedSpend":{"$ref":"#/components/schemas/shieldedspend"},"vShieldedOutput":{"$ref":"#/components/schemas/shieldedoutput"}}},"getbenchmarks":{"type":"object","properties":{"ipaddress":{"type":"string","description":"Ip address of FluxNode server"},"architecture":{"type":"string","description":"System architecture"},"armboard":{"type":"string","description":"ARM board model"},"status":{"type":"string","description":"CUMULUS/NIMMBUS/STRATUS"},"time":{"type":"integer","description":"Time of bench in epoch time"},"real_cores":{"type":"string","description":"The amount of physical cores detected"},"cores":{"type":"integer","description":"The amount of vcores detected"},"ram":{"type":"number","description":"The amount of ram detected"},"ssd":{"type":"number","description":"The amount of ssd space detected"},"hdd":{"type":"number","description":"The amount of hdd space detected"},"dd_write":{"type":"number","description":"The amount of write speed detected"},"totalstorage":{"type":"number","description":"The amount of hdd and ssd space detected"},"disksinfo":{"type":"array","items":{"type":"object","description":"Disks information","properties":{"disk":{"type":"string","description":"Disk name"},"size":{"type":"number","description":"The amount of space detected"},"writespeed":{"type":"number","description":"The amount of write speed detected"}}}},"eps":{"type":"number","description":"The amount of cpu speed detected"},"ping":{"type":"number","description":"Ping number in ms"},"download_speed":{"type":"number","description":"Download speed"},"upload_speed":{"type":"number","description":"Upload speed"},"bench_version":{"type":"string","description":"Benchmark version"},"speed_version":{"type":"string","description":"Speedtest version"},"thunder":{"type":"boolean","description":"True if fractus mode enabled"},"error":{"type":"string","description":"Error message"}}},"joinsplit":{"type":"array","items":{"type":"object","description":"This is related to sprout tx's","properties":{"vpub_old":{"type":"number","description":"Public input value of FLUX"},"vpub_oldZat":{"type":"integer","description":"Public input value of FLUX in satoshis"},"vpub_new":{"type":"number","description":"Public output of FLUX"},"vpub_newZat":{"type":"integer","description":"Public output of FLUX in satoshis"},"anchor":{"type":"string","description":"Merkle root of note commitment tree"},"nullifiers":{"type":"array","items":{"type":"string","description":"Input note nullifier"}},"commitments":{"type":"array","items":{"type":"string","description":"Output note commitment"}},"onetimePubKey":{"type":"string","description":"The onetime public key used to encrypt the cipertexts"},"randomSeed":{"type":"string","description":"The random seed"},"macs":{"type":"array","items":{"type":"string","description":"Input note MAC"}},"proof":{"type":"string","description":"The zero-knowledge proof"},"ciphertexts":{"type":"array","items":{"type":"string","description":"Output note ciphertext"}}}}},"shieldedoutput":{"type":"array","items":{"type":"object","properties":{"cv":{"type":"string","description":"Output cv note"},"cmu":{"type":"string","description":"Output cmu note"},"ephemeralKey":{"type":"string","description":"The ephemeral key"},"encCiphertext":{"type":"string","description":"The encrypted ciphertext"},"outCiphertext":{"type":"string","description":"Output note ciphertext"},"proof":{"type":"string","description":"The zero-knowledge proof"}}}},"shieldedspend":{"type":"array","items":{"type":"object","properties":{"cv":{"type":"string","description":"The cv note encryption"},"anchor":{"type":"string","description":"Merkle root of note commitment tree"},"nullifier":{"type":"string","description":"The nullifier"},"rk":{"type":"string","description":"The prover key"},"proof":{"type":"string","description":"The proof"},"spendAuthSig":{"type":"string","description":"The spend signature"}}}},"signfluxnodetransaction":{"type":"object","properties":{"status":{"type":"string","description":"Explanation of status"},"tier":{"type":"string","description":"Tier of FluxNode"},"hex":{"type":"string","description":"Hex encoded info of the transaction"}}},"startfluxnode":{"type":"object","properties":{"overall":{"type":"string","description":"Overall status messge"},"detail":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string","description":"Node name or alias"},"result":{"type":"string","description":"Success or failed"},"error":{"type":"string","description":"Error message if failed"}}}}}},"vout":{"type":"array","items":{"type":"object","properties":{"value":{"type":"number","description":"The value in FLUX"},"valueZat":{"type":"integer","description":"The value in FLUX"},"valueSat":{"type":"integer","description":"The value in FLUX"},"n":{"type":"integer","description":"Index"},"scriptPubKey":{"type":"object","properties":{"asm":{"type":"string","description":"Script public key"},"hex":{"type":"string","description":"The hex"},"reqSigs":{"type":"integer","description":"The required sigs"},"type":{"type":"string","description":"The type, eg pubkeyhash"},"addresses":{"type":"array","items":{"type":"string","description":"FLUX addresses"}}}}}}},"appslocation":{"type":"array","items":{"type":"object","properties":{"ip":{"type":"string","description":"IP address of app"},"name":{"type":"string","description":"App name"},"broadcastedAt":{"type":"string","description":"Start date and timestamp of app"},"expireAt":{"type":"string","description":"Expiration date and timestamp of app"},"hash":{"type":"string","description":"App hash"}}}},"appname":{"type":"object","properties":{"name":{"type":"string","description":"Name of app"},"compose":{"type":"array","items":{"type":"object","description":"component specification","properties":{"name":{"type":"string","description":"Name of app"},"description":{"type":"string","description":"Description of component"},"repotag":{"type":"string","description":"Repotag of docker image in this format `namespace/repository:tag`"},"ports":{"type":"array","items":{"type":"integer","description":"Ports list"}},"domains":{"type":"array","items":{"type":"string","description":"Domain list"}},"enviromentParameters":{"type":"array","items":{"type":"string","description":"Environment variables"}},"commands":{"type":"array","items":{"type":"string","description":"Execution list"}},"containerPorts":{"type":"array","items":{"type":"integer","description":"Container ports"}},"containerData":{"type":"string","description":"Directory the data is stored and what dir is tied to the system folder"},"cpu":{"type":"number","description":"CPU amount requesting"},"ram":{"type":"integer","description":"Ram amount requesting in MB"},"hdd":{"type":"integer","description":"Storage space requesting in GB"},"tiered":{"type":"boolean","description":"If set to true you will also need following key/value pairs to provide tiered info. If false do not add the following key/value pairs."},"cpubasic":{"type":"number","description":"CPU amount"},"cpusuper":{"type":"number","description":"CPU amount"},"cpubamf":{"type":"number","description":"CPU amount"},"rambasic":{"type":"integer","description":"Ram amount in MB"},"ramsuper":{"type":"integer","description":"Ram amount in MB"},"rambamf":{"type":"integer","description":"Ram amount in MB"},"hddbasic":{"type":"integer","description":"Storage space in GB"},"hddsuper":{"type":"integer","description":"Storage space in GB"},"hddbamf":{"type":"integer","description":"Storage space in GB"},"secrets":{"type":"string","description":"Encrypted environmental accessible to selected Enterprise Nodes only."},"repoauth":{"type":"string","description":"Docker image authentication for private images in the format of username:apikey. This field will be encrypted and accessible to selected Enterprise Nodes only."}}}},"contacts":{"type":"array","items":{"type":"string","description":"Mail list"}},"description":{"type":"string","description":"Description of app"},"expire":{"type":"integer","description":"Number of blocks after apps expire"},"geolocation":{"type":"array","items":{"type":"string","description":"Geolocation symbols"}},"hash":{"type":"string","description":"Transation hash"},"height":{"type":"integer","description":"Block height"},"instances":{"type":"integer","description":"Instances number"},"nodes":{"type":"array","items":{"type":"string","description":"Enterprise Nodes IP list"}},"owner":{"type":"string","description":"Your FluxID"},"staticip":{"type":"boolean","enum":[true,false],"description":"If set to true apps will be installed of nodes with static IP only."},"version":{"type":"integer","description":"Version of message which is 7"}}},"appsresources":{"type":"object","properties":{"appsCpusLocked":{"type":"number","description":"Amount of cores app is using"},"appsRamLocked":{"type":"integer","description":"Amount of ram app is using"},"appsHddLocked":{"type":"integer","description":"Amount of disk space app is using"}}},"appspecification":{"type":"object","properties":{"version":{"type":"integer","description":"Version of message which is 7"},"name":{"type":"string","description":"Name of app"},"description":{"type":"string","description":"Description of app"},"owner":{"type":"string","description":"Your FluxID"},"compose":{"type":"array","items":{"type":"object","description":"component specification","properties":{"name":{"type":"string","description":"Name of app"},"description":{"type":"string","description":"Description of component"},"repotag":{"type":"string","description":"Repotag of docker image in this format `namespace/repository:tag`"},"ports":{"type":"array","items":{"type":"integer","description":"Ports list"}},"domains":{"type":"array","items":{"type":"string","description":"Domain list"}},"enviromentParameters":{"type":"array","items":{"type":"string","description":"Environment variables"}},"commands":{"type":"array","items":{"type":"string","description":"Execution list"}},"containerPorts":{"type":"array","items":{"type":"integer","description":"Container ports"}},"containerData":{"type":"string","description":"Directory the data is stored and what dir is tied to the system folder"},"cpu":{"type":"number","description":"CPU amount requesting"},"ram":{"type":"integer","description":"Ram amount requesting in MB"},"hdd":{"type":"integer","description":"Storage space requesting in GB"},"tiered":{"type":"boolean","description":"If set to true you will also need following key/value pairs to provide tiered info. If false do not add the following key/value pairs."},"cpubasic":{"type":"number","description":"CPU amount"},"cpusuper":{"type":"number","description":"CPU amount"},"cpubamf":{"type":"number","description":"CPU amount"},"rambasic":{"type":"integer","description":"Ram amount in MB"},"ramsuper":{"type":"integer","description":"Ram amount in MB"},"rambamf":{"type":"integer","description":"Ram amount in MB"},"hddbasic":{"type":"integer","description":"Storage space in GB"},"hddsuper":{"type":"integer","description":"Storage space in GB"},"hddbamf":{"type":"integer","description":"Storage space in GB"},"secrets":{"type":"string","description":"Array of strings of Secret Environmental Parameters. This will be encrypted and accessible to selected Enterprise Nodes only."},"repoauth":{"type":"string","description":"Docker image authentication for private images in the format of username:apikey. This field will be encrypted and accessible to selected Enterprise Nodes only."}}}},"instances":{"type":"integer","description":"Instances number"},"contacts":{"type":"array","items":{"type":"string","description":"Mail list"}},"geolocation":{"type":"array","items":{"type":"string","description":"Geolocation symbols"}},"expire":{"type":"integer","description":"Number of blocks after apps expire"},"nodes":{"type":"array","items":{"type":"string","description":"Enterprise Nodes IP list"}},"staticip":{"type":"boolean","description":"If set to true apps will be installed of nodes with static IP only."}}},"daemongetinfo":{"type":"object","properties":{"version":{"type":"integer","description":"The server version"},"protocolversion":{"type":"integer","description":"The protocol version"},"walletversion":{"type":"integer","description":"The wallet version"},"balance":{"type":"number","description":"The total Flux balance of the wallet"},"blocks":{"type":"integer","description":"The current number of blocks processed in the server"},"timeoffset":{"type":"integer","description":"The time offset"},"connections":{"type":"integer","description":"The number of connections"},"proxy":{"type":"string","description":"The proxy used by the server"},"difficulty":{"type":"number","description":"The current difficulty"},"testnet":{"type":"boolean","description":"If the server is using testnet or not"},"keypoololdest":{"type":"integer","description":"The timestamp (seconds since GMT epoch) of the oldest pre-generated key in the key pool"},"keypoolsize":{"type":"integer","description":"How many new keys are pre-generated"},"paytxfee":{"type":"number","description":"The transaction fee set at FLUX/kB"},"relayfee":{"type":"number","description":"Minimum relay fee for non-free transactions in FLUX/kB"},"errors":{"type":"string","description":"Any error messages"}}},"geolocation":{"type":"object","properties":{"ip":{"type":"string","description":"IP address"},"continent":{"type":"string","description":"Continent name"},"continentCode":{"type":"string","description":"Continent code"},"country":{"type":"string","description":"Country name"},"countryCode":{"type":"string","description":"Continent code"},"region":{"type":"string","description":"Region code"},"regionName":{"type":"string","description":"Region name"},"lat":{"type":"number","description":"Latitude parameter"},"lon":{"type":"number","description":"Longitude parameter"},"org":{"type":"string","description":"Organization name"}}},"fluxnodestatus":{"type":"object","properties":{"status":{"type":"string","description":"FluxNode status"},"collateral":{"type":"string","description":"Collateral transaction"},"txhash":{"type":"string","description":"Collateral transaction hash"},"outidx":{"type":"integer","description":"Collateral transaction output index number"},"ip":{"type":"string","description":"FluxNode network address"},"network":{"type":"string","description":"Network type (IPv4, IPv6, onion)"},"added_height":{"type":"integer","description":"Block height when FluxNode was added"},"confirmed_height":{"type":"integer","description":"Block height when FluxNode was confirmed"},"last_confirmed_height":{"type":"integer","description":"Last block height when FluxNode was confirmed"},"last_paid_height":{"type":"integer","description":"Last block height when FluxNode was paid"},"tier":{"type":"string","description":"Tier (CUMULUS/NIMMBUS/STRATUS)"},"payment_address":{"type":"string","description":"FLUX address for FluxNode payments"},"pubkey":{"type":"string","description":"FluxNode public key used for message broadcasting"},"activesince":{"type":"string","description":"The time in seconds since epoch (Jan 1 1970 GMT) FluxNode has been active"},"lastpaid":{"type":"string","description":"The time in seconds since epoch (Jan 1 1970 GMT) FluxNode was last paid"},"amount":{"type":"string","description":"Locked collateral amount"}}},"containerinfo":{"type":"array","items":{"type":"object","properties":{"Id":{"type":"string","description":"ID of this container"},"Names":{"type":"array","items":{"type":"string","description":"The names that this container has been given"}},"Image":{"type":"string","description":"The name of the image used when creating this container"},"ImageID":{"type":"string","description":"The ID of the image that this container was created from"},"Command":{"type":"string","description":"Command to run when starting the container"},"Created":{"type":"integer","description":"When the container was created in epoch time"},"Ports":{"type":"array","items":{"type":"object","properties":{"PrivatePort":{"type":"integer","description":"Port on the container"},"Type":{"type":"string","enum":["tcp","udp","sctp"],"description":"tcp, udp, sctp"},"IP":{"type":"string","description":"Host IP address that the container's port is mapped to"},"PublicPort":{"type":"integer","description":"Port exposed on the host"},"HostConfig":{"type":"object","properties":{"NetworkMode":{"type":"string","description":"Network mode of container"}}},"NetworkSettings":{"type":"object","description":"A summary of the container's network settings","properties":{"Networks":{"type":"object","description":"Configuration for a network endpoint.","properties":{"fluxDockerNetwork":{"$ref":"#/components/schemas/fluxnetwork"}}}}},"Mounts":{"$ref":"#/components/schemas/mounts"}}}},"Labels":{"type":"object","description":"User-defined key/value metadata","properties":{"description":{"type":"string","description":"Description of app"},"maintainer":{"type":"string","description":"Name/alias of creator/maintainer of app"},"repository":{"type":"string","description":"Url to repository"},"version":{"type":"number","description":"Version number"}}},"State":{"type":"string","description":"State/status of the container"},"Status":{"type":"string","description":"Additional human-readable status of this container"}}}},"mounts":{"type":"array","items":{"type":"object","properties":{"Type":{"type":"string","enum":["bind","volume","tmpfs","npipe"],"description":"Mount type"},"Source":{"type":"string","description":"Path of dir to mount"},"Destination":{"type":"string","description":"Dir of container to bind mount"},"Mode":{"type":"string","description":"Bind mount mode"},"RW":{"type":"boolean","description":"Whether the mount should be read-write"},"Propagation":{"type":"string","enum":["private","rprivate","shared","rshared","slave","rslave"],"description":"A propagation mode with the value [r]private, [r]shared, or [r]slave."}}}},"fluxnetwork":{"type":"object","properties":{"IPAMConfig":{"type":"string","description":"EndpointIPAMConfig represents an endpoint's IPAM configuration"},"Links":{"type":"string","description":"Links"},"Aliases":{"type":"string","description":"Aliases"},"NetworkID":{"type":"string","description":"Unique ID of the network"},"EndpointID":{"type":"string","description":"Unique ID for the service endpoint in a Sandbox"},"Gateway":{"type":"string","description":"Gateway address for this network"},"IPAddress":{"type":"string","description":"IPv4 address"},"IPPrefixLen":{"type":"string","description":"Mask length of the IPv4 address"},"IPv6Gateway":{"type":"string","description":"IPv6 gateway address"},"GlobalIPv6Address":{"type":"string","description":"Global IPv6 address"},"GlobalIPv6PrefixLen":{"type":"string","description":"Mask length of the global IPv6 address"},"MacAddress":{"type":"string","description":"MAC address for the endpoint on this network"},"DriverOpts":{"type":"string","description":"DriverOpts is a mapping of driver options and values. These options are passed directly to the driver and are driver specific."}}},"UnauthorizedError":{"type":"object","description":"Authentication/authorization error","properties":{"status":{"type":"string","enum":["error"]},"data":{"type":"object","properties":{"name":{"type":"string","example":"UnauthorizedAccess"},"message":{"type":"string","example":"Unauthorized. Invalid signature or insufficient privilege."},"code":{"type":"string","example":"UNAUTHORIZED"}}}}},"ValidationError":{"type":"object","description":"Input validation error","properties":{"status":{"type":"string","enum":["error"]},"data":{"type":"object","properties":{"name":{"type":"string","example":"ValidationError"},"message":{"type":"string","example":"Invalid input parameters"},"code":{"type":"string","example":"VALIDATION_ERROR"},"details":{"type":"array","description":"Detailed validation errors","items":{"type":"object","properties":{"field":{"type":"string","description":"Field name that failed validation"},"message":{"type":"string","description":"Validation error message"}}}}}}}},"InternalServerError":{"type":"object","description":"Internal server error","properties":{"status":{"type":"string","enum":["error"]},"data":{"type":"object","properties":{"name":{"type":"string","example":"InternalError"},"message":{"type":"string","example":"Internal server error occurred"},"code":{"type":"string","example":"INTERNAL_ERROR"}}}}},"ServiceUnavailableError":{"type":"object","description":"Service temporarily unavailable","properties":{"status":{"type":"string","enum":["error"]},"data":{"type":"object","properties":{"name":{"type":"string","example":"ServiceUnavailable"},"message":{"type":"string","example":"Service is temporarily unavailable"},"code":{"type":"string","example":"SERVICE_UNAVAILABLE"}}}}}},"responses":{"OperationAccepted":{"description":"The work was accepted and is running. Poll the `statusUrl` — completion is read from the operation's `status` field, never from this response.","headers":{"Location":{"description":"The operation's status URL","schema":{"type":"string"}},"Operation-Id":{"description":"The operation id","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before the first poll","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/status"},"data":{"type":"object","properties":{"jobId":{"type":"string"},"statusUrl":{"type":"string"},"status":{"type":"string"}}}}},"example":{"status":"success","data":{"jobId":"op_2f8f1a1c-1a2b-4c3d-9e8f-0a1b2c3d4e5f","statusUrl":"/apps/operations/op_2f8f1a1c-1a2b-4c3d-9e8f-0a1b2c3d4e5f","status":"Running"}}}}},"UnauthorizedError":{"description":"Authentication failed or insufficient privileges","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}}},"ValidationError":{"description":"Input validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"InternalServerError":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}}},"ServiceUnavailableError":{"description":"Service temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"}}}}},"securitySchemes":{"FluxID":{"description":"FluxID (formerly ZelID) is an authentication system based on Bitcoin message signing and Ethereum personal sign. The header keeps its original name, `zelidauth`: a query string of zelid, signature and loginPhrase (see Authentication Workflows for how to obtain one). An example of a header is `zelid=1CbErtneaX2QVyUfwU7JGB7VzvPgrgc3uC&signature=%2BZB3oSrsw6XkBxxlbwk33LEBJYvqtbMIm2kL9JzuoXMC6pSZd0lBHdnhJYzMTXv81zZQ7G%2FpkK1NvYN7cNF0GE%3D&loginPhrase=1574991374806spbcvsuwerl52tppx9dw5khuz8rew13mkq86gg8r2c`","type":"apiKey","in":"header","name":"zelidauth"}}}}