{"openapi":"3.1.0","info":{"title":"mintrr API","description":"Mintrr - All-in-One Smart Asset Lifecycle. Non-custodial, fail-closed, real-chain first. Private alpha: features and interfaces may change without notice. All write routes require Bearer token and are rate limited. Swagger is read-only - Try it out is disabled for safety.","version":"2.0.0"},"paths":{"/v1/review":{"post":{"summary":"Review Endpoint","description":"Custody report for a Solidity source (read scope, no signing, no storage).","operationId":"review_endpoint_v1_review_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Review Endpoint V1 Review Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/agents/draft":{"post":{"tags":["agents"],"summary":"Agent Draft","description":"Compose a read-only draft: validated plans + marker-verified sources +\ncustody reviews. The service never signs, never broadcasts, and cannot —\nthe agent's own token and this endpoint's surface structurally exclude it.","operationId":"agent_draft_v1_agents_draft_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftRequestBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/agents/capability":{"get":{"tags":["agents"],"summary":"Agent Capability","description":"Machine-readable statement of what the agent draft surface can and\ncannot do (read scope suffices — this is a read-only document).","operationId":"agent_capability_v1_agents_capability_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Agent Capability V1 Agents Capability Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/agents/compose":{"post":{"tags":["agents"],"summary":"Agent Compose","description":"Compose validated token plans from natural-language intent. Plans are\nvalidated exactly as the API validates them — nothing here can execute.","operationId":"agent_compose_v1_agents_compose_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComposeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComposeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/agents/compose-then-draft":{"post":{"tags":["agents"],"summary":"Agent Compose Then Draft","description":"Compose from intent and immediately draft the valid plans through the\nread-only draft surface (marker verification + custody review). Still\nstrictly no signing, no nonce, no deployment.","operationId":"agent_compose_then_draft_v1_agents_compose_then_draft_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComposeThenDraftRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComposeThenDraftResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/agents/refine":{"post":{"tags":["agents"],"summary":"Agent Refine","description":"Refine an existing composition with follow-up feedback (multi-turn).\n\nThe session must come from a prior /compose or /compose-then-draft call.\nThe LLM re-emits the full plan set, which is re-validated exactly as in\ninitial composition. Still strictly read-only — nothing here can sign,\nbroadcast, or deploy.","operationId":"agent_refine_v1_agents_refine_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefineRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefineResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/deploys/session/create":{"post":{"tags":["deploy-session"],"summary":"Deploy Session Create","operationId":"deploy_session_create_v1_deploys_session_create_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Deploy Session Create V1 Deploys Session Create Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/deploys/session/{session_id}/confirm-review":{"post":{"tags":["deploy-session"],"summary":"Deploy Session Confirm Review","operationId":"deploy_session_confirm_review_v1_deploys_session__session_id__confirm_review_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Deploy Session Confirm Review V1 Deploys Session  Session Id  Confirm Review Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/deploys/session/{session_id}/dry-run":{"post":{"tags":["deploy-session"],"summary":"Deploy Session Dry Run","description":"Dry-run the bound plan (never signs, never broadcasts) and stamp the\nmainnet confirmation phrase when applicable.","operationId":"deploy_session_dry_run_v1_deploys_session__session_id__dry_run_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"confirmation","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confirmation"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Deploy Session Dry Run V1 Deploys Session  Session Id  Dry Run Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/deploys/session/{session_id}/unsigned":{"post":{"tags":["deploy-session"],"summary":"Deploy Session Unsigned","description":"Export the raw unsigned transaction for off-service signing.\n\nMainnet plans still require the typed phrase — exporting the unsigned\npayload is itself a commit-worthy step on mainnet.","operationId":"deploy_session_unsigned_v1_deploys_session__session_id__unsigned_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"confirmation","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confirmation"}},{"name":"from_address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Address"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Deploy Session Unsigned V1 Deploys Session  Session Id  Unsigned Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/deploys/session/{session_id}/broadcast":{"post":{"tags":["deploy-session"],"summary":"Deploy Session Broadcast","description":"Relay an operator-supplied signed transaction. The service signs\nnothing — it verifies the payload matches the bound plan, then sends\nthe raw signed bytes to the chain.\n\nSanity checks:\n- hex payload decodes\n- decoded `to` is None (contract creation)\n- decoded `data` starts with the bound plan's compiled bytecode prefix\n\nW-SESSION-BROADCAST-UNBILLED-001: this relay used to settle nothing\nwhile `/v1/deploys` charges the same scope, a free alternative to a\ncharged path. It now charges the deploy-pack lines (compute plus action\nfee; no gas line, because the operator's own key pays the chain) and\nrequires an idempotency key, mirroring `/v1/deploys`.","operationId":"deploy_session_broadcast_v1_deploys_session__session_id__broadcast_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionBroadcastRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Deploy Session Broadcast V1 Deploys Session  Session Id  Broadcast Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/deploys/session/{session_id}/verify":{"post":{"tags":["deploy-session"],"summary":"Deploy Session Verify","description":"Post-deploy on-chain verification: receipt status, role assertion,\nand plan field checks against the chain.","operationId":"deploy_session_verify_v1_deploys_session__session_id__verify_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Deploy Session Verify V1 Deploys Session  Session Id  Verify Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/deploys/session/{session_id}":{"get":{"tags":["deploy-session"],"summary":"Deploy Session Get","description":"Read-only audit trail — read tokens are welcome here.","operationId":"deploy_session_get_v1_deploys_session__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Deploy Session Get V1 Deploys Session  Session Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/deploys/multi/create":{"post":{"tags":["deploy-multichain"],"summary":"Multichain Create","description":"Open a multichain launch session: one global session plus one\nsingle-chain child session per requested chain (2..6 supported chains).\nNothing is signed or deployed; the operator walks per-chain steps and\nglobal phase gates explicitly.","operationId":"multichain_create_v1_deploys_multi_create_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MultichainCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Multichain Create V1 Deploys Multi Create Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/deploys/multi/{session_id}/dry-run-all":{"post":{"tags":["deploy-multichain"],"summary":"Multichain Dry Run All","description":"Dry-run the bound plan on EVERY chain simultaneously (never signs,\nnever broadcasts). Returns the per-chain dry-run payloads plus an\naggregated cost report. Per-chain mainnet plans each carry their own\nconfirmation phrase — the operator must re-type it per mainnet child\nbefore broadcast (no phrase is shared across chains).","operationId":"multichain_dry_run_all_v1_deploys_multi__session_id__dry_run_all_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"confirmation","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confirmation"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Multichain Dry Run All V1 Deploys Multi  Session Id  Dry Run All Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/deploys/multi/{session_id}/start-deploy":{"post":{"tags":["deploy-multichain"],"summary":"Multichain Start Deploy","description":"Global gate: design -> per_chain_deploy_steps. The operator confirms\nthey are ready to begin per-chain deploy steps (each child session must\nhave passed its own review-confirmation; this gate only opens the global\nphase — it does not advance any child).","operationId":"multichain_start_deploy_v1_deploys_multi__session_id__start_deploy_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Multichain Start Deploy V1 Deploys Multi  Session Id  Start Deploy Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/deploys/multi/{session_id}/verify-all":{"post":{"tags":["deploy-multichain"],"summary":"Multichain Verify All","description":"Global gate: verify_all -> complete. Fail-closed — only succeeds when\nEVERY child session independently reached VERIFIED. A single unverified\nchain blocks the global completion (per-chain isolation, W-MULTI-001).","operationId":"multichain_verify_all_v1_deploys_multi__session_id__verify_all_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Multichain Verify All V1 Deploys Multi  Session Id  Verify All Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/deploys/multi/{session_id}":{"get":{"tags":["deploy-multichain"],"summary":"Multichain Get","description":"Read-only audit trail — read tokens welcome.","operationId":"multichain_get_v1_deploys_multi__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Multichain Get V1 Deploys Multi  Session Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/analyze":{"post":{"summary":"Analyze Contract","operationId":"analyze_contract_v1_analyze_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Analyze Contract V1 Analyze Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/analyze/market":{"post":{"tags":["analyze"],"summary":"Analyze Market","description":"Check a prediction market's on-chain wiring: collateral against\noutstanding winning shares, resolution authority, whether the market has\ndrained to zero, and whether its redemption accounting agrees with the\nshare tokens.\n\nRead-only. Shape `spike-binary` only; any other shape is refused with the\nmissing interface piece named.","operationId":"analyze_market_v1_analyze_market_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Analyze Market V1 Analyze Market Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vault/import-seed":{"post":{"tags":["vault"],"summary":"Vault Import Seed","description":"Import a BIP-39 mnemonic and derive role-based HD keystores.\n\nThe mnemonic is used once for derivation and immediately discarded.\nIt is never stored, logged, or returned in the response.","operationId":"vault_import_seed_v1_vault_import_seed_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportSeedRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportSeedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vault/rotate":{"post":{"tags":["vault"],"summary":"Vault Rotate","description":"Rotate the active key for a role.\n\nDerives the next key, transfers gas from old to new, activates the new\nkey, and retires the old one. Fail-closed: old key stays active on failure.","operationId":"vault_rotate_v1_vault_rotate_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RotateKeyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RotateKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vault/keys":{"get":{"tags":["vault"],"summary":"Vault List Keys","description":"List all vault keys with their roles, addresses, and status.","operationId":"vault_list_keys_v1_vault_keys_get","parameters":[{"name":"role","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by role","title":"Role"},"description":"Filter by role"},{"name":"include_retired","in":"query","required":false,"schema":{"type":"boolean","description":"Include retired keys","default":false,"title":"Include Retired"},"description":"Include retired keys"},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vault List Keys V1 Vault Keys Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vault/backup/export":{"post":{"tags":["vault"],"summary":"Vault Backup Export","description":"Export all vault keystores to an encrypted backup archive.","operationId":"vault_backup_export_v1_vault_backup_export_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackupExportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackupExportResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vault/backup/verify":{"post":{"tags":["vault"],"summary":"Vault Backup Verify","description":"Verify the integrity of an encrypted backup archive.","operationId":"vault_backup_verify_v1_vault_backup_verify_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackupVerifyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackupVerifyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vault/backup/import":{"post":{"tags":["vault"],"summary":"Vault Backup Import","description":"Import keystores from an encrypted backup archive.","operationId":"vault_backup_import_v1_vault_backup_import_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackupImportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vault Backup Import V1 Vault Backup Import Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vault/backup/upload-r2":{"post":{"tags":["vault"],"summary":"Vault Backup Upload R2","description":"Upload an encrypted backup archive to Cloudflare R2.","operationId":"vault_backup_upload_r2_v1_vault_backup_upload_r2_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/R2UploadRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Vault Backup Upload R2 V1 Vault Backup Upload R2 Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/vault/health":{"get":{"tags":["vault"],"summary":"Vault Health","description":"Key management health check — key status summary.","operationId":"vault_health_v1_vault_health_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vault Health V1 Vault Health Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/metrics":{"get":{"tags":["metrics"],"summary":"Metrics Endpoint","description":"Prometheus-format metrics (admin-only; the router is mounted with require_admin).","operationId":"metrics_endpoint_metrics_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/analytics/deployments":{"get":{"tags":["analytics"],"summary":"List Deployments","description":"List deployments with optional filters.","operationId":"list_deployments_v1_analytics_deployments_get","parameters":[{"name":"chain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chain"}},{"name":"template","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"}},{"name":"token_hash","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token Hash"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Deployments V1 Analytics Deployments Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/analytics/token/{address}":{"get":{"tags":["analytics"],"summary":"Get Token Stats","description":"Get per-token deployment stats.","operationId":"get_token_stats_v1_analytics_token__address__get","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string","title":"Address"}},{"name":"chain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chain"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/TokenStats"},{"type":"null"}],"title":"Response Get Token Stats V1 Analytics Token  Address  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/analytics/export":{"get":{"tags":["analytics"],"summary":"Export Deployments","description":"Export deployment history as CSV or JSON.","operationId":"export_deployments_v1_analytics_export_get","parameters":[{"name":"chain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chain"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(csv|json)$","default":"csv","title":"Format"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/analytics/by-token":{"get":{"tags":["analytics"],"summary":"Analytics By Token","description":"One row per API token: who is using how.\n\nJoins token identity (label, email, scope) + wallet link + credit balance\nand 7d usage + deployments by token_hash. Admin-only by router. This is\nthe answer to who is using how and what we learn: calls, refusals,\ndeploys, funnel stage, wallet bound or not.","operationId":"analytics_by_token_v1_analytics_by_token_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Analytics By Token V1 Analytics By Token Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/analytics/summary":{"get":{"tags":["analytics"],"summary":"Deployment Summary","description":"High-level deployment summary.","operationId":"deployment_summary_v1_analytics_summary_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Deployment Summary V1 Analytics Summary Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/tokens":{"post":{"tags":["auth"],"summary":"Create Token","description":"Create a new API bearer token. Admin-only.","operationId":"create_token_v1_auth_tokens_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTokenRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["auth"],"summary":"List Tokens","description":"List all API tokens with usage roll-up (admin-only). No raw tokens.\n\nJoins token row + wallet link + credit balance + 7d usage, so one call\nanswers who is using how: name, email, wallet, balance left, calls,\nrefusals, last seen. Email is admin-only by construction (this route\nrequires admin); never expose it on a self-serve surface.","operationId":"list_tokens_v1_auth_tokens_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Tokens V1 Auth Tokens Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/tokens/{fingerprint}":{"delete":{"tags":["auth"],"summary":"Revoke Token","description":"Revoke an API token by its fingerprint (first 16 hex chars of hash).\n\nPhase 4.1: the lookup was a `LIKE 'fingerprint%'` on the hash, so the\nSQL wildcards were part of the pattern. `DELETE /tokens/%` revoked the\nfirst non-revoked token in the table, i.e. an admin could be tricked into\nrevoking an arbitrary credential. The fingerprint is now proven to be\n16 hex characters and matched as a range (a true prefix match) instead of\na LIKE pattern.","operationId":"revoke_token_v1_auth_tokens__fingerprint__delete","parameters":[{"name":"fingerprint","in":"path","required":true,"schema":{"type":"string","title":"Fingerprint"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Revoke Token V1 Auth Tokens  Fingerprint  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/tokens/validate":{"get":{"tags":["auth"],"summary":"Validate Token","description":"Validate the CALLER's own token (from the Authorization header).\n\nThe token never travels as a query parameter (URLs land in access logs,\nreferrer headers, and shell history) and no arbitrary token can be\nprobed: this endpoint answers only about the credential it was called\nwith. Previously it accepted any `?token=` value unauthenticated, which\nmade it a token oracle (Phase 4.1, auth bypass).","operationId":"validate_token_v1_auth_tokens_validate_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Validate Token V1 Auth Tokens Validate Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/credits/add":{"post":{"tags":["credits"],"summary":"Add Credits Endpoint","description":"Add credits to a token (admin-only).\n\nThe response reports the PERSISTED `is_unlimited`, read back from the row\nafter the write, not the request flag (W-CREDITS-S4-001). The old endpoint\nechoed `request.is_unlimited`, so a client that sent the (former) default\n`false` was told \"not unlimited\" while the stored row was still unlimited.\n`is_unlimited` here is the truth a later request would read.","operationId":"add_credits_endpoint_v1_credits_add_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddCreditsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Add Credits Endpoint V1 Credits Add Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/credits/balance/{token_hash}":{"get":{"tags":["credits"],"summary":"Get Balance","description":"Get credit balance for a token (admin-only).\n\nReturns a shape summary of the partner config, never its values: the\nstored config carries the gas-payer private key (W-CREDITS-KEYLEAK-001).","operationId":"get_balance_v1_credits_balance__token_hash__get","parameters":[{"name":"token_hash","in":"path","required":true,"schema":{"type":"string","title":"Token Hash"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Balance V1 Credits Balance  Token Hash  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/credits/usage":{"get":{"tags":["credits"],"summary":"Get Usage","description":"Get credit usage history (admin-only).\n\nPhase 4.1: `limit` was unbounded, so `limit=-1` meant \"no LIMIT\" in\nSQLite and dumped the whole table. Bounded like /v1/analytics.","operationId":"get_usage_v1_credits_usage_get","parameters":[{"name":"token_hash","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token Hash"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Usage V1 Credits Usage Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/credits/estimate":{"get":{"tags":["credits"],"summary":"Get Cost Estimate","description":"Quote the three lines for an endpoint.\n\nBuilt by `charge_lines_for`, the same function that builds the charge, so\nthe quote IS the price and the two cannot drift. Supply the gas the chain\nreported for the request (`gas_measured_native`, straight from a dry run's\n`estimated_gas_native`) to get the gas line; with nothing supplied the gas\nline is zero and `gas_source` says so rather than leaving the reader to\nassume it is free.\n\n`chain` is disclosure only. It is recorded on the ledger at charge time\nand never changes a number, because a chain that is not wired does not\nbecome cheaper.","operationId":"get_cost_estimate_v1_credits_estimate_get","parameters":[{"name":"endpoint","in":"query","required":true,"schema":{"type":"string","title":"Endpoint"}},{"name":"chain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chain"}},{"name":"gas_measured_native","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Gas Measured Native"}},{"name":"gas_price_native","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Gas Price Native"}},{"name":"gas_units","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Gas Units"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Cost Estimate V1 Credits Estimate Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/llm/usage":{"get":{"tags":["llm-costs"],"summary":"Get Llm Usage","description":"Measured LLM usage: totals plus per-purpose and per-model splits.\n\nToken sums exclude attempts whose provider reported no usage (NULL),\nand `calls_with_counts` says how many attempts the sums come from, so a\nreader cannot mistake unknown for zero.","operationId":"get_llm_usage_v1_llm_usage_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Llm Usage V1 Llm Usage Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/billing/shadow":{"get":{"tags":["billing-shadow"],"summary":"Get Shadow Report","description":"Collected vs owed, and every row where they disagree.\n\n``gap_credits`` is the alpha invoice line: value delivered under the\nlocked table but not taken. ``deploy_mismatches`` must stay empty; a row\nthere means quote and charge diverged and needs a human, not a retry.","operationId":"get_shadow_report_v1_billing_shadow_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Shadow Report V1 Billing Shadow Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/credits/me":{"get":{"tags":["credits-self"],"summary":"Credits Me","description":"Self-service credit lookup. Returns only the calling token's data.\n\nThis endpoint is intentionally not discoverable via /v1/skills or any\nother discovery surface. It is for end-users to check their own usage.\nAuth is validated by require_auth; we also extract the raw token\nfrom the Authorization header to compute the hash for the credits DB.","operationId":"credits_me_v1_credits_me_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Credits Me V1 Credits Me Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/credits/robots.txt":{"get":{"tags":["credits-self"],"summary":"Robots Txt","description":"Block search engines from indexing sensitive endpoints.","operationId":"robots_txt_v1_credits_robots_txt_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"string","title":"Response Robots Txt V1 Credits Robots Txt Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/credits/statements":{"get":{"tags":["credits-self"],"summary":"Credit Statements","description":"Settled attempts for the calling token, newest first. Commit F.\n\nEvery row here moved money: zero-charge attempts are never written to\nthe settled ledger, so failures live on `/holds` with their outcome and\ncode, never merged into these rows.","operationId":"credit_statements_v1_credits_statements_get","parameters":[{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Since"}},{"name":"until","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Until"}},{"name":"outcome","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Outcome"}},{"name":"endpoint","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Endpoint"}},{"name":"idempotency_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Key"}},{"name":"job_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Id"}},{"name":"hold_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hold Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"starting_after","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Starting After"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Credit Statements V1 Credits Statements Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/credits/holds":{"get":{"tags":["credits-self"],"summary":"Credit Holds","description":"Open reservations for the calling token. Commit F.\n\nA reservation is not a charge: these rows are reported separately and\nmust never be summed as spending. Each carries its expiry, after which\nthe TTL sweep reclaims it.","operationId":"credit_holds_v1_credits_holds_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Credit Holds V1 Credits Holds Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/guide/patterns":{"get":{"summary":"Patterns Endpoint","description":"List every architecture pattern mintrr knows.","operationId":"patterns_endpoint_v1_guide_patterns_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Patterns Endpoint V1 Guide Patterns Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/guide/suggest":{"post":{"summary":"Suggest Endpoint","description":"Rank patterns against a natural-language intent.\n\nReturns ranked candidates with a numeric score. An intent that matches\nnothing returns an empty list: the guide abstains rather than guessing.","operationId":"suggest_endpoint_v1_guide_suggest_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Suggest Endpoint V1 Guide Suggest Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/guide/projection":{"get":{"summary":"Projection Endpoint","description":"The current capability facts, derived from their canonical owners.\n\nW-CAPABILITY-CHANGE-FANOUT-001: this is the typed read every current surface\nconsumes. It is descriptive only; `hosted` and `maturity` do not grant\nsigning, broadcast or spending authority.","operationId":"projection_endpoint_v1_guide_projection_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Projection Endpoint V1 Guide Projection Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/guide/capabilities/{chain}":{"get":{"summary":"Capabilities Endpoint","description":"Machine capability flags for a chain (deploy, bulk, events, fork...).","operationId":"capabilities_endpoint_v1_guide_capabilities__chain__get","parameters":[{"name":"chain","in":"path","required":true,"schema":{"type":"string","title":"Chain"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Capabilities Endpoint V1 Guide Capabilities  Chain  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/guide/guardrails/{chain}":{"get":{"summary":"Guardrails Endpoint","description":"Facts plus declared limits for a chain (what to be careful about).","operationId":"guardrails_endpoint_v1_guide_guardrails__chain__get","parameters":[{"name":"chain","in":"path","required":true,"schema":{"type":"string","title":"Chain"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Guardrails Endpoint V1 Guide Guardrails  Chain  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/guide/limits/{chain}":{"get":{"summary":"Limits Endpoint","description":"The limits/disclosures for a chain, with stable codes.","operationId":"limits_endpoint_v1_guide_limits__chain__get","parameters":[{"name":"chain","in":"path","required":true,"schema":{"type":"string","title":"Chain"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Limits Endpoint V1 Guide Limits  Chain  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/":{"post":{"tags":["webhooks"],"summary":"Create Webhook","description":"Register a new webhook subscription (admin-only).","operationId":"create_webhook_v1_webhooks__post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["webhooks"],"summary":"List Webhooks","description":"List all registered webhooks (admin-only).","operationId":"list_webhooks_v1_webhooks__get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Webhooks V1 Webhooks  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/{webhook_id}":{"delete":{"tags":["webhooks"],"summary":"Delete Webhook","description":"Delete a webhook subscription (admin-only).","operationId":"delete_webhook_v1_webhooks__webhook_id__delete","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Delete Webhook V1 Webhooks  Webhook Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/webhooks/test":{"post":{"tags":["webhooks"],"summary":"Test Webhook","description":"Send a test event to a webhook URL (admin-only).","operationId":"test_webhook_v1_webhooks_test_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookTestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Test Webhook V1 Webhooks Test Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/governance/config":{"post":{"tags":["governance"],"summary":"Create Governance Config","description":"Initialize governance configuration for a DAO token.","operationId":"create_governance_config_v1_governance_config_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GovernanceConfigRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Governance Config V1 Governance Config Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/governance/proposal":{"post":{"tags":["governance"],"summary":"Create Proposal","description":"Create a new governance proposal.","operationId":"create_proposal_v1_governance_proposal_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProposalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Proposal V1 Governance Proposal Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/governance/vote":{"post":{"tags":["governance"],"summary":"Record Vote","description":"Record a vote on a proposal.","operationId":"record_vote_v1_governance_vote_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Record Vote V1 Governance Vote Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/governance/proposal/{proposal_id}/tally":{"get":{"tags":["governance"],"summary":"Tally Proposal","description":"Get the current tally/state of a proposal.","operationId":"tally_proposal_v1_governance_proposal__proposal_id__tally_get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"current_block","in":"query","required":true,"schema":{"type":"integer","title":"Current Block"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Tally Proposal V1 Governance Proposal  Proposal Id  Tally Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/governance/proposal/{proposal_id}/tx/cast-vote":{"get":{"tags":["governance"],"summary":"Get Cast Vote Tx","description":"Get unsigned castVote transaction.","operationId":"get_cast_vote_tx_v1_governance_proposal__proposal_id__tx_cast_vote_get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"voter","in":"query","required":true,"schema":{"type":"string","title":"Voter"}},{"name":"vote","in":"query","required":true,"schema":{"type":"string","title":"Vote"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Cast Vote Tx V1 Governance Proposal  Proposal Id  Tx Cast Vote Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/governance/proposal/{proposal_id}/tx/queue":{"get":{"tags":["governance"],"summary":"Get Queue Tx","description":"Get unsigned queue transaction (after proposal succeeds).","operationId":"get_queue_tx_v1_governance_proposal__proposal_id__tx_queue_get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Queue Tx V1 Governance Proposal  Proposal Id  Tx Queue Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/governance/proposal/{proposal_id}/tx/execute":{"get":{"tags":["governance"],"summary":"Get Execute Tx","description":"Get unsigned execute transaction (after timelock delay).","operationId":"get_execute_tx_v1_governance_proposal__proposal_id__tx_execute_get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Execute Tx V1 Governance Proposal  Proposal Id  Tx Execute Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/governance/proposals":{"get":{"tags":["governance"],"summary":"List Proposals","description":"List all proposals.","operationId":"list_proposals_v1_governance_proposals_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Proposals V1 Governance Proposals Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/users/":{"post":{"tags":["users"],"summary":"Create User","description":"Create a new user account (owner-only).","operationId":"create_user_v1_users__post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["users"],"summary":"List Users","description":"List all users (admin-only).","operationId":"list_users_v1_users__get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Users V1 Users  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/users/{username}":{"delete":{"tags":["users"],"summary":"Deactivate User","description":"Deactivate a user account (owner-only). Does not delete — preserves audit trail.","operationId":"deactivate_user_v1_users__username__delete","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string","title":"Username"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Deactivate User V1 Users  Username  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/users/audit":{"get":{"tags":["users"],"summary":"Get Audit Log","description":"Get audit log entries (admin-only).\n\nPhase 4.1: unbounded `limit` (`-1` meant the whole table).","operationId":"get_audit_log_v1_users_audit_get","parameters":[{"name":"username","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"}},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Audit Log V1 Users Audit Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/compliance/report":{"post":{"tags":["compliance"],"summary":"Generate Report","description":"Generate a compliance report for a set of token features (admin or read).","operationId":"generate_report_v1_compliance_report_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComplianceReportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Generate Report V1 Compliance Report Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/compliance/frameworks":{"get":{"tags":["compliance"],"summary":"List Frameworks","description":"List supported regulatory frameworks (public).","operationId":"list_frameworks_v1_compliance_frameworks_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Frameworks V1 Compliance Frameworks Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/compliance/jurisdictions":{"get":{"tags":["compliance"],"summary":"List Jurisdictions","description":"List jurisdiction-specific template recommendations (public).","operationId":"list_jurisdictions_v1_compliance_jurisdictions_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Jurisdictions V1 Compliance Jurisdictions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/compliance/feature-map":{"get":{"tags":["compliance"],"summary":"Get Feature Compliance Map","description":"Get the full feature-to-compliance mapping (public).","operationId":"get_feature_compliance_map_v1_compliance_feature_map_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Feature Compliance Map V1 Compliance Feature Map Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/plans/catalog":{"get":{"tags":["plans"],"summary":"Plan Catalog","description":"Schema-derived choices for a guided plan: plan schema, templates,\nchains, features, kinds and limits.\n\nRead-only labels derived from the canonical core registries. The catalog\ngrants no capability, signs nothing, and is not an authorization surface.","operationId":"plan_catalog_v1_plans_catalog_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/plans/preview":{"post":{"tags":["plans"],"summary":"Plan Preview","description":"Validate a plan and select a template, writing nothing.\n\nThe repository root and the network mode come from trusted settings; the\nbody can neither redirect the root nor choose the network. An unknown body\nfield, a malformed body or an oversized body is refused with a fixed safe\nreason rather than FastAPI's default 422.","operationId":"plan_preview_v1_plans_preview_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"description":"A bounded preview request: a raw plan document and an optional template.\n\n``extra=\"forbid\"`` is deliberate. ``TokenPlan`` ignores unknown fields, so\na port that accepted them at this level would let an unknown key pass\nsilently and produce a wrong-but-plausible plan. The request refuses it\ninstead, and ``preview_plan`` also refuses unknown keys inside ``plan``.","properties":{"plan":{"additionalProperties":true,"title":"Plan","type":"object"},"template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template"}},"required":["plan"],"title":"PreviewRequest","type":"object"}}}}}},"/v1/plugins/":{"get":{"tags":["plugins"],"summary":"List Plugins","description":"List all loaded plugins (read token).","operationId":"list_plugins_v1_plugins__get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Plugins V1 Plugins  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/plugins/load/{plugin_name}":{"post":{"tags":["plugins"],"summary":"Load Plugin","description":"Load a plugin (admin-only).","operationId":"load_plugin_v1_plugins_load__plugin_name__post","parameters":[{"name":"plugin_name","in":"path","required":true,"schema":{"type":"string","title":"Plugin Name"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Load Plugin V1 Plugins Load  Plugin Name  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/plugins/{plugin_name}":{"delete":{"tags":["plugins"],"summary":"Unload Plugin","description":"Unload a plugin (admin-only).","operationId":"unload_plugin_v1_plugins__plugin_name__delete","parameters":[{"name":"plugin_name","in":"path","required":true,"schema":{"type":"string","title":"Plugin Name"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Unload Plugin V1 Plugins  Plugin Name  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/plugins/discover":{"post":{"tags":["plugins"],"summary":"Discover Plugins","description":"Discover available plugins in the plugins directory (admin-only).","operationId":"discover_plugins_v1_plugins_discover_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Discover Plugins V1 Plugins Discover Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/payments/watch":{"post":{"tags":["payments"],"summary":"Watch Endpoint","description":"Scan the chain once and credit confirmed deposits (admin-only at mount).","operationId":"watch_endpoint_v1_payments_watch_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Watch Endpoint V1 Payments Watch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/payments/deposits/{address}":{"get":{"tags":["payments"],"summary":"Deposits Endpoint","description":"A read view of deposits to an address (admin-only at mount).","operationId":"deposits_endpoint_v1_payments_deposits__address__get","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string","title":"Address"}},{"name":"chain","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chain"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Deposits Endpoint V1 Payments Deposits  Address  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/bridge/burn-and-mint":{"post":{"tags":["bridge"],"summary":"Post Burn And Mint","description":"Initiate a burn-and-mint bridge operation.\n\nBurn tokens on source chain, mint equivalent on destination chain.\nTotal supply remains constant.","operationId":"post_burn_and_mint_v1_bridge_burn_and_mint_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Post Burn And Mint V1 Bridge Burn And Mint Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/bridge/lock-and-mint":{"post":{"tags":["bridge"],"summary":"Post Lock And Mint","description":"Initiate a lock-and-mint bridge operation.\n\nLock original tokens on source chain, mint wrapped on destination.","operationId":"post_lock_and_mint_v1_bridge_lock_and_mint_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BridgeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Post Lock And Mint V1 Bridge Lock And Mint Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/bridge/status/{bridge_id}":{"get":{"tags":["bridge"],"summary":"Get Bridge Status","description":"Get the status of a bridge operation.","operationId":"get_bridge_status_v1_bridge_status__bridge_id__get","parameters":[{"name":"bridge_id","in":"path","required":true,"schema":{"type":"string","title":"Bridge Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Bridge Status V1 Bridge Status  Bridge Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/bridge/supply/{token_address}":{"get":{"tags":["bridge"],"summary":"Get Supply Reconciliation","description":"Get total supply across all chains for a token.\n\nReturns per-chain breakdown and total cross-chain supply.","operationId":"get_supply_reconciliation_v1_bridge_supply__token_address__get","parameters":[{"name":"token_address","in":"path","required":true,"schema":{"type":"string","title":"Token Address"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Supply Reconciliation V1 Bridge Supply  Token Address  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/bundles/rwa/preflight":{"post":{"summary":"Rwa Preflight","description":"Compile and order the RWA bundle. No signing, no broadcast.","operationId":"rwa_preflight_v1_bundles_rwa_preflight_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RwaPreflightRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Rwa Preflight V1 Bundles Rwa Preflight Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/import/analyze":{"post":{"summary":"Import Analyze","description":"Analyze pasted smart contract source and extract features.\n\nExtracts token standard, features, events, modifiers, inheritance,\nand recommends a mintrr template. Works with ERC-20, ERC-721,\nERC-1155, TRC-20, and custom contracts.\n\nReturns:\n    Full feature extraction with template recommendation.","operationId":"import_analyze_v1_import_analyze_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportAnalyzeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportAnalyzeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/import/plan":{"post":{"summary":"Import Plan","description":"Generate a deployment-ready plan from pasted contract source.\n\nAnalyzes the source, extracts features, and maps to the closest\nmintrr template with appropriate parameters.\n\nReturns:\n    A TokenPlan-compatible structure ready for deployment.","operationId":"import_plan_v1_import_plan_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportPlanRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportPlanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/wallet/challenge":{"post":{"summary":"Wallet Challenge","description":"Request a signing challenge for wallet authentication.\n\nPublic by design (it IS the login flow), so it is bounded on three axes:\nper-IP, per-address, and by a cap on outstanding challenges. Without them\nan unauthenticated caller grows the store and crowds out real logins.\n\nThe returned challenge is single-use and short-lived (5 minutes by\ndefault, ceiling 15), so a signature captured from a client is worthless\nan hour later and worthless twice over.","operationId":"wallet_challenge_v1_wallet_challenge_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChallengeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChallengeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/wallet/verify":{"post":{"summary":"Wallet Verify","description":"Verify a wallet signature and get a session.\n\nRecovery is real ECDSA via ``eth_account``, compared to the claimed\naddress (W-WALLET-AUTH-001). The challenge is consumed ONLY after recovery\nsucceeds, so a bad signature does not burn a legitimate login.","operationId":"wallet_verify_v1_wallet_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/wallet/session/{session_id}":{"get":{"summary":"Wallet Session","description":"Check the validity of a wallet session.","operationId":"wallet_session_v1_wallet_session__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Wallet Invalidate","description":"Invalidate a wallet session.","operationId":"wallet_invalidate_v1_wallet_session__session_id__delete","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"boolean"},"title":"Response Wallet Invalidate V1 Wallet Session  Session Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/wallet/link":{"post":{"summary":"Wallet Link","description":"Bind the caller bearer token to a proven wallet address.\n\nRequires BOTH: a valid bearer (whose token gets the link) and a fresh\nwallet session (which proves control of the address). The session is\nconsumed on link, so one proof links exactly one token and cannot be\nreplayed onto another.\n\nConsumption and the link write are ONE transaction (W-WALLET-LINK-RACE-001):\nthe session is claimed with a guarded ``DELETE ... RETURNING`` and the\nlink is written before the single commit, so two callers racing the same\nproof cannot both win. A read-then-delete, or a delete committed before\nthe link insert, is exactly the hole: the loser still wrote a link, or a\nfailed insert spent the proof while leaving the token unlinked.\n\nStores address + proof timestamp only. Never keys. A link whose token is\nlater revoked is unusable because verification fails closed on revoked\nfirst; no link-side cascade is needed.","operationId":"wallet_link_v1_wallet_link_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Wallet Link Status","description":"Read the caller token's linked wallet, or none.","operationId":"wallet_link_status_v1_wallet_link_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Wallet Link Status V1 Wallet Link Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Wallet Unlink","description":"Remove the caller token's wallet link. Next deploy is unproven.","operationId":"wallet_unlink_v1_wallet_link_delete","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"boolean"},"title":"Response Wallet Unlink V1 Wallet Link Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/login":{"post":{"tags":["auth"],"summary":"Wallet Login","description":"Exchange a proven wallet challenge for a scoped, short-lived bearer.\n\nThe signature is the only thing that proves anything here, and it is\nchecked by ``consume_challenge``, which is single-use: a nonce cannot be\nreplayed into a second bearer. This route does not accept a scope it was\nnot given, and it cannot be talked into minting admin.\n\nA malformed address is answered 401, not 400. The address is compared\nagainst the one the challenge was issued for, so a nonsense address simply\nmatches nothing - and saying \"that is not an address\" first would hand a\ncaller a free oracle for which strings are addresses.","operationId":"wallet_login_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/logout":{"post":{"tags":["auth"],"summary":"Wallet Logout","description":"Revoke the CALLER's own token. Nobody else's.\n\nThe token hash comes from the verified bearer, never from the request\nbody, so this cannot become a revoke-others primitive. A caller without\na member binding (an env or file token) is still answered honestly:\ntheir credential is revoked, and `userID` is null because they never had\none.","operationId":"wallet_logout_v1_auth_logout_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Wallet Logout V1 Auth Logout Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/whoami":{"get":{"tags":["auth"],"summary":"Wallet Whoami","description":"Describe the caller's own credential: scope, expiry, and member.\n\nReports the same fields on every surface the CLI and MCP see, so an agent\nasking \"what am I\" gets the answer the operator sees. A token with no\nmember binding is reported as such rather than being dressed up with a\nnull user and no explanation.","operationId":"wallet_whoami_v1_auth_whoami_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WhoamiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/rotate":{"post":{"tags":["auth"],"summary":"Wallet Rotate","description":"Mint a replacement for the caller's own login token, revoking the old.\n\nRotation requires a fresh wallet signature as well as the live bearer.\nLetting a bearer rotate itself would mean a stolen token could mint an\nendless supply of fresh ones and the short expiry would mean nothing, so\nrotation re-proves the wallet instead.","operationId":"wallet_rotate_v1_auth_rotate_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RotateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/email/start":{"post":{"tags":["auth-email"],"summary":"Email Start","description":"Begin email signin: create a link and send it. Never reveals whether the\naddress is known.","operationId":"email_start_v1_auth_email_start_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailStartRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailStartResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/auth/email/verify":{"post":{"tags":["auth-email"],"summary":"Email Verify","description":"Consume a link and mint a read-only login token.","operationId":"email_verify_v1_auth_email_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailVerifyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lifecycle/mint":{"post":{"summary":"Lifecycle Mint","description":"Mint additional tokens (unsigned transaction).","operationId":"lifecycle_mint_v1_lifecycle_mint_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MintRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnsignedTxResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lifecycle/burn":{"post":{"summary":"Lifecycle Burn","description":"Burn tokens (unsigned transaction).","operationId":"lifecycle_burn_v1_lifecycle_burn_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BurnRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnsignedTxResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lifecycle/pause":{"post":{"summary":"Lifecycle Pause","description":"Pause token transfers (unsigned transaction).","operationId":"lifecycle_pause_v1_lifecycle_pause_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PauseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnsignedTxResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lifecycle/unpause":{"post":{"summary":"Lifecycle Unpause","description":"Unpause token transfers (unsigned transaction).","operationId":"lifecycle_unpause_v1_lifecycle_unpause_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PauseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnsignedTxResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lifecycle/freeze":{"post":{"summary":"Lifecycle Freeze","description":"Freeze an address (unsigned transaction).","operationId":"lifecycle_freeze_v1_lifecycle_freeze_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreezeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnsignedTxResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lifecycle/unfreeze":{"post":{"summary":"Lifecycle Unfreeze","description":"Unfreeze an address (unsigned transaction).","operationId":"lifecycle_unfreeze_v1_lifecycle_unfreeze_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreezeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnsignedTxResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lifecycle/status/{chain}/{address}":{"get":{"summary":"Lifecycle Status","description":"Get measured token status (owner, totalSupply, paused).\n\nEvery field is read from the chain over the shared adapter resolver. When no\nusable RPC is available, or any read fails, this refuses: an unmeasured\nstatus that looks measured is worse than no answer.","operationId":"lifecycle_status_v1_lifecycle_status__chain___address__get","parameters":[{"name":"chain","in":"path","required":true,"schema":{"type":"string","title":"Chain"}},{"name":"address","in":"path","required":true,"schema":{"type":"string","title":"Address"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/lifecycle/operations":{"get":{"summary":"Lifecycle Operations","description":"Get lifecycle operation log.","operationId":"lifecycle_operations_v1_lifecycle_operations_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OperationLogEntry"},"title":"Response Lifecycle Operations V1 Lifecycle Operations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/idempotency/pending":{"get":{"summary":"Idempotency Pending Endpoint","description":"Effect-unknown idempotency claims, oldest first. Read-only.","operationId":"idempotency_pending_endpoint_v1_admin_idempotency_pending_get","parameters":[{"name":"older_than_seconds","in":"query","required":false,"schema":{"type":"number","maximum":2592000,"minimum":0,"default":900.0,"title":"Older Than Seconds"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Idempotency Pending Endpoint V1 Admin Idempotency Pending Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/idempotency/resolve":{"post":{"summary":"Idempotency Resolve Endpoint","description":"Apply ONE explicit operator reconciliation decision.\n\n``complete`` records the result the work produced, so the next retry with\nthe same key/fingerprint replays it; ``release`` drops a claim the operator\nestablished had no external effect, so the next retry runs. The actor is\nthe authenticated admin identity, never a body field.","operationId":"idempotency_resolve_endpoint_v1_admin_idempotency_resolve_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdempotencyResolveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Idempotency Resolve Endpoint V1 Admin Idempotency Resolve Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/idempotency/reconciliations":{"get":{"summary":"Idempotency Reconciliations Endpoint","description":"The append-only record of explicit reconciliation decisions.","operationId":"idempotency_reconciliations_endpoint_v1_admin_idempotency_reconciliations_get","parameters":[{"name":"key","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Key"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Idempotency Reconciliations Endpoint V1 Admin Idempotency Reconciliations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/health":{"get":{"summary":"Health","operationId":"health_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health V1 Health Get"}}}}}}},"/v1/settings/ai":{"get":{"summary":"Get Ai Settings","description":"Get global AI provider settings (key never returned; see W-SECRETS-002).","operationId":"get_ai_settings_v1_settings_ai_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Ai Settings V1 Settings Ai Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Save Ai Settings","description":"Save non-secret AI settings. A supplied key is never persisted (W-SECRETS-002).","operationId":"save_ai_settings_v1_settings_ai_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Save Ai Settings V1 Settings Ai Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/settings/ai/ping":{"post":{"summary":"Ai Ping","description":"Test AI provider connection with the env-configured key (never persisted).","operationId":"ai_ping_v1_settings_ai_ping_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ai Ping V1 Settings Ai Ping Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/settings/chains":{"post":{"summary":"Update Chain Settings","description":"Update enabled chains for hosted deployment.\n\nTwo refusals, both 400 (W-HOSTED-DEPLOY-MATURITY-001):\n\n* a name with no descriptor is not a chain in the locked product set;\n* a name with a descriptor is refused unless it is BOTH hosted and\n  supported. Before this, an admin could persist ``arc`` (supported,\n  hosted=False) or a testnet/dev node and thereby widen the hosted\n  allowlist past the derived set that /v1/health reports, so the admin\n  route could grant a broadcast the service was never proven for.","operationId":"update_chain_settings_v1_settings_chains_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Chain Settings V1 Settings Chains Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/settings/features":{"get":{"summary":"Get Feature Settings","description":"Get feature kill-switches (group-level, code-driven default is all enabled).","operationId":"get_feature_settings_v1_settings_features_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Feature Settings V1 Settings Features Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Update Feature Settings","description":"Persist feature kill-switches. Groups or disabled_features list.\n\nPhase 4.1: the previous version had ``if not out: out = body``, so any\nunrecognised body was persisted verbatim and then served back by\n/v1/settings/features and /v1/settings/admin. The shape is now closed:\nonly the two known keys, the four known groups, and feature names the\nengine actually declares.","operationId":"update_feature_settings_v1_settings_features_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Feature Settings V1 Settings Features Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/settings/admin":{"get":{"summary":"Get Admin Settings","description":"Unified admin snapshot: AI (redacted) + chains + features + health.","operationId":"get_admin_settings_v1_settings_admin_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Admin Settings V1 Settings Admin Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/plans":{"post":{"summary":"Create Plan","description":"Validate TokenPlan; optionally generate Solidity (creation for all supported EVM).","operationId":"create_plan_v1_plans_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Plan V1 Plans Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/onboard/token":{"post":{"summary":"Onboard Token","description":"Simplified token creation — plain-language intent, no jargon.\n\nAccepts name, symbol, type, chain, supply. Internally constructs the full\nTokenPlan and returns the plan summary + session-ready data.\n\nUsage:\n    POST /v1/onboard/token\n    {\"name\": \"Keshav Token\", \"symbol\": \"KESH\", \"type\": \"standard\",\n     \"chain\": \"polygon\", \"supply\": \"1000000\", \"owner\": \"0x...\"}","operationId":"onboard_token_v1_onboard_token_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardTokenRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Onboard Token V1 Onboard Token Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/onboard/guide":{"post":{"summary":"Guide Token","description":"AI-guided token creation from a natural-language usecase.\n\nThe user describes what they want to build (e.g., 'a reward token for my\ngaming community'). The AI:\n1. Maps the usecase to the best matching template\n2. Asks clarifying questions if needed\n3. Explains tradeoffs, risks, and regulatory implications\n4. Produces a deploy-ready plan when intent is clear\n\nUses the existing assistant.py LLM infrastructure (fail-closed,\nnon-custodial, always re-validated).","operationId":"guide_token_v1_onboard_guide_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuideRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Guide Token V1 Onboard Guide Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sources/{symbol}":{"get":{"summary":"Get Source","description":"Read-only access to a generated contract source. ADMIN SCOPE ONLY.\n\nW-SOURCES-LEAKS-FIRST-PARTY-001. This was `require_auth`, which accepts\nread scope, and that handed the whole template library to the lowest scope\non the internet-facing service: `contracts/generated/*.sol` is a\nbyte-identical copy of `templates/*.sol` plus injected features, so\nenumerating symbols from `/v1/templates` and calling this once per symbol\nreconstructed every first-party template, including internal finding ids and\nthe reasoning behind each refusal.\n\nAdmin is the correct scope because these files are not a customer artifact.\nThey are the proprietary part of the product. A customer deploying a token\nreceives their own generated contract over the deploy flow; nobody needs to\nread another asset's source, let alone ours.","operationId":"get_source_v1_sources__symbol__get","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Source V1 Sources  Symbol  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/deploys/dry-run":{"post":{"summary":"Dry Run Endpoint","description":"Dry-run a deploy (no broadcast, no signing) and return the confirmation\nphrase a mainnet broadcast would require. Read scope — the mandatory first\nstep of the UI Deploy flow (Verify-then-Deploy rule).","operationId":"dry_run_endpoint_v1_deploys_dry_run_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DryRunRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Dry Run Endpoint V1 Deploys Dry Run Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/deploys/unsigned":{"post":{"summary":"Unsigned Endpoint","description":"Build the raw UNSIGNED deploy transaction (EVM chains only).\n\nThe service signs nothing: `raw_unsigned_tx` can be imported into a\nhardware wallet or signed locally. Mainnet plans still require the typed\nconfirmation phrase; unsupported chains are hard-refused.","operationId":"unsigned_endpoint_v1_deploys_unsigned_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnsignedRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Unsigned Endpoint V1 Deploys Unsigned Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/skills":{"get":{"summary":"Skills Endpoint","description":"Return the skills manifest. B2B sees only names, admin sees content.","operationId":"skills_endpoint_v1_skills_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Skills Endpoint V1 Skills Get"}}}}}}},"/v1/skills/{skill_name}":{"get":{"summary":"Skill Detail Endpoint","description":"Return the full content of a specific skill module. Admin only for content.","operationId":"skill_detail_endpoint_v1_skills__skill_name__get","parameters":[{"name":"skill_name","in":"path","required":true,"schema":{"type":"string","title":"Skill Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Skill Detail Endpoint V1 Skills  Skill Name  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/templates":{"get":{"summary":"Templates Endpoint","description":"List first-party recipe templates with their feature matrix.\n\nTemplates are the ONLY sanctioned deployment path for plans whose features\na hand-assembled contract cannot prove (custom decimals, cap enforcement —\nW-E2E-001).","operationId":"templates_endpoint_v1_templates_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Templates Endpoint V1 Templates Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/compile":{"post":{"summary":"Compile Endpoint","operationId":"compile_endpoint_v1_compile_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompileRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Compile Endpoint V1 Compile Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/deploys":{"post":{"summary":"Deploy Endpoint","description":"Gasless-style deploy: service gas key pays; plan.owner_address is initialOwner.","operationId":"deploy_endpoint_v1_deploys_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}},{"name":"X-Session-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Session-Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeployRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Deploy Endpoint V1 Deploys Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/registry":{"get":{"summary":"Registry Endpoint","description":"Deployed-contract registry (read-only).","operationId":"registry_endpoint_v1_registry_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Registry Endpoint V1 Registry Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/book":{"post":{"summary":"Book Add Endpoint","description":"Add address book entry. For B2B gas wallets, set is_watch_only true — we never see seed.","operationId":"book_add_endpoint_v1_book_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookAddRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Book Add Endpoint V1 Book Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"summary":"Book Endpoint","description":"Address book. Labels may be case-sensitive PII (W-ADDRBOOK-PII-001).","operationId":"book_endpoint_v1_book_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Book Endpoint V1 Book Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/scenarios":{"get":{"summary":"Scenarios Endpoint","description":"Summaries of local scenario run artifacts (read-only).","operationId":"scenarios_endpoint_v1_scenarios_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Scenarios Endpoint V1 Scenarios Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/scenarios/validate":{"post":{"summary":"Scenario Validate Endpoint","description":"Validate a scenario bundle without running it. Execution stays fork/CLI-only.","operationId":"scenario_validate_endpoint_v1_scenarios_validate_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScenarioValidateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Scenario Validate Endpoint V1 Scenarios Validate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/scenarios/{scenario_id}":{"get":{"summary":"Scenario Detail Endpoint","description":"Full run result for one scenario (read-only).","operationId":"scenario_detail_endpoint_v1_scenarios__scenario_id__get","parameters":[{"name":"scenario_id","in":"path","required":true,"schema":{"type":"string","title":"Scenario Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Scenario Detail Endpoint V1 Scenarios  Scenario Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/case-studies":{"get":{"summary":"Case Studies Endpoint","description":"Summaries of exported case-study bundles (read-only).","operationId":"case_studies_endpoint_v1_case_studies_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Case Studies Endpoint V1 Case Studies Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/case-studies/{bundle_id}":{"get":{"summary":"Case Study Detail Endpoint","description":"One case-study bundle: markdown, run result, and MANIFEST verification.","operationId":"case_study_detail_endpoint_v1_case_studies__bundle_id__get","parameters":[{"name":"bundle_id","in":"path","required":true,"schema":{"type":"string","title":"Bundle Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Case Study Detail Endpoint V1 Case Studies  Bundle Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/analyse/contract":{"post":{"summary":"Analyse Contract Endpoint","description":"On-chain contract analysis. Chain name only — never a user RPC URL.","operationId":"analyse_contract_endpoint_v1_analyse_contract_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyseBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Analyse Contract Endpoint V1 Analyse Contract Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/analyse/wallet":{"post":{"summary":"Analyse Wallet Endpoint","description":"On-chain wallet analysis. Chain name only — never a user RPC URL.","operationId":"analyse_wallet_endpoint_v1_analyse_wallet_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyseBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Analyse Wallet Endpoint V1 Analyse Wallet Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AddCreditsRequest":{"properties":{"token_hash":{"type":"string","title":"Token Hash","description":"SHA-256 hash of the API token"},"compute_amount":{"type":"integer","title":"Compute Amount","description":"Compute credits to add","default":0},"gas_amount_native":{"type":"number","title":"Gas Amount Native","description":"Gas credits to add (in native token)","default":0.0},"is_unlimited":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Unlimited","description":"Unlimited transition: omitted preserves, false demotes, true enables"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config","description":"Optional per-token config (AI/Gas)"}},"type":"object","required":["token_hash"],"title":"AddCreditsRequest"},"AnalyseBody":{"properties":{"address":{"type":"string","title":"Address"},"chain":{"type":"string","title":"Chain"},"network":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Network"}},"type":"object","required":["address","chain"],"title":"AnalyseBody"},"BackupExportRequest":{"properties":{"password":{"type":"string","title":"Password","description":"Encryption password for the archive"},"output_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Output Path","description":"Custom output path (default: auto-generated timestamp)"}},"type":"object","required":["password"],"title":"BackupExportRequest","description":"Request to export encrypted backup archive."},"BackupExportResponse":{"properties":{"archive_path":{"type":"string","title":"Archive Path"},"size_bytes":{"type":"integer","title":"Size Bytes"},"sha256":{"type":"string","title":"Sha256"},"keystores_count":{"type":"integer","title":"Keystores Count"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["archive_path","size_bytes","sha256","keystores_count","timestamp"],"title":"BackupExportResponse"},"BackupImportRequest":{"properties":{"archive_path":{"type":"string","title":"Archive Path","description":"Path to encrypted backup archive"},"password":{"type":"string","title":"Password","description":"Decryption password"},"overwrite":{"type":"boolean","title":"Overwrite","description":"Overwrite existing keystores","default":false}},"type":"object","required":["archive_path","password"],"title":"BackupImportRequest","description":"Import keystores from an encrypted backup archive.\n\nPhase 4.1: `archive_path` and `password` used to be query parameters.\nA keystore password in a URL lands in access logs, proxy logs, browser\nhistory, and Referer headers. They are body fields now."},"BackupVerifyRequest":{"properties":{"archive_path":{"type":"string","title":"Archive Path","description":"Path to the encrypted archive"},"password":{"type":"string","title":"Password","description":"Decryption password"}},"type":"object","required":["archive_path","password"],"title":"BackupVerifyRequest","description":"Request to verify a backup archive integrity."},"BackupVerifyResponse":{"properties":{"valid":{"type":"boolean","title":"Valid"},"keystores_checked":{"type":"integer","title":"Keystores Checked"},"keystores_valid":{"type":"integer","title":"Keystores Valid"},"keystores_failed":{"type":"integer","title":"Keystores Failed"},"details":{"items":{"additionalProperties":{"type":"string"},"type":"object"},"type":"array","title":"Details"}},"type":"object","required":["valid","keystores_checked","keystores_valid","keystores_failed","details"],"title":"BackupVerifyResponse"},"BookAddRequest":{"properties":{"label":{"type":"string","title":"Label"},"address":{"type":"string","title":"Address"},"chain":{"type":"string","title":"Chain","default":""},"tags":{"items":{"type":"string"},"type":"array","title":"Tags"},"group":{"type":"string","title":"Group","default":""},"notes":{"type":"string","title":"Notes","default":""},"is_watch_only":{"type":"boolean","title":"Is Watch Only","description":"Gas wallet, we never hold seed","default":false}},"type":"object","required":["label","address"],"title":"BookAddRequest"},"BridgeRequest":{"properties":{"token_address":{"type":"string","title":"Token Address"},"amount":{"type":"integer","title":"Amount"},"sender":{"type":"string","title":"Sender"},"recipient":{"type":"string","title":"Recipient"},"source_chain":{"type":"string","title":"Source Chain"},"destination_chain":{"type":"string","title":"Destination Chain"}},"type":"object","required":["token_address","amount","sender","recipient","source_chain","destination_chain"],"title":"BridgeRequest","description":"A bridge operation request.\n\n``source_chain`` and ``destination_chain`` must both carry a bridge\nregistry entry (ADR-029: one chain table), and must differ: a bridge\noperation whose two ends are the same chain is not a bridge."},"BurnRequest":{"properties":{"chain":{"type":"string","title":"Chain"},"token_address":{"type":"string","title":"Token Address"},"amount":{"type":"integer","title":"Amount"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["chain","token_address","amount"],"title":"BurnRequest"},"ChallengeRequest":{"properties":{"address":{"type":"string","maxLength":42,"minLength":42,"title":"Address","description":"Ethereum address (0x-prefixed)"}},"type":"object","required":["address"],"title":"ChallengeRequest"},"ChallengeResponse":{"properties":{"nonce":{"type":"string","title":"Nonce"},"domain":{"type":"string","title":"Domain"},"address":{"type":"string","title":"Address"},"issued_at":{"type":"string","title":"Issued At"},"expiration_time":{"type":"string","title":"Expiration Time"},"message":{"type":"string","title":"Message"},"expires_in_seconds":{"type":"number","title":"Expires In Seconds"}},"type":"object","required":["nonce","domain","address","issued_at","expiration_time","message","expires_in_seconds"],"title":"ChallengeResponse"},"CompileRequest":{"properties":{"plan":{"additionalProperties":true,"type":"object","title":"Plan"},"template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template"}},"type":"object","required":["plan"],"title":"CompileRequest"},"ComplianceReportRequest":{"properties":{"features":{"items":{"type":"string"},"type":"array","title":"Features","description":"Token features to analyze"},"jurisdiction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Jurisdiction","description":"Specific jurisdiction to check (EU, US, Global)"}},"type":"object","required":["features"],"title":"ComplianceReportRequest"},"ComposeRequest":{"properties":{"intent":{"type":"string","title":"Intent"},"owner_address":{"type":"string","title":"Owner Address"},"chain_default":{"type":"string","title":"Chain Default","default":"localhost"},"max_plans":{"type":"integer","title":"Max Plans","default":10},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context"}},"type":"object","required":["intent","owner_address"],"title":"ComposeRequest"},"ComposeResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"composition":{"$ref":"#/components/schemas/CompositionResult"}},"type":"object","required":["session_id","composition"],"title":"ComposeResponse"},"ComposeThenDraftRequest":{"properties":{"intent":{"type":"string","title":"Intent"},"purpose":{"type":"string","title":"Purpose"},"owner_address":{"type":"string","title":"Owner Address"},"chain_default":{"type":"string","title":"Chain Default","default":"localhost"},"max_plans":{"type":"integer","title":"Max Plans","default":10},"verify_markers":{"type":"boolean","title":"Verify Markers","default":true}},"type":"object","required":["intent","purpose","owner_address"],"title":"ComposeThenDraftRequest"},"ComposeThenDraftResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"composition":{"$ref":"#/components/schemas/CompositionResult"},"draft":{"$ref":"#/components/schemas/DraftResult"}},"type":"object","required":["session_id","composition","draft"],"title":"ComposeThenDraftResponse"},"ComposedPlan":{"properties":{"plan":{"$ref":"#/components/schemas/DraftPlanInput"},"valid":{"type":"boolean","title":"Valid"},"reasons":{"items":{"type":"string"},"type":"array","title":"Reasons"}},"type":"object","required":["plan","valid"],"title":"ComposedPlan","description":"A validated plan with its validation outcome."},"CompositionResult":{"properties":{"plans":{"items":{"$ref":"#/components/schemas/ComposedPlan"},"type":"array","title":"Plans"},"explanation":{"type":"string","title":"Explanation"},"model_used":{"type":"string","title":"Model Used"}},"type":"object","required":["plans","explanation","model_used"],"title":"CompositionResult","description":"Outcome of composing token plans from intent."},"CreateTokenRequest":{"properties":{"label":{"type":"string","title":"Label","description":"Human-readable label for this token"},"scope":{"type":"string","title":"Scope","description":"Scope: admin, write, read, agent"},"expires_in_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires In Days","description":"Days until expiry (None = never)"},"ip_allowlist":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Allowlist","description":"Comma-separated IP allowlist"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email","description":"Friend contact email. Stored plain, shown to admin only. Not a login, not verified. Label is the name."},"compute_grant":{"type":"integer","title":"Compute Grant","description":"Initial compute credits. Default 0, which means the token is provisioned but cannot spend until topped up. This is deliberate: a missing balance row used to mean unlimited free use, so every token minted without a grant was free forever and nothing said so.","default":0}},"type":"object","required":["label","scope"],"title":"CreateTokenRequest"},"CreateTokenResponse":{"properties":{"token":{"type":"string","title":"Token"},"fingerprint":{"type":"string","title":"Fingerprint"},"label":{"type":"string","title":"Label"},"scope":{"type":"string","title":"Scope"},"created_at":{"type":"number","title":"Created At"},"expires_at":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["token","fingerprint","label","scope","created_at","expires_at"],"title":"CreateTokenResponse"},"CreateUserRequest":{"properties":{"username":{"type":"string","title":"Username","description":"Unique username"},"role":{"type":"string","title":"Role","description":"Role: owner, admin, operator, viewer"}},"type":"object","required":["username","role"],"title":"CreateUserRequest"},"CreateWebhookRequest":{"properties":{"url":{"type":"string","title":"Url","description":"Webhook URL to POST events to"},"events":{"items":{"type":"string"},"type":"array","title":"Events","description":"Event types to subscribe to"},"secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secret","description":"HMAC secret (auto-generated if not provided)"}},"type":"object","required":["url","events"],"title":"CreateWebhookRequest"},"DeployRequest":{"properties":{"plan":{"additionalProperties":true,"type":"object","title":"Plan"},"execute":{"type":"boolean","title":"Execute","default":false},"network":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Network","description":"testnet|mainnet"},"confirmation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confirmation"},"strict":{"type":"boolean","title":"Strict","default":false}},"type":"object","required":["plan"],"title":"DeployRequest"},"DraftPlanInput":{"properties":{"name":{"type":"string","title":"Name"},"symbol":{"type":"string","title":"Symbol"},"decimals":{"type":"integer","title":"Decimals","default":18},"chain":{"type":"string","title":"Chain"},"owner_address":{"type":"string","title":"Owner Address"},"features":{"items":{"type":"string"},"type":"array","title":"Features"},"access_control":{"type":"string","title":"Access Control","default":"ownable"},"premint_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Premint Amount"},"premint_recipient":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Premint Recipient"},"cap_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cap Amount"},"template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template"},"transfer_auth_revocable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Transfer Auth Revocable"},"transfer_auth_scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transfer Auth Scope"},"transfer_auth_pool_expiry":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Transfer Auth Pool Expiry"},"kind":{"type":"string","title":"Kind","default":"fungible"},"asset_class":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Class"}},"type":"object","required":["name","symbol","chain","owner_address"],"title":"DraftPlanInput","description":"Input shape an agent may submit for drafting. Mirrors TokenPlan fields\nthe agent controls; execution flags are structurally impossible here."},"DraftRequestBody":{"properties":{"purpose":{"type":"string","title":"Purpose"},"plans":{"items":{"$ref":"#/components/schemas/DraftPlanInput"},"type":"array","title":"Plans"},"verify_markers":{"type":"boolean","title":"Verify Markers","default":true}},"type":"object","required":["purpose","plans"],"title":"DraftRequestBody"},"DraftResponse":{"properties":{"draft":{"$ref":"#/components/schemas/DraftResult"}},"type":"object","required":["draft"],"title":"DraftResponse"},"DraftResult":{"properties":{"draft_id":{"type":"string","title":"Draft Id"},"purpose":{"type":"string","title":"Purpose"},"plans":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Plans"},"sources":{"items":{"$ref":"#/components/schemas/DraftSourceArtifact"},"type":"array","title":"Sources"},"review_notes":{"items":{"type":"string"},"type":"array","title":"Review Notes"},"executed":{"type":"boolean","title":"Executed","default":false},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["draft_id","purpose","plans","sources","review_notes","created_at"],"title":"DraftResult","description":"The complete, read-only artifact of one agent draft call.\n\n`executed` is fixed at False: the draft type has no field for a\ntransaction hash, signature, or nonce — the agent cannot smuggle one in."},"DraftSourceArtifact":{"properties":{"symbol":{"type":"string","title":"Symbol"},"contract_name":{"type":"string","title":"Contract Name"},"source_path":{"type":"string","title":"Source Path"},"template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template"},"marker_status":{"type":"string","title":"Marker Status"},"custody_verdict":{"type":"string","title":"Custody Verdict"}},"type":"object","required":["symbol","contract_name","source_path","marker_status","custody_verdict"],"title":"DraftSourceArtifact","description":"One generated (never deployed) source artifact."},"DryRunRequest":{"properties":{"plan":{"additionalProperties":true,"type":"object","title":"Plan"}},"type":"object","required":["plan"],"title":"DryRunRequest"},"EmailStartRequest":{"properties":{"email":{"type":"string","maxLength":254,"minLength":3,"title":"Email"}},"type":"object","required":["email"],"title":"EmailStartRequest"},"EmailStartResponse":{"properties":{"ok":{"type":"boolean","title":"Ok","default":true},"detail":{"type":"string","title":"Detail","default":"If the address is valid, a sign-in link has been sent."}},"type":"object","title":"EmailStartResponse"},"EmailVerifyRequest":{"properties":{"token":{"type":"string","maxLength":256,"minLength":16,"title":"Token"}},"type":"object","required":["token"],"title":"EmailVerifyRequest"},"EmailVerifyResponse":{"properties":{"token":{"type":"string","title":"Token"},"fingerprint":{"type":"string","title":"Fingerprint"},"scope":{"type":"string","title":"Scope"},"user_id":{"type":"string","title":"User Id"},"email":{"type":"string","title":"Email"}},"type":"object","required":["token","fingerprint","scope","user_id","email"],"title":"EmailVerifyResponse"},"FreezeRequest":{"properties":{"chain":{"type":"string","title":"Chain"},"token_address":{"type":"string","title":"Token Address"},"target_address":{"type":"string","title":"Target Address"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["chain","token_address","target_address"],"title":"FreezeRequest"},"GovernanceConfigRequest":{"properties":{"token_address":{"type":"string","title":"Token Address","description":"DAO token contract address"},"total_supply":{"type":"integer","title":"Total Supply","description":"Total supply in wei (e.g., '1000000000000000000000000')"},"quorum_percent":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Quorum Percent","description":"Quorum as % of total supply","default":4},"voting_period_blocks":{"type":"integer","exclusiveMinimum":0.0,"title":"Voting Period Blocks","description":"Voting period in blocks (~1 week)","default":45818},"timelock_delay_seconds":{"type":"integer","minimum":0.0,"title":"Timelock Delay Seconds","description":"Timelock delay in seconds","default":86400}},"type":"object","required":["token_address","total_supply"],"title":"GovernanceConfigRequest"},"GuideRequest":{"properties":{"usecase":{"type":"string","maxLength":3000,"minLength":5,"title":"Usecase"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner","description":"Optional owner address"},"chain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chain","description":"Preferred chain"},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id","description":"Resume an existing conversation (returned by previous call)"},"follow_up":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Follow Up","description":"Answer to a previous clarifying question"}},"type":"object","required":["usecase"],"title":"GuideRequest","description":"Natural-language usecase description for guided token creation."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IdempotencyResolveRequest":{"properties":{"key":{"type":"string","maxLength":2048,"minLength":1,"title":"Key"},"fingerprint":{"type":"string","maxLength":128,"minLength":1,"title":"Fingerprint"},"action":{"type":"string","enum":["complete","release"],"title":"Action"},"response":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Response","description":"The recorded result for action=complete (for example the tx receipt the operator found on chain). Must be absent for release."},"reason":{"type":"string","maxLength":500,"minLength":1,"title":"Reason","description":"Why this decision is safe; recorded in the audit row."}},"type":"object","required":["key","fingerprint","action","reason"],"title":"IdempotencyResolveRequest","description":"One explicit operator decision about an effect-unknown claim."},"ImportAnalyzeRequest":{"properties":{"source":{"type":"string","maxLength":50000,"minLength":10,"title":"Source","description":"Raw Solidity source code"},"chain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chain","description":"Target chain (for template recommendation)"}},"type":"object","required":["source"],"title":"ImportAnalyzeRequest","description":"Request body for contract analysis."},"ImportAnalyzeResponse":{"properties":{"contract_name":{"type":"string","title":"Contract Name"},"standard":{"type":"string","title":"Standard"},"features":{"items":{"type":"string"},"type":"array","title":"Features"},"events":{"items":{"type":"string"},"type":"array","title":"Events"},"modifiers":{"items":{"type":"string"},"type":"array","title":"Modifiers"},"inheritance":{"items":{"type":"string"},"type":"array","title":"Inheritance"},"pragma":{"type":"string","title":"Pragma"},"license":{"type":"string","title":"License"},"is_upgradeable":{"type":"boolean","title":"Is Upgradeable"},"recommended_template":{"type":"string","title":"Recommended Template"},"confidence":{"type":"number","title":"Confidence"}},"type":"object","required":["contract_name","standard","features","events","modifiers","inheritance","pragma","license","is_upgradeable","recommended_template","confidence"],"title":"ImportAnalyzeResponse","description":"Response from contract analysis."},"ImportPlanRequest":{"properties":{"source":{"type":"string","maxLength":50000,"minLength":10,"title":"Source","description":"Raw Solidity source code"},"chain":{"type":"string","title":"Chain","description":"Target deployment chain"},"name":{"type":"string","maxLength":64,"minLength":1,"title":"Name","description":"Token name override"},"symbol":{"type":"string","maxLength":12,"minLength":1,"title":"Symbol","description":"Token symbol override"},"decimals":{"type":"integer","maximum":18.0,"minimum":0.0,"title":"Decimals","description":"Token decimals override","default":18}},"type":"object","required":["source","chain","name","symbol"],"title":"ImportPlanRequest","description":"Request body for generating a deployment plan from source."},"ImportPlanResponse":{"properties":{"template":{"type":"string","title":"Template"},"chain":{"type":"string","title":"Chain"},"parameters":{"additionalProperties":true,"type":"object","title":"Parameters"},"warnings":{"items":{"type":"string"},"type":"array","title":"Warnings"},"features_enabled":{"items":{"type":"string"},"type":"array","title":"Features Enabled"}},"type":"object","required":["template","chain","parameters","warnings","features_enabled"],"title":"ImportPlanResponse","description":"Response from plan generation."},"ImportSeedRequest":{"properties":{"mnemonic":{"type":"string","title":"Mnemonic","description":"12 or 24 word BIP-39 mnemonic"},"password":{"type":"string","title":"Password","description":"Encryption password for keystores"},"roles":{"items":{"type":"string"},"type":"array","title":"Roles","description":"Roles to derive keys for (deployer, treasury, operations, watch)","default":["deployer"]},"counts":{"additionalProperties":{"type":"integer"},"type":"object","title":"Counts","description":"Per-role key count (default: 1 each, max 100)","default":{}},"note":{"anyOf":[{"type":"string","maxLength":256},{"type":"null"}],"title":"Note","description":"Human-readable note for this seed session, e.g. 'Production Jan 2026'"}},"type":"object","required":["mnemonic","password"],"title":"ImportSeedRequest","description":"Request to import a BIP-39 mnemonic and derive role-based keys."},"ImportSeedResponse":{"properties":{"keys":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Keys"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["keys","count"],"title":"ImportSeedResponse"},"LinkRequest":{"properties":{"session_id":{"type":"string","title":"Session Id","description":"Fresh wallet session from /verify"}},"type":"object","required":["session_id"],"title":"LinkRequest"},"LinkResponse":{"properties":{"address":{"type":"string","title":"Address"},"verified_at":{"type":"number","title":"Verified At"},"token_name":{"type":"string","title":"Token Name"}},"type":"object","required":["address","verified_at","token_name"],"title":"LinkResponse"},"LoginRequest":{"properties":{"address":{"type":"string","maxLength":42,"minLength":42,"title":"Address","description":"Ethereum address that signed"},"nonce":{"type":"string","title":"Nonce","description":"Challenge nonce from /v1/wallet/challenge"},"signature":{"type":"string","minLength":132,"title":"Signature","description":"Hex-encoded EIP-191 signature (0x-prefixed)"},"scope":{"type":"string","title":"Scope","description":"Requested scope. Login mints read only; admin and write are structurally unreachable from here.","default":"read"},"rotate":{"type":"boolean","title":"Rotate","description":"Revoke this member's earlier login tokens when minting.","default":false}},"type":"object","required":["address","nonce","signature"],"title":"LoginRequest"},"LoginResponse":{"properties":{"token":{"type":"string","title":"Token"},"fingerprint":{"type":"string","title":"Fingerprint"},"scope":{"type":"string","title":"Scope"},"user_id":{"type":"string","title":"User Id"},"address":{"type":"string","title":"Address"},"created_at":{"type":"number","title":"Created At"},"expires_at":{"type":"number","title":"Expires At"}},"type":"object","required":["token","fingerprint","scope","user_id","address","created_at","expires_at"],"title":"LoginResponse"},"MarketRequest":{"properties":{"address":{"type":"string","title":"Address","description":"Deployed binary prediction-market address (EIP-55)"},"chain":{"type":"string","title":"Chain","description":"Chain name, e.g. arc"},"network":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Network","description":"'testnet' | 'mainnet'; never an RPC URL"}},"type":"object","required":["address","chain"],"title":"MarketRequest"},"MintRequest":{"properties":{"chain":{"type":"string","title":"Chain"},"token_address":{"type":"string","title":"Token Address"},"to_address":{"type":"string","title":"To Address"},"amount":{"type":"integer","title":"Amount"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["chain","token_address","to_address","amount"],"title":"MintRequest"},"MultichainCreateRequest":{"properties":{"plan":{"additionalProperties":true,"type":"object","title":"Plan"},"chains":{"items":{"type":"string"},"type":"array","title":"Chains"},"ai_session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Session Id"}},"type":"object","required":["plan","chains"],"title":"MultichainCreateRequest"},"OnboardTokenRequest":{"properties":{"name":{"type":"string","maxLength":128,"title":"Name","description":"Token name, e.g. 'Keshav Token'"},"symbol":{"type":"string","title":"Symbol","description":"Token ticker, e.g. 'KESH' (3-5 uppercase letters)"},"type":{"type":"string","title":"Type","description":"Token type: standard, governance, stablecoin, security, dao, nft","default":"standard"},"chain":{"type":"string","title":"Chain","description":"Chain: ethereum, polygon, arc (dev: localhost, hardhat)"},"supply":{"type":"integer","title":"Supply","description":"Total supply in whole tokens, e.g. '1000000'"},"owner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner","description":"Wallet address to receive premint. Defaults to deployer."},"decimals":{"type":"integer","maximum":18.0,"minimum":0.0,"title":"Decimals","description":"Token decimals (default 18)","default":18},"pausable":{"type":"boolean","title":"Pausable","description":"Allow pausing transfers (compliance)","default":false},"mintable":{"type":"boolean","title":"Mintable","description":"Allow minting more tokens later","default":false},"burnable":{"type":"boolean","title":"Burnable","description":"Allow burning tokens","default":false}},"type":"object","required":["name","symbol","chain","supply"],"title":"OnboardTokenRequest","description":"Simple token creation intent — no jargon required."},"OperationLogEntry":{"properties":{"chain":{"type":"string","title":"Chain"},"token_address":{"type":"string","title":"Token Address"},"action":{"type":"string","title":"Action"},"amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Amount"},"target_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Address"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"requested_at":{"type":"string","title":"Requested At"}},"type":"object","required":["chain","token_address","action","requested_at"],"title":"OperationLogEntry"},"PauseRequest":{"properties":{"chain":{"type":"string","title":"Chain"},"token_address":{"type":"string","title":"Token Address"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["chain","token_address"],"title":"PauseRequest"},"PlanRequest":{"properties":{"plan":{"additionalProperties":true,"type":"object","title":"Plan"},"write_source":{"type":"boolean","title":"Write Source","default":true},"template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template"}},"type":"object","required":["plan"],"title":"PlanRequest"},"ProposalRequest":{"properties":{"token_address":{"type":"string","title":"Token Address"},"total_supply":{"type":"integer","title":"Total Supply"},"quorum_percent":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Quorum Percent","default":4},"title":{"type":"string","maxLength":256,"title":"Title"},"description":{"type":"string","maxLength":10000,"title":"Description","default":""},"proposer":{"type":"string","title":"Proposer"},"targets":{"items":{"type":"string"},"type":"array","title":"Targets"},"values":{"items":{"type":"integer"},"type":"array","title":"Values"},"calldatas":{"items":{"type":"string"},"type":"array","title":"Calldatas"},"current_block":{"type":"integer","minimum":0.0,"title":"Current Block"}},"type":"object","required":["token_address","total_supply","title","proposer","targets","values","calldatas","current_block"],"title":"ProposalRequest"},"R2UploadRequest":{"properties":{"archive_path":{"type":"string","title":"Archive Path","description":"Path to the encrypted archive"},"r2_account_id":{"type":"string","title":"R2 Account Id","description":"Cloudflare R2 account ID"},"r2_access_key":{"type":"string","title":"R2 Access Key","description":"R2 access key ID"},"r2_secret_key":{"type":"string","title":"R2 Secret Key","description":"R2 secret access key"},"r2_bucket":{"type":"string","title":"R2 Bucket","description":"R2 bucket name","default":"mintrr-backups"},"r2_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"R2 Key","description":"Object key (default: filename)"}},"type":"object","required":["archive_path","r2_account_id","r2_access_key","r2_secret_key"],"title":"R2UploadRequest","description":"Request to upload backup to Cloudflare R2."},"RefineRequest":{"properties":{"session_id":{"type":"string","title":"Session Id"},"feedback":{"type":"string","title":"Feedback"}},"type":"object","required":["session_id","feedback"],"title":"RefineRequest"},"RefineResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"turn":{"type":"integer","title":"Turn"},"composition":{"$ref":"#/components/schemas/CompositionResult"},"changes":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Changes"}},"type":"object","required":["session_id","turn","composition","changes"],"title":"RefineResponse"},"ReviewRequest":{"properties":{"plan":{"additionalProperties":true,"type":"object","title":"Plan"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},"type":"object","required":["plan"],"title":"ReviewRequest"},"RotateKeyRequest":{"properties":{"role":{"type":"string","title":"Role","description":"Role to rotate (deployer, treasury, operations)"},"password":{"type":"string","title":"Password","description":"Keystore encryption password"},"chain":{"type":"string","title":"Chain","description":"Chain for gas transfer","default":"polygon"},"transfer_all_gas":{"type":"boolean","title":"Transfer All Gas","description":"Transfer all gas from old to new key","default":true}},"type":"object","required":["role","password"],"title":"RotateKeyRequest","description":"Request to rotate the active key for a role."},"RotateKeyResponse":{"properties":{"record":{"additionalProperties":true,"type":"object","title":"Record"},"old_key_retired":{"type":"boolean","title":"Old Key Retired"},"new_key_active":{"type":"boolean","title":"New Key Active"}},"type":"object","required":["record","old_key_retired","new_key_active"],"title":"RotateKeyResponse"},"RotateRequest":{"properties":{"address":{"type":"string","maxLength":42,"minLength":42,"title":"Address"},"nonce":{"type":"string","title":"Nonce","description":"A fresh challenge nonce"},"signature":{"type":"string","minLength":132,"title":"Signature","description":"Hex-encoded EIP-191 signature (0x-prefixed)"},"scope":{"type":"string","title":"Scope","description":"Scope for the replacement token","default":"read"}},"type":"object","required":["address","nonce","signature"],"title":"RotateRequest","description":"Rotation's inputs. Deliberately NOT LoginRequest.\n\nRotation always rotates; it does not take a ``rotate`` flag that a caller\ncould set to false and quietly get a second live token instead. A flag\nwhose wrong value silently defeats the operation it names is worse than no\nflag."},"RwaPreflightRequest":{"properties":{"chain":{"type":"string","maxLength":32,"minLength":1,"title":"Chain"},"issuer":{"type":"string","maxLength":42,"minLength":42,"title":"Issuer"},"name":{"type":"string","maxLength":64,"minLength":1,"title":"Name","default":"RWA Security Token"},"symbol":{"type":"string","maxLength":16,"minLength":1,"title":"Symbol","default":"RWA"},"cap":{"type":"string","maxLength":78,"minLength":1,"title":"Cap","default":"1000000"},"seizer":{"anyOf":[{"type":"string","maxLength":42,"minLength":42},{"type":"null"}],"title":"Seizer"},"underlying":{"anyOf":[{"type":"string","maxLength":42,"minLength":42},{"type":"null"}],"title":"Underlying"},"blocked_countries":{"items":{"type":"integer"},"type":"array","title":"Blocked Countries"},"max_wallet_holdings":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"title":"Max Wallet Holdings"},"max_transfer_amount":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"title":"Max Transfer Amount"},"cooling_period_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cooling Period Seconds"}},"type":"object","required":["chain","issuer"],"title":"RwaPreflightRequest"},"ScenarioValidateRequest":{"properties":{"scenario":{"additionalProperties":true,"type":"object","title":"Scenario"}},"type":"object","required":["scenario"],"title":"ScenarioValidateRequest"},"SessionBroadcastRequest":{"properties":{"signed_tx_hex":{"type":"string","maxLength":2000000,"minLength":2,"title":"Signed Tx Hex"}},"type":"object","required":["signed_tx_hex"],"title":"SessionBroadcastRequest"},"SessionCreateRequest":{"properties":{"plan":{"additionalProperties":true,"type":"object","title":"Plan"},"ai_session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Session Id"}},"type":"object","required":["plan"],"title":"SessionCreateRequest"},"SessionResponse":{"properties":{"address":{"type":"string","title":"Address"},"created_at":{"type":"string","title":"Created At"},"expires_at":{"type":"string","title":"Expires At"},"is_valid":{"type":"boolean","title":"Is Valid"}},"type":"object","required":["address","created_at","expires_at","is_valid"],"title":"SessionResponse"},"SuggestRequest":{"properties":{"intent":{"type":"string","maxLength":2000,"minLength":1,"title":"Intent"},"limit":{"type":"integer","maximum":8.0,"minimum":1.0,"title":"Limit","default":3}},"type":"object","required":["intent"],"title":"SuggestRequest"},"TokenStats":{"properties":{"address":{"type":"string","title":"Address"},"chain":{"type":"string","title":"Chain"},"template":{"type":"string","title":"Template"},"features":{"type":"string","title":"Features"},"total_transactions":{"type":"integer","title":"Total Transactions","default":0},"first_seen":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"First Seen"},"last_activity":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Last Activity"}},"type":"object","required":["address","chain","template","features"],"title":"TokenStats"},"TokenStatusResponse":{"properties":{"chain":{"type":"string","title":"Chain"},"address":{"type":"string","title":"Address"},"owner":{"type":"string","title":"Owner"},"total_supply":{"type":"string","title":"Total Supply"},"is_paused":{"type":"boolean","title":"Is Paused"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"symbol":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Symbol"}},"type":"object","required":["chain","address","owner","total_supply","is_paused"],"title":"TokenStatusResponse","description":"Measured on-chain token status.\n\n``owner``, ``total_supply`` and ``is_paused`` are read from the chain by\nthis request. ``name``/``symbol`` are ``None`` because this route does not\nread them; they are never a fabricated default. A caller that cannot get a\nlive read receives an error, not this model."},"UnsignedRequest":{"properties":{"plan":{"additionalProperties":true,"type":"object","title":"Plan"},"confirmation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confirmation"},"from_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Address"}},"type":"object","required":["plan"],"title":"UnsignedRequest"},"UnsignedTxResponse":{"properties":{"to":{"type":"string","title":"To"},"data":{"type":"string","title":"Data"},"value":{"type":"string","title":"Value","default":"0"},"chain":{"type":"string","title":"Chain"},"nonce":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Nonce"},"gas_limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Gas Limit"}},"type":"object","required":["to","data","chain"],"title":"UnsignedTxResponse"},"UserResponse":{"properties":{"id":{"type":"integer","title":"Id"},"username":{"type":"string","title":"Username"},"role":{"type":"string","title":"Role"},"created_at":{"type":"number","title":"Created At"},"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["id","username","role","created_at","is_active"],"title":"UserResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerifyRequest":{"properties":{"address":{"type":"string","maxLength":42,"minLength":42,"title":"Address","description":"Ethereum address that signed"},"nonce":{"type":"string","title":"Nonce","description":"Challenge nonce"},"signature":{"type":"string","minLength":132,"title":"Signature","description":"Hex-encoded signature (0x-prefixed)"}},"type":"object","required":["address","nonce","signature"],"title":"VerifyRequest"},"VerifyResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"address":{"type":"string","title":"Address"},"expires_at":{"type":"string","title":"Expires At"},"is_valid":{"type":"boolean","title":"Is Valid","default":true}},"type":"object","required":["session_id","address","expires_at"],"title":"VerifyResponse"},"VoteRequest":{"properties":{"proposal_id":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$","title":"Proposal Id"},"voter":{"type":"string","title":"Voter"},"vote":{"type":"string","title":"Vote"},"weight":{"type":"integer","title":"Weight"},"current_block":{"type":"integer","minimum":0.0,"title":"Current Block"}},"type":"object","required":["proposal_id","voter","vote","weight","current_block"],"title":"VoteRequest"},"WatchRequest":{"properties":{"chain":{"type":"string","title":"Chain","description":"Chain to scan, e.g. 'base'"},"address":{"type":"string","title":"Address","description":"Deposit address to scan for transfers to"}},"type":"object","required":["chain","address"],"title":"WatchRequest"},"WebhookResponse":{"properties":{"webhook_id":{"type":"string","title":"Webhook Id"},"url":{"type":"string","title":"Url"},"events":{"items":{"type":"string"},"type":"array","title":"Events"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"number","title":"Created At"}},"type":"object","required":["webhook_id","url","events","is_active","created_at"],"title":"WebhookResponse"},"WebhookTestRequest":{"properties":{"url":{"type":"string","title":"Url"},"secret":{"type":"string","title":"Secret","default":""}},"type":"object","required":["url"],"title":"WebhookTestRequest","description":"Body for a webhook test delivery.\n\nW-SERVICE-CREDURL-001: `url` and `secret` were bare query parameters, so\nthe HMAC secret travelled in the request line and was written verbatim to\nthe uvicorn access log, then to nginx and any APM. The secret belongs in\na body, which is where Phase 4.1 already moved the identical\nkeystore-password parameter in `vault_routes.py`."},"WhoamiResponse":{"properties":{"fingerprint":{"type":"string","title":"Fingerprint"},"scope":{"type":"string","title":"Scope"},"label":{"type":"string","title":"Label"},"userID":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Userid"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"created_at":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Created At"},"expires_at":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Expires At"},"seconds_remaining":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Seconds Remaining"},"metered":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Metered"},"metered_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metered Note"}},"type":"object","required":["fingerprint","scope","label"],"title":"WhoamiResponse"}}}}