{"message":"Rift Finance API Documentation","version":"v1.2.0","fullSpec":"docs/openapi.json — the canonical OpenAPI 3.0.3 document.","authentication":{"required":"API Key + user Bearer JWT (protected routes)","header":"X-API-Key or Authorization: Bearer <key>","format":"sk_<64_character_hex_string>","obtain":"POST /project/create"},"endpoints":{"public":{"stats":{"overview":"GET /stats","users":"GET /stats/users","volume":"GET /stats/volume","projects":"GET /stats/projects","payments":"GET /stats/payments","activity":"GET /stats/activity","health":"GET /stats/health"},"projects":{"create":"POST /project/create","list":"GET /project/all (admin only)","get":"GET /project/:id","regenerateKey":"POST /project/:id/regenerate-key","delete":"DELETE /project/:id"}},"v1":{"note":"Canonical REST surface. See docs/openapi.json for full request/response schemas.","auth":"POST /v1/auth/sign-up | /sign-in | /sign-in/google | /sign-in/apple | /sessions/refresh | /sign-out","me":"GET /v1/me | PATCH /v1/me | DELETE /v1/me | GET /v1/me/tokens","balances":"GET /v1/balances | GET /v1/balances/tokens/:symbol","transactions":"POST /v1/transactions (v1 one-phase) | POST /v1/transactions/preview (v3 phase 1) | GET /v1/transactions | GET /v1/transactions/fee-estimate","wallet":"POST /v1/wallet/signatures/transaction | /signatures/message | /user-operations | POST /v1/wallet/user-operations/preview (v3 phase 1) | POST /v1/wallet/user-operations/submit-prepared (v3 phase 2)","walletConnect":"POST /v1/wallet-connect/pairings | GET /v1/wallet-connect/requests | POST /v1/wallet-connect/requests/:id/preview (v3) | /approve | /reject | GET /v1/wallet-connect/sessions | DELETE /v1/wallet-connect/sessions/:topic","bridge":"GET /v1/bridge/routes | POST /v1/bridge/quotes | POST /v1/bridge/transfers (v1) | POST /v1/bridge/transfers/preview (v3 phase 1)","offramps":"POST /v1/offramps (v1 one-phase) | POST /v1/offramps/preview (v3 preview) | POST /v1/offramps/init (v3 phase 1) | POST /v1/offramps/finalize (v3 phase 2) | GET /v1/offramps | GET /v1/offramps/:transactionCode","identifierRecovery":"POST /v1/identifier-recovery/methods | GET /v1/identifier-recovery/methods | POST /v1/identifier-recovery/password-reset | /account-recovery — /v1/recovery/* kept as deprecated alias","invoices":"POST /v1/invoices | GET /v1/invoices | POST /v1/invoices/:id/payments | /notifications"},"v3NonCustodial":{"note":"Device-bound (v3) signing surface. Every write requires an authProof (WebAuthn assertion or OIDC id_token) whose challenge/nonce equals the exact hash being signed.","migrate":"POST /wallet/migrate-to-v3 (re-seal v1/v2 -> v3, wallet address preserved)","status":"GET /wallet/v3-status (probe envelope version + enrolled method kinds)","methods":{"list":"GET /wallet/methods (projection of enrolled methods)","challenge":"POST /wallet/methods/challenge (32-byte nonce, 5min TTL)","add":"POST /wallet/methods { authProof, newMethod } (append passkey / OIDC to sealed envelope)"},"twoPhaseSigning":{"generic":"POST /v1/wallet/user-operations/preview -> { userOpHashHex, ticketId } -> sign -> POST /v1/wallet/user-operations/submit-prepared { ticketId, authProof }","spend":"POST /v1/transactions/preview -> submit via shared /submit-prepared","offramp":"POST /v1/offramps/init -> sign -> POST /v1/offramps/finalize (fiat payout auto-triggered)","bridge":"POST /v1/bridge/transfers/preview -> submit via shared /submit-prepared","walletConnect":"POST /v1/wallet-connect/requests/:id/preview -> sign -> POST /v1/wallet-connect/requests/:id/approve { authProof }"}},"protected":"All routes below /v1/*, /wallet/*, /walletconnect/*, /bridge/*, /offramp/* require API key + user JWT authentication."}}