{"openapi":"3.1.0","info":{"title":"Machine Preflight Protect API","version":"0.1.0","description":"Read-only monitoring of new approval events for public Base wallet addresses.","contact":{"email":"nora@natio.re"},"x-guidance":"Enroll only with explicit user permission. The returned management token is private and must be sent only as a Bearer token."},"servers":[{"url":"https://protect.natio.re"}],"paths":{"/api/monitors":{"post":{"operationId":"createWalletMonitor","summary":"Start a time-limited wallet monitoring trial","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMonitor"}}}},"responses":{"201":{"description":"Monitor created; management token returned once"},"400":{"description":"Invalid input"},"429":{"description":"Rate or capacity limit reached"},"503":{"description":"Base RPC unavailable"}}}},"/api/monitor":{"get":{"operationId":"getWalletMonitor","summary":"Read monitor status and recent alerts","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Monitor view"},"401":{"description":"Invalid token"}}},"delete":{"operationId":"deleteWalletMonitor","summary":"Delete a monitor and its alert history","security":[{"bearerAuth":[]}],"responses":{"204":{"description":"Deleted"},"401":{"description":"Invalid token"}}}},"/api/monitor/status":{"post":{"operationId":"setWalletMonitorStatus","summary":"Pause or resume a non-expired monitor","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["status"],"properties":{"status":{"type":"string","enum":["active","paused"]}}}}}},"responses":{"200":{"description":"Updated"},"401":{"description":"Invalid token"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"opaque management token"}},"schemas":{"CreateMonitor":{"type":"object","additionalProperties":false,"required":["walletAddress","email","consent"],"properties":{"walletAddress":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"email":{"type":"string","format":"email"},"label":{"type":"string","maxLength":60},"consent":{"type":"boolean","const":true},"website":{"type":"string","description":"Anti-bot field; leave empty."}}}}}}