{"openapi":"3.1.0","info":{"title":"FTSOBest x402 and Watchdog API","version":"1.0.0","description":"Create a SIWE challenge, sign the exact message, exchange it for a scoped bearer token, then use read, write, or spend operations. Tokens can be listed and revoked by their wallet owner."},"servers":[{"url":"https://ftso.app"}],"externalDocs":{"description":"Machine API — x402 v1 (FTSOBest prepaid scheme, not x402 V2 exact)","url":"https://ftso.app/docs/machine-api/overview"},"paths":{"/api/x402/account":{"get":{"operationId":"getAccount","summary":"Get credit balance and ledger","tags":["account"],"security":[{"bearerAuth":[]}],"x-required-scope":"read","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/account/terms":{"get":{"operationId":"getAccountTerms","summary":"Get terms acceptance","tags":["account"],"security":[{"bearerAuth":[]}],"x-required-scope":"read","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"acceptAccountTerms","summary":"Accept current terms","tags":["account"],"security":[{"bearerAuth":[]}],"x-required-scope":"write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"wallet":"0x000000000000000000000000000000000000dEaD"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/alerts":{"get":{"operationId":"listAlerts","summary":"List alert history","tags":["alerts"],"security":[{"bearerAuth":[]}],"x-required-scope":"read","parameters":[{"name":"watchId","in":"query","required":false,"schema":{"type":"string"}},{"name":"watchType","in":"query","required":false,"schema":{"type":"string"}},{"name":"severity","in":"query","required":false,"schema":{"type":"string"}},{"name":"group","in":"query","required":false,"schema":{"type":"string"}},{"name":"delivery","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}},{"name":"search","in":"query","required":false,"schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string"}},{"name":"direction","in":"query","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","required":false,"schema":{"type":"string"}},{"name":"pageSize","in":"query","required":false,"schema":{"type":"string"}},{"name":"help","in":"query","required":false,"schema":{"type":"string"}},{"name":"locale","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"deleteAlerts","summary":"Delete selected alert history","tags":["alerts"],"security":[{"bearerAuth":[]}],"x-required-scope":"write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"wallet":"0x000000000000000000000000000000000000dEaD"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/alerts/{id}":{"delete":{"operationId":"deleteAlert","summary":"Delete one alert","tags":["alerts"],"security":[{"bearerAuth":[]}],"x-required-scope":"write","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/alerts/export":{"get":{"operationId":"exportAlerts","summary":"Export alert history as CSV","tags":["alerts"],"security":[{"bearerAuth":[]}],"x-required-scope":"read","parameters":[{"name":"watchId","in":"query","required":false,"schema":{"type":"string"}},{"name":"watchType","in":"query","required":false,"schema":{"type":"string"}},{"name":"severity","in":"query","required":false,"schema":{"type":"string"}},{"name":"group","in":"query","required":false,"schema":{"type":"string"}},{"name":"delivery","in":"query","required":false,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"schema":{"type":"string"}},{"name":"to","in":"query","required":false,"schema":{"type":"string"}},{"name":"search","in":"query","required":false,"schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string"}},{"name":"direction","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/auth/challenge":{"post":{"operationId":"createAuthChallenge","summary":"Create a scoped SIWE challenge","tags":["auth"],"security":[],"x-required-scope":"none","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"wallet":"0x000000000000000000000000000000000000dEaD"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/auth/token":{"post":{"operationId":"exchangeAuthToken","summary":"Exchange signed SIWE for a bearer token","tags":["auth"],"security":[],"x-required-scope":"none","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"wallet":"0x000000000000000000000000000000000000dEaD"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/auth/tokens":{"get":{"operationId":"listAuthTokens","summary":"List wallet API tokens","tags":["auth"],"security":[{"bearerAuth":[]}],"x-required-scope":"read","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/auth/tokens/{id}":{"delete":{"operationId":"revokeAuthToken","summary":"Revoke an API token","tags":["auth"],"security":[{"bearerAuth":[]}],"x-required-scope":"write","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/channels":{"get":{"operationId":"listChannels","summary":"List channel status","tags":["channels"],"security":[{"bearerAuth":[]}],"x-required-scope":"read","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/channels/{key}":{"put":{"operationId":"putChannel","summary":"Configure an input channel","tags":["channels"],"security":[{"bearerAuth":[]}],"x-required-scope":"write","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"wallet":"0x000000000000000000000000000000000000dEaD"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"deleteChannel","summary":"Remove a channel target","tags":["channels"],"security":[{"bearerAuth":[]}],"x-required-scope":"write","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/channels/{key}/test":{"post":{"operationId":"testChannel","summary":"Send a channel test","tags":["channels"],"security":[{"bearerAuth":[]}],"x-required-scope":"write","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/message-preview":{"post":{"operationId":"previewMessage","summary":"Preview a localized message","tags":["message-preview"],"security":[{"bearerAuth":[]}],"x-required-scope":"read","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"wallet":"0x000000000000000000000000000000000000dEaD"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/openapi.json":{"get":{"operationId":"getOpenApi","summary":"Get this OpenAPI document","tags":["openapi.json"],"security":[],"x-required-scope":"none","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/pricing":{"get":{"operationId":"getPricing","summary":"Discover pricing, products, watches, signals and help","tags":["pricing"],"security":[],"x-required-scope":"none","parameters":[{"name":"locale","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/provider-fsp":{"get":{"operationId":"getProviderFsp","summary":"Get provider FSP view","tags":["provider-fsp"],"security":[{"bearerAuth":[]}],"x-required-scope":"read","parameters":[{"name":"chain","in":"query","required":false,"schema":{"type":"string"}},{"name":"identity","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/recipients":{"get":{"operationId":"listRecipients","summary":"List named recipients","tags":["recipients"],"security":[{"bearerAuth":[]}],"x-required-scope":"read","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createRecipient","summary":"Create an input recipient","tags":["recipients"],"security":[{"bearerAuth":[]}],"x-required-scope":"write","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"wallet":"0x000000000000000000000000000000000000dEaD"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/recipients/{id}":{"patch":{"operationId":"updateRecipient","summary":"Update a recipient","tags":["recipients"],"security":[{"bearerAuth":[]}],"x-required-scope":"write","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"wallet":"0x000000000000000000000000000000000000dEaD"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"deleteRecipient","summary":"Delete a recipient","tags":["recipients"],"security":[{"bearerAuth":[]}],"x-required-scope":"write","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/recipients/{id}/test":{"post":{"operationId":"testRecipient","summary":"Test a recipient","tags":["recipients"],"security":[{"bearerAuth":[]}],"x-required-scope":"write","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/recipients/telegram-link":{"post":{"operationId":"createTelegramLink","summary":"Create a Telegram recipient link","tags":["recipients"],"security":[{"bearerAuth":[]}],"x-required-scope":"write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"wallet":"0x000000000000000000000000000000000000dEaD"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/settings":{"get":{"operationId":"getSettings","summary":"Get notification settings","tags":["settings"],"security":[{"bearerAuth":[]}],"x-required-scope":"read","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"operationId":"putSettings","summary":"Replace notification settings","tags":["settings"],"security":[{"bearerAuth":[]}],"x-required-scope":"write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"wallet":"0x000000000000000000000000000000000000dEaD"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/stats":{"get":{"operationId":"getStats","summary":"Get public billing aggregates","tags":["stats"],"security":[],"x-required-scope":"none","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/subscriptions":{"get":{"operationId":"listSubscriptions","summary":"List subscriptions and capacity","tags":["subscriptions"],"security":[{"bearerAuth":[]}],"x-required-scope":"read","parameters":[{"name":"product","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createSubscription","summary":"Purchase subscription capacity","tags":["subscriptions"],"security":[{"bearerAuth":[]}],"x-required-scope":"spend","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"wallet":"0x000000000000000000000000000000000000dEaD"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Capacity or credits required","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/SlotRequired"},{"$ref":"#/components/schemas/InsufficientCredits"}]}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"updateSubscription","summary":"Update auto-renew","tags":["subscriptions"],"security":[{"bearerAuth":[]}],"x-required-scope":"write","x-conditional-scope":"spend when autoRenew is true","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"wallet":"0x000000000000000000000000000000000000dEaD"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/subscriptions/quote":{"get":{"operationId":"getSubscriptionQuote","summary":"Quote subscription capacity","tags":["subscriptions"],"security":[{"bearerAuth":[]}],"x-required-scope":"read","parameters":[{"name":"product","in":"query","required":false,"schema":{"type":"string"}},{"name":"quantity","in":"query","required":false,"schema":{"type":"string"}},{"name":"periods","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/subscriptions/trial":{"post":{"operationId":"createTrial","summary":"Start the one-time trial","tags":["subscriptions"],"security":[{"bearerAuth":[]}],"x-required-scope":"write","responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/topup":{"post":{"operationId":"createTopup","summary":"Create a topup draft","tags":["topup"],"security":[{"bearerAuth":[]}],"x-required-scope":"write","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"wallet":"0x000000000000000000000000000000000000dEaD"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/topup/{handle}":{"get":{"operationId":"getTopup","summary":"Get topup status","tags":["topup"],"security":[{"bearerAuth":[]}],"x-required-scope":"read","parameters":[{"name":"handle","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/topup/{handle}/confirm":{"post":{"operationId":"confirmTopup","summary":"Confirm a topup transaction","tags":["topup"],"security":[{"bearerAuth":[]}],"x-required-scope":"write","parameters":[{"name":"handle","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"wallet":"0x000000000000000000000000000000000000dEaD"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/watches":{"get":{"operationId":"listWatches","summary":"List watches","tags":["watches"],"security":[{"bearerAuth":[]}],"x-required-scope":"read","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createWatch","summary":"Create a watch","tags":["watches"],"security":[{"bearerAuth":[]}],"x-required-scope":"write","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"wallet":"0x000000000000000000000000000000000000dEaD"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Capacity or credits required","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/SlotRequired"},{"$ref":"#/components/schemas/InsufficientCredits"}]}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/x402/watches/{id}":{"get":{"operationId":"getWatch","summary":"Get a watch","tags":["watches"],"security":[{"bearerAuth":[]}],"x-required-scope":"read","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"updateWatch","summary":"Update a watch","tags":["watches"],"security":[{"bearerAuth":[]}],"x-required-scope":"write","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true},"example":{"wallet":"0x000000000000000000000000000000000000dEaD"}}}},"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"deleteWatch","summary":"Delete a watch","tags":["watches"],"security":[{"bearerAuth":[]}],"x-required-scope":"write","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Authentication required","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Insufficient scope or forbidden","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict or idempotency lease in progress","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Dependency unavailable","headers":{"Retry-After":{"description":"Seconds before retrying; present where the response is retryable.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"webhooks":{"watchdogAlert":{"post":{"summary":"HMAC-signed Watchdog delivery","parameters":[{"name":"X-Watchdog-Signature","in":"header","required":true,"description":"sha256=<HMAC-SHA256 of timestamp.raw-body>","schema":{"type":"string"}},{"name":"X-Watchdog-Timestamp","in":"header","required":true,"description":"Unix timestamp in seconds; use it for replay-window enforcement.","schema":{"type":"string"}},{"name":"X-Watchdog-Payload-Version","in":"header","required":false,"description":"Present for versioned payloads; currently 2.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"watchdog-webhook-v2.schema.json","title":"FTSOBest Watchdog webhook payload v2","description":"Verify X-Watchdog-Signature as HMAC-SHA256 over <timestamp>.<raw body>. Reject timestamps outside a short local window before comparing signatures in constant time.\n\nNode: const expected='sha256='+createHmac('sha256',secret).update(ts+'.'+rawBody).digest('hex'); if(Math.abs(Date.now()/1000-Number(ts))>300 || expected.length!==received.length || !timingSafeEqual(Buffer.from(expected),Buffer.from(received))) throw new Error('invalid');\n\nPython: expected='sha256='+hmac.new(secret.encode(),f'{ts}.{raw_body}'.encode(),hashlib.sha256).hexdigest(); valid=abs(time.time()-int(ts))<=300 and hmac.compare_digest(expected,received)","type":"object","required":["payloadVersion","signal","group","deliveryId","alertId","watchId","label","type","event","severity","data","firedAt","rendered","renderedMessage"],"properties":{"payloadVersion":{"const":2},"signal":{"type":["string","null"],"description":"Dynamic signal ID; discover current IDs through /api/x402/pricing."},"group":{"type":["string","null"]},"deliveryId":{"type":"string","format":"uuid"},"alertId":{"type":["integer","null"]},"watchId":{"type":["integer","null"]},"label":{"type":["string","null"]},"type":{"enum":["wallet-balance","feed-move","provider-eligibility","credits-balance","reward-signing","provider-fsp",null]},"event":{"type":"string","enum":["credits.low-balance","credits.recovered","feed-move.threshold","fsp.balance-low","fsp.balance-low.recovered","fsp.fast-updates","fsp.fast-updates.recovered","fsp.fdc-bitvote","fsp.fdc-bitvote-length","fsp.fdc-bitvote-length.recovered","fsp.fdc-bitvote.recovered","fsp.fdc-consensus","fsp.fdc-consensus.recovered","fsp.fdc-reveal-offence","fsp.fdc-reveal-offence.recovered","fsp.fdc-signature","fsp.fdc-signature.recovered","fsp.fdc-submit1","fsp.fdc-submit1.recovered","fsp.ftso-commit","fsp.ftso-commit.recovered","fsp.ftso-reveal","fsp.ftso-reveal.recovered","fsp.ftso-signature","fsp.ftso-signature.recovered","fsp.mc-anchor","fsp.mc-anchor.recovered","fsp.mc-fdc","fsp.mc-fdc.recovered","fsp.mc-uptime","fsp.mc-uptime.recovered","fsp.monitoring","fsp.monitoring.recovered","fsp.not-in-policy","fsp.not-in-policy.recovered","fsp.registration","fsp.registration.recovered","fsp.reveal-offence","fsp.reveal-offence.recovered","fsp.rewards-unclaimed","fsp.rewards-unclaimed.recovered","fsp.signature-grace","fsp.signature-grace.recovered","fsp.signature-mismatch","fsp.signature-mismatch.recovered","fsp.tx-failed","fsp.tx-failed.recovered","fsp.validator-not-listed","fsp.validator-not-listed.recovered","provider.eligibility-lost","provider.recovered","provider.unregistered","signing.done","signing.missed","signing.rewards-open","signing.rewards-reminder","signing.uptime-open","wallet-balance.moved"]},"severity":{"enum":["info","warning","critical"]},"data":{"type":"object","description":"Event-specific evaluator data. Consumers must tolerate additional properties."},"firedAt":{"type":"string","format":"date-time"},"rendered":{"type":"object","required":["locale","title","body"],"properties":{"locale":{"enum":["en","de","fr","bn","zh","hi","ar"]},"title":{"type":"string"},"body":{"type":"string"}},"additionalProperties":false},"renderedMessage":{"type":"object","description":"Complete localized adapter-neutral message.","additionalProperties":true}},"additionalProperties":false,"examples":[{"payloadVersion":2,"signal":"balance-change","group":"alerts","deliveryId":"00000000-0000-4000-8000-000000000001","alertId":1,"watchId":1,"label":"Example watch","type":"wallet-balance","event":"wallet-balance.moved","severity":"warning","data":{},"firedAt":"2026-01-01T00:00:00.000Z","rendered":{"locale":"en","title":"Example alert","body":"Example body"},"renderedMessage":{"alertId":1,"watchId":1,"watchLabel":"Example watch","event":"wallet-balance.moved","severity":"warning","title":"Example alert","body":"Example body","fields":[],"link":"https://example.invalid/wallet-center/watchdog","firedAt":"2026-01-01T00:00:00.000Z","test":false}}]}}}},"responses":{"200":{"description":"Receiver accepted the delivery"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"fbx token","description":"Scopes: read, write, spend"}},"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":false,"description":"8–128 letters, digits, underscores or hyphens. Same key and body replays the stored response for 24 hours; an active lease returns 409 with Retry-After; a changed body is rejected.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{8,128}$"}}},"schemas":{"Error":{"type":"object","required":["error","code"],"properties":{"error":{"type":"string"},"code":{"type":"string","enum":["authentication_required","insufficient_scope","unauthorized","forbidden","invalid_json","invalid_request","not_found","rate_limited","conflict","service_unavailable","slot_required","insufficient_credits","draft_expired","idempotency_key_reused","idempotency_in_progress","terms_required","delivery_failed","idempotency_execution_failed","invalid_cursor","error","asset_paused","topup_cap_exceeded"]},"required":{"type":"string"},"missing_scope":{"type":"string"},"retryAfter":{"type":"integer"},"retryable":{"type":"boolean"}},"additionalProperties":true},"Purchase":{"type":"object","required":["product","quantity","periods","priceCredits","maxQuantityPerWallet"],"properties":{"product":{"enum":["watchdog-slot","provider-watchdog"]},"quantity":{"type":"integer"},"periods":{"type":"integer"},"priceCredits":{"type":"integer"},"maxQuantityPerWallet":{"type":"integer"}},"additionalProperties":false},"SlotRequired":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"code":{"const":"slot_required"},"purchase":{"$ref":"#/components/schemas/Purchase"},"buyEndpoint":{"type":"string"},"topupEndpoint":{"type":"string"}}}]},"InsufficientCredits":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"code":{"const":"insufficient_credits"},"purchase":{"$ref":"#/components/schemas/Purchase"},"topupEndpoint":{"type":"string"}}}]},"WatchType":{"type":"string","enum":["wallet-balance","feed-move","provider-eligibility","credits-balance","reward-signing","provider-fsp"]},"ChannelType":{"type":"string","enum":["inapp","webhook","telegram","telegram-group","discord","email","discord-webhook","slack-webhook"]},"Product":{"type":"string","enum":["watchdog-slot","provider-watchdog"]},"HelpLocale":{"type":"string","enum":["en","de","fr","bn","zh","hi","ar"]},"WatchSignal":{"type":"string","description":"28 current signals; use GET /api/x402/pricing as the live source."}}}}