{"openapi":"3.0.3","info":{"title":"Amnen Connect API","description":"The public Amnen Connect API — one universal payment interface to move money to any recipient, in any supported country. This reference shows only stable, publicly supported endpoints. Internal and administrative operations are intentionally not documented here. All authenticated requests use a Bearer JWT or an API key (`Authorization: Bearer <token>` or `X-API-Key: <key>`). Use sandbox keys for all examples. Every payment-creating request must include an `Idempotency-Key` header.","version":"1.0.0","contact":{"name":"Amnen Pay Engineering","email":"engineering@amnenpay.com","url":"https://amnenpay.com"},"license":{"name":"Proprietary","url":"https://amnenpay.com/license"},"x-totalPaths":97,"x-totalOperations":136,"x-introspectedRoutes":676,"x-detailedGroups":11,"x-categories":55,"x-visibility":"public"},"servers":[{"url":"https://api.amnenpay.com/v1","description":"Production"},{"url":"https://sandbox.amnenpay.com/v1","description":"Sandbox (test keys only)"}],"tags":[{"name":"Auth","description":"Authentication"},{"name":"Users","description":"User Management"},{"name":"Wallets","description":"Wallet Management"},{"name":"Transfers","description":"Transfers"},{"name":"Cards","description":"Card Management"},{"name":"Notifications","description":"Notifications"},{"name":"Health","description":"Health Check"},{"name":"Beneficiaries","description":"Beneficiaries"},{"name":"Country Data","description":"Country Data"},{"name":"Exchange Rates","description":"Exchange Rates"},{"name":"Payment Links","description":"Payment Links"},{"name":"Payment Processing","description":"Payment Processing"},{"name":"Payment Requests","description":"Payment Requests"},{"name":"QR Codes","description":"QR Codes"},{"name":"Webhooks","description":"Webhooks"}],"paths":{"/auth/2fa/challenge":{"post":{"tags":["Auth"],"summary":"Create challenge","description":"`POST /api/v1/auth/2fa/challenge` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/auth/2fa":{"get":{"tags":["Auth"],"summary":"List 2fa","description":"`GET /api/v1/auth/2fa` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Auth"],"summary":"Create 2fa","description":"`POST /api/v1/auth/2fa` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/auth/change-password":{"post":{"tags":["Auth"],"summary":"Create change password","description":"`POST /api/v1/auth/change-password` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/auth/firebase":{"post":{"tags":["Auth"],"summary":"Create firebase","description":"`POST /api/v1/auth/firebase` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/auth/login":{"post":{"tags":["Auth"],"summary":"Login (password or OTP)","description":"Authenticates across all account types (admin, staff, agent, merchant, personal user). Supports email+password, phone+password, and passwordless phone+OTP. Rate limited.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"},"example":{"email":"amina@example.com","password":"StrongPass!23"}}}},"responses":{"200":{"description":"Authenticated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/auth/logout":{"post":{"tags":["Auth"],"summary":"Logout","description":"Invalidates the current session/refresh token.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Logged out","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/auth/me":{"get":{"tags":["Auth"],"summary":"Current account","description":"Returns the authenticated principal derived from the access token.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Current user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/auth/password":{"post":{"tags":["Auth"],"summary":"Create password","description":"`POST /api/v1/auth/password` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"patch":{"tags":["Auth"],"summary":"Change password","security":[{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["currentPassword","newPassword"],"properties":{"currentPassword":{"type":"string"},"newPassword":{"type":"string"}}}}}},"responses":{"200":{"description":"Password updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/auth/refresh":{"post":{"tags":["Auth"],"summary":"Refresh access token","description":"Exchanges a valid refresh token for a new short-lived access token.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["refreshToken"],"properties":{"refreshToken":{"type":"string"}}}}}},"responses":{"200":{"description":"New tokens issued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/auth/register":{"post":{"tags":["Auth"],"summary":"Register a new account","description":"Creates a personal user, merchant, or agent account depending on `accountType`.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"},"example":{"name":"Amina Yusuf","email":"amina@example.com","phone":"+251911223344","password":"StrongPass!23","country":"ET","accountType":"personal"}}}},"responses":{"201":{"description":"Account created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/auth/reset-password":{"post":{"tags":["Auth"],"summary":"Create reset password","description":"`POST /api/v1/auth/reset-password` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/auth/send-email-otp":{"post":{"tags":["Auth"],"summary":"Send email OTP","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email"}}}}}},"responses":{"200":{"description":"Email OTP sent","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/auth/send-login-otp":{"post":{"tags":["Auth"],"summary":"Create send login otp","description":"`POST /api/v1/auth/send-login-otp` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/auth/send-otp":{"post":{"tags":["Auth"],"summary":"Send phone OTP","description":"Sends a one-time passcode via SMS for verification or passwordless login.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["phone"],"properties":{"phone":{"type":"string","example":"+251911223344"}}}}}},"responses":{"200":{"description":"OTP sent","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/auth/validate":{"get":{"tags":["Auth"],"summary":"List validate","description":"`GET /api/v1/auth/validate` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/auth/verify-email-otp":{"post":{"tags":["Auth"],"summary":"Verify email OTP","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","otp"],"properties":{"email":{"type":"string"},"otp":{"type":"string"}}}}}},"responses":{"200":{"description":"Email verified","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/auth/verify-otp":{"post":{"tags":["Auth"],"summary":"Verify phone OTP","description":"Verifies a previously sent SMS OTP.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["phone","otp"],"properties":{"phone":{"type":"string"},"otp":{"type":"string","example":"123456"}}}}}},"responses":{"200":{"description":"OTP verified","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/beneficiaries/{id}":{"get":{"tags":["Beneficiaries"],"summary":"Get beneficiaries","description":"`GET /api/v1/beneficiaries/{id}` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"id identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"put":{"tags":["Beneficiaries"],"summary":"Replace beneficiaries","description":"`PUT /api/v1/beneficiaries/{id}` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"id identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"delete":{"tags":["Beneficiaries"],"summary":"Delete beneficiaries","description":"`DELETE /api/v1/beneficiaries/{id}` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"id identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/beneficiaries":{"get":{"tags":["Beneficiaries"],"summary":"List beneficiaries","description":"`GET /api/v1/beneficiaries` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Beneficiaries"],"summary":"Create beneficiaries","description":"`POST /api/v1/beneficiaries` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/cards/{id}/controls":{"get":{"tags":["Cards"],"summary":"List controls","description":"`GET /api/v1/cards/{id}/controls` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"id identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Cards"],"summary":"Create controls","description":"`POST /api/v1/cards/{id}/controls` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"id identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"patch":{"tags":["Cards"],"summary":"Update card controls","description":"Freeze/unfreeze, set spend limits and merchant category restrictions.","security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Id"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"frozen":{"type":"boolean"},"dailyLimit":{"type":"number"},"onlineEnabled":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Controls updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/cards/{id}":{"get":{"tags":["Cards"],"summary":"Get card","security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Id"}],"responses":{"200":{"description":"Card","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"patch":{"tags":["Cards"],"summary":"Update cards","description":"`PATCH /api/v1/cards/{id}` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"id identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"delete":{"tags":["Cards"],"summary":"Terminate card","security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Id"}],"responses":{"200":{"description":"Card terminated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/cards/{id}/transactions":{"get":{"tags":["Cards"],"summary":"Card transactions","security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Id"},{"$ref":"#/components/parameters/Page"}],"responses":{"200":{"description":"Transactions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionListResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Cards"],"summary":"Create transactions","description":"`POST /api/v1/cards/{id}/transactions` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"id identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/cards":{"get":{"tags":["Cards"],"summary":"List virtual cards","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Cards","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardListResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Cards"],"summary":"Issue virtual card","security":[{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["currency"],"properties":{"currency":{"type":"string","example":"USD"},"label":{"type":"string"},"fundingAmount":{"type":"number"}}}}}},"responses":{"201":{"description":"Card issued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/cards/setup-intent":{"post":{"tags":["Cards"],"summary":"Create setup intent","description":"`POST /api/v1/cards/setup-intent` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/countries":{"get":{"tags":["Country Data"],"summary":"List countries","description":"`GET /api/v1/countries` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/exchange/rate":{"get":{"tags":["Exchange Rates"],"summary":"List rate","description":"`GET /api/v1/exchange/rate` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/health":{"get":{"tags":["Health"],"summary":"Health check","description":"Returns API + database health. No authentication required.","responses":{"200":{"description":"Service is healthy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"503":{"description":"Service is unhealthy"}}}},"/notifications":{"get":{"tags":["Notifications"],"summary":"List notifications","security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Page"},{"$ref":"#/components/parameters/Limit"},{"name":"unread","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Notifications","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationListResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Notifications"],"summary":"Send notification (admin/system)","security":[{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationRequest"}}}},"responses":{"201":{"description":"Notification sent","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"patch":{"tags":["Notifications"],"summary":"Mark notifications read","security":[{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}},"all":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Marked read","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/notifications/subscribe":{"post":{"tags":["Notifications"],"summary":"Subscribe to push","description":"Register a Web Push subscription for the current device.","security":[{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["subscription"],"properties":{"subscription":{"type":"object"}}}}}},"responses":{"200":{"description":"Subscribed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"delete":{"tags":["Notifications"],"summary":"Delete subscribe","description":"`DELETE /api/v1/notifications/subscribe` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/payment-links/{linkId}":{"get":{"tags":["Payment Links"],"summary":"Get payment links","description":"`GET /api/v1/payment-links/{linkId}` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"linkId","in":"path","required":true,"description":"linkId identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"delete":{"tags":["Payment Links"],"summary":"Delete payment links","description":"`DELETE /api/v1/payment-links/{linkId}` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"linkId","in":"path","required":true,"description":"linkId identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/payment-links":{"get":{"tags":["Payment Links"],"summary":"List payment links","description":"`GET /api/v1/payment-links` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Payment Links"],"summary":"Create payment links","description":"`POST /api/v1/payment-links` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/payment-requests":{"get":{"tags":["Payment Requests"],"summary":"List payment requests","description":"`GET /api/v1/payment-requests` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Payment Requests"],"summary":"Create payment requests","description":"`POST /api/v1/payment-requests` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]},"patch":{"tags":["Payment Requests"],"summary":"Update payment requests","description":"`PATCH /api/v1/payment-requests` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/payments/chapa/initialize":{"get":{"tags":["Payment Processing"],"summary":"List initialize","description":"`GET /api/v1/payments/chapa/initialize` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Payment Processing"],"summary":"Create initialize","description":"`POST /api/v1/payments/chapa/initialize` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/payments/checkout":{"get":{"tags":["Payment Processing"],"summary":"List checkout","description":"`GET /api/v1/payments/checkout` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Payment Processing"],"summary":"Create checkout","description":"`POST /api/v1/payments/checkout` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/payments/corridors":{"get":{"tags":["Payment Processing"],"summary":"List corridors","description":"`GET /api/v1/payments/corridors` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/payments/detect-sms":{"post":{"tags":["Payment Processing"],"summary":"Create detect sms","description":"`POST /api/v1/payments/detect-sms` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/payments/merchant":{"post":{"tags":["Payment Processing"],"summary":"Create merchant","description":"`POST /api/v1/payments/merchant` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/payments/quote":{"post":{"tags":["Payment Processing"],"summary":"Create quote","description":"`POST /api/v1/payments/quote` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/payments/send":{"post":{"tags":["Payment Processing"],"summary":"Create send","description":"`POST /api/v1/payments/send` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/payments/stream/{sessionId}":{"get":{"tags":["Payment Processing"],"summary":"Get stream","description":"`GET /api/v1/payments/stream/{sessionId}` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"sessionId","in":"path","required":true,"description":"sessionId identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/payments/stripe/checkout":{"post":{"tags":["Payment Processing"],"summary":"Create checkout","description":"`POST /api/v1/payments/stripe/checkout` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/payments/stripe/create-intent":{"post":{"tags":["Payment Processing"],"summary":"Create create intent","description":"`POST /api/v1/payments/stripe/create-intent` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/payments/stripe/verify":{"get":{"tags":["Payment Processing"],"summary":"List verify","description":"`GET /api/v1/payments/stripe/verify` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/payments/webhook/{provider}":{"post":{"tags":["Payment Processing"],"summary":"Create webhook","description":"`POST /api/v1/payments/webhook/{provider}` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"},{"name":"provider","in":"path","required":true,"description":"provider identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/qr/{id}/image":{"get":{"tags":["QR Codes"],"summary":"List image","description":"`GET /api/v1/qr/{id}/image` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"id identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/qr/{id}/pay":{"post":{"tags":["QR Codes"],"summary":"Create pay","description":"`POST /api/v1/qr/{id}/pay` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"id identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/qr/{id}/session":{"post":{"tags":["QR Codes"],"summary":"Create session","description":"`POST /api/v1/qr/{id}/session` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"id identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"put":{"tags":["QR Codes"],"summary":"Replace session","description":"`PUT /api/v1/qr/{id}/session` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"id identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/qr/{id}/smart-route":{"post":{"tags":["QR Codes"],"summary":"Create smart route","description":"`POST /api/v1/qr/{id}/smart-route` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"id identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/qr/generate":{"post":{"tags":["QR Codes"],"summary":"Create generate","description":"`POST /api/v1/qr/generate` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/qr":{"get":{"tags":["QR Codes"],"summary":"List qr","description":"`GET /api/v1/qr` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/qr/scan":{"post":{"tags":["QR Codes"],"summary":"Create scan","description":"`POST /api/v1/qr/scan` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/transactions/validate":{"post":{"tags":["Transfers"],"summary":"Create validate","description":"`POST /api/v1/transactions/validate` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/transfers/{transferId}/cancel":{"post":{"tags":["Transfers"],"summary":"Cancel transfer","security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/TransferId"}],"responses":{"200":{"description":"Transfer cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/transfers/{transferId}/claim":{"post":{"tags":["Transfers"],"summary":"Claim transfer","security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/TransferId"}],"responses":{"200":{"description":"Transfer claimed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/transfers/{transferId}":{"get":{"tags":["Transfers"],"summary":"Get transfer","security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/TransferId"}],"responses":{"200":{"description":"Transfer","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/transfers/bypass/confirm":{"post":{"tags":["Transfers"],"summary":"Create confirm","description":"`POST /api/v1/transfers/bypass/confirm` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/transfers/bypass":{"get":{"tags":["Transfers"],"summary":"List bypass","description":"`GET /api/v1/transfers/bypass` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Transfers"],"summary":"Create bypass","description":"`POST /api/v1/transfers/bypass` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/transfers/bypass/verify":{"post":{"tags":["Transfers"],"summary":"Create verify","description":"`POST /api/v1/transfers/bypass/verify` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/transfers/claim/{code}":{"get":{"tags":["Transfers"],"summary":"Inspect claim code","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Claimable transfer details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Transfers"],"summary":"Create claim","description":"`POST /api/v1/transfers/claim/{code}` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"code","in":"path","required":true,"description":"code identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/transfers/claim/execute":{"post":{"tags":["Transfers"],"summary":"Create execute","description":"`POST /api/v1/transfers/claim/execute` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/transfers/claim/prepare":{"post":{"tags":["Transfers"],"summary":"Create prepare","description":"`POST /api/v1/transfers/claim/prepare` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/transfers/confirm-payment":{"get":{"tags":["Transfers"],"summary":"List confirm payment","description":"`GET /api/v1/transfers/confirm-payment` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Transfers"],"summary":"Create confirm payment","description":"`POST /api/v1/transfers/confirm-payment` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/transfers/delivery-options":{"get":{"tags":["Transfers"],"summary":"List delivery options","description":"`GET /api/v1/transfers/delivery-options` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/transfers/interop/{transferId}":{"get":{"tags":["Transfers"],"summary":"Get interop","description":"`GET /api/v1/transfers/interop/{transferId}` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"transferId","in":"path","required":true,"description":"transferId identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/transfers/interop":{"get":{"tags":["Transfers"],"summary":"List interop","description":"`GET /api/v1/transfers/interop` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Transfers"],"summary":"Create interop","description":"`POST /api/v1/transfers/interop` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/transfers/lookup":{"post":{"tags":["Transfers"],"summary":"Create lookup","description":"`POST /api/v1/transfers/lookup` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"get":{"tags":["Transfers"],"summary":"Lookup by reference","security":[{"BearerAuth":[]}],"parameters":[{"name":"reference","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Transfer","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/transfers/my":{"get":{"tags":["Transfers"],"summary":"My transfers","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Transfers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionListResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/transfers/process-expired":{"post":{"tags":["Transfers"],"summary":"Create process expired","description":"`POST /api/v1/transfers/process-expired` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/transfers":{"get":{"tags":["Transfers"],"summary":"List transfers","security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Page"},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"description":"Transfers","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionListResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Transfers"],"summary":"Create transfer","security":[{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferRequest"}}}},"responses":{"201":{"description":"Transfer created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/transfers/send-to-any":{"get":{"tags":["Transfers"],"summary":"List send to any","description":"`GET /api/v1/transfers/send-to-any` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Transfers"],"summary":"Send to non-user","description":"Send to a recipient without an account; generates a claimable transfer code.","security":[{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferRequest"}}}},"responses":{"200":{"description":"Claimable transfer created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/transfers/send":{"get":{"tags":["Transfers"],"summary":"Transfer history","security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Limit"},{"name":"offset","in":"query","schema":{"type":"integer","default":0}}],"responses":{"200":{"description":"History","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionListResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Transfers"],"summary":"Send money","description":"Wallet-to-wallet send with automatic FX conversion, routing engine selection and settlement leg creation.","security":[{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferRequest"},"example":{"recipientIdentifier":"+8801712345678","recipientType":"phone","amount":1000,"currency":"ETB","note":"Lunch","method":"wallet"}}}},"responses":{"200":{"description":"Money sent","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/wallet/balance":{"get":{"tags":["Wallets"],"summary":"Get my wallet balance","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/wallet/deposit/confirm":{"post":{"tags":["Wallets"],"summary":"Confirm deposit","security":[{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["reference"],"properties":{"reference":{"type":"string"}}}}}},"responses":{"200":{"description":"Deposit confirmed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/wallet/deposit":{"post":{"tags":["Wallets"],"summary":"Initiate deposit","security":[{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["amount","method"],"properties":{"amount":{"type":"number"},"method":{"type":"string","example":"cbe"},"currency":{"type":"string","example":"ETB"}}}}}},"responses":{"200":{"description":"Deposit initiated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DepositResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}},"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}]}},"/wallet/deposit/sms-verify":{"post":{"tags":["Wallets"],"summary":"Create sms verify","description":"`POST /api/v1/wallet/deposit/sms-verify` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/wallet/deposit/status":{"get":{"tags":["Wallets"],"summary":"List status","description":"`GET /api/v1/wallet/deposit/status` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/wallet/deposit/verify":{"post":{"tags":["Wallets"],"summary":"Create verify","description":"`POST /api/v1/wallet/deposit/verify` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/wallets/{walletId}/balance":{"get":{"tags":["Wallets"],"summary":"Get wallet balance","security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/WalletId"}],"responses":{"200":{"description":"Balance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/wallets/{walletId}/fund":{"post":{"tags":["Wallets"],"summary":"Fund wallet","security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/WalletId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["amount","method"],"properties":{"amount":{"type":"number","example":500},"method":{"type":"string","example":"telebirr"}}}}}},"responses":{"200":{"description":"Funding initiated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/wallets/{walletId}":{"get":{"tags":["Wallets"],"summary":"Get wallet","security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/WalletId"}],"responses":{"200":{"description":"Wallet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/wallets/{walletId}/transactions":{"get":{"tags":["Wallets"],"summary":"Wallet transactions","security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/WalletId"},{"$ref":"#/components/parameters/Page"},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"description":"Transactions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionListResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/wallets/{walletId}/transfer":{"post":{"tags":["Wallets"],"summary":"Wallet-to-wallet transfer","security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"},{"$ref":"#/components/parameters/WalletId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferRequest"}}}},"responses":{"200":{"description":"Transfer complete","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/wallets":{"get":{"tags":["Wallets"],"summary":"List wallets","security":[{"BearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Page"},{"$ref":"#/components/parameters/Limit"}],"responses":{"200":{"description":"Wallets","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletListResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Wallets"],"summary":"Create wallet","security":[{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["currency"],"properties":{"currency":{"type":"string","example":"ETB"}}}}}},"responses":{"201":{"description":"Wallet created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/webhooks/{id}/rotate":{"post":{"tags":["Webhooks"],"summary":"Create rotate","description":"`POST /api/v1/webhooks/{id}/rotate` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"id identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/webhooks/{id}":{"get":{"tags":["Webhooks"],"summary":"Get webhooks","description":"`GET /api/v1/webhooks/{id}` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"id identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"patch":{"tags":["Webhooks"],"summary":"Update webhooks","description":"`PATCH /api/v1/webhooks/{id}` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"id identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"delete":{"tags":["Webhooks"],"summary":"Delete webhooks","description":"`DELETE /api/v1/webhooks/{id}` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"description":"id identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/webhooks/amole":{"get":{"tags":["Webhooks"],"summary":"List amole","description":"`GET /api/v1/webhooks/amole` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Webhooks"],"summary":"Create amole","description":"`POST /api/v1/webhooks/amole` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/webhooks/arifpay":{"get":{"tags":["Webhooks"],"summary":"List arifpay","description":"`GET /api/v1/webhooks/arifpay` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Webhooks"],"summary":"Create arifpay","description":"`POST /api/v1/webhooks/arifpay` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/webhooks/bkash":{"post":{"tags":["Webhooks"],"summary":"Create bkash","description":"`POST /api/v1/webhooks/bkash` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/webhooks/cbe":{"get":{"tags":["Webhooks"],"summary":"List cbe","description":"`GET /api/v1/webhooks/cbe` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Webhooks"],"summary":"Create cbe","description":"`POST /api/v1/webhooks/cbe` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/webhooks/deliveries/{deliveryId}/retry":{"post":{"tags":["Webhooks"],"summary":"Create retry","description":"`POST /api/v1/webhooks/deliveries/{deliveryId}/retry` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"parameters":[{"name":"deliveryId","in":"path","required":true,"description":"deliveryId identifier","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/webhooks/deliveries":{"get":{"tags":["Webhooks"],"summary":"List deliveries","description":"`GET /api/v1/webhooks/deliveries` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/webhooks/events":{"get":{"tags":["Webhooks"],"summary":"List events","description":"`GET /api/v1/webhooks/events` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/webhooks":{"get":{"tags":["Webhooks"],"summary":"List webhooks","description":"`GET /api/v1/webhooks` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Webhooks"],"summary":"Create webhooks","description":"`POST /api/v1/webhooks` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/webhooks/sms":{"get":{"tags":["Webhooks"],"summary":"List sms","description":"`GET /api/v1/webhooks/sms` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Webhooks"],"summary":"Create sms","description":"`POST /api/v1/webhooks/sms` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/webhooks/swish":{"post":{"tags":["Webhooks"],"summary":"Create swish","description":"`POST /api/v1/webhooks/swish` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/webhooks/telebirr":{"get":{"tags":["Webhooks"],"summary":"List telebirr","description":"`GET /api/v1/webhooks/telebirr` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"post":{"tags":["Webhooks"],"summary":"Create telebirr","description":"`POST /api/v1/webhooks/telebirr` — introspected from the live route handler.","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/profile":{"get":{"tags":["Users"],"summary":"Get my profile","security":[{"BearerAuth":[]}],"responses":{"200":{"description":"Profile","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}},"patch":{"tags":["Users"],"summary":"Update my profile","security":[{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdateRequest"}}}},"responses":{"200":{"description":"Profile updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"400":{"$ref":"#/components/responses/ValidationError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"404":{"$ref":"#/components/responses/NotFoundError"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/ServerError"}}}}},"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"JWT access token from /auth/login"},"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API key for server-to-server access"}},"parameters":{"Id":{"name":"id","in":"path","required":true,"description":"Resource ID","schema":{"type":"string"}},"WalletId":{"name":"walletId","in":"path","required":true,"description":"Wallet ID","schema":{"type":"string"}},"TransferId":{"name":"transferId","in":"path","required":true,"description":"Transfer ID","schema":{"type":"string"}},"Page":{"name":"page","in":"query","description":"Page number","schema":{"type":"integer","minimum":1,"default":1}},"Limit":{"name":"limit","in":"query","description":"Items per page","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},"Search":{"name":"q","in":"query","description":"Search query","schema":{"type":"string"}},"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":true,"description":"A unique client-generated key (e.g. a UUID v4) that makes this request safe to retry. Replaying the same key returns the original result instead of creating a duplicate payment.","schema":{"type":"string","example":"idmp_8f14e45fceea167a5a36dedd4bea2543"}}},"responses":{"ValidationError":{"description":"Validation error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"UnauthorizedError":{"description":"Authentication required or token invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ForbiddenError":{"description":"Permission denied for this role","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"NotFoundError":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"RateLimited":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ServerError":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"schemas":{"SuccessResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"type":"object"}}},"ErrorResponse":{"type":"object","properties":{"success":{"type":"boolean","example":false},"error":{"type":"object","properties":{"message":{"type":"string","example":"Invalid or expired token"},"code":{"type":"string"}}}}},"Pagination":{"type":"object","properties":{"page":{"type":"integer","example":1},"limit":{"type":"integer","example":20},"total":{"type":"integer","example":153},"totalPages":{"type":"integer","example":8}}},"HealthResponse":{"type":"object","properties":{"status":{"type":"string","example":"ok"},"database":{"type":"string","example":"connected"},"uptime":{"type":"number"},"timestamp":{"type":"string","format":"date-time"}}},"RegisterRequest":{"type":"object","required":["name","password"],"properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"password":{"type":"string","format":"password","minLength":8},"country":{"type":"string","example":"ET"},"currency":{"type":"string","example":"ETB"},"accountType":{"type":"string","enum":["personal","merchant","agent"],"default":"personal"}}},"LoginRequest":{"type":"object","properties":{"email":{"type":"string","format":"email"},"phone":{"type":"string"},"password":{"type":"string","format":"password"},"otp":{"type":"string","description":"For passwordless phone login"}}},"AuthResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"user":{"$ref":"#/components/schemas/User"},"accessToken":{"type":"string","description":"Short-lived JWT"},"refreshToken":{"type":"string","description":"Long-lived refresh token"},"token":{"type":"string","description":"Alias of accessToken"}}},"User":{"type":"object","properties":{"id":{"type":"string","example":"665f1a..."},"name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"avatar":{"type":"string"},"country":{"type":"string","example":"ET"},"currency":{"type":"string","example":"ETB"},"language":{"type":"string","example":"en"},"emailVerified":{"type":"boolean"},"phoneVerified":{"type":"boolean"},"kycStatus":{"type":"string","enum":["pending","submitted","approved","rejected"]},"kycLevel":{"type":"integer","example":1},"walletBalance":{"type":"number","example":2500.5},"walletCurrency":{"type":"string","example":"ETB"},"role":{"type":"string","enum":["user","agent","merchant","admin","super_admin"]},"status":{"type":"string","enum":["active","suspended","deactivated"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"UserUpdateRequest":{"type":"object","properties":{"name":{"type":"string"},"avatar":{"type":"string"},"country":{"type":"string"},"currency":{"type":"string"},"language":{"type":"string"},"status":{"type":"string","enum":["active","suspended","deactivated"]}}},"UserResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"user":{"$ref":"#/components/schemas/User"}}},"UserListResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"$ref":"#/components/schemas/User"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"Wallet":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"walletId":{"type":"string","example":"AMN-WLT-00123"},"balance":{"type":"number","example":2500.5},"currency":{"type":"string","example":"ETB"},"status":{"type":"string","enum":["active","frozen"],"example":"active"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"WalletResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#/components/schemas/Wallet"}}},"WalletListResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"$ref":"#/components/schemas/Wallet"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"DepositResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"type":"object","properties":{"reference":{"type":"string"},"status":{"type":"string","example":"pending"},"instructions":{"type":"string"}}}}},"Transaction":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","example":"transfer"},"subType":{"type":"string","example":"wallet_to_wallet"},"reference":{"type":"string","example":"TRF1718..."},"senderId":{"type":"string"},"senderName":{"type":"string"},"senderCurrency":{"type":"string"},"recipientId":{"type":"string"},"recipientName":{"type":"string"},"recipientCurrency":{"type":"string"},"amount":{"type":"number"},"recipientAmount":{"type":"number"},"currency":{"type":"string"},"fxRate":{"type":"number"},"fee":{"type":"number"},"sourceRail":{"type":"string"},"destinationRail":{"type":"string"},"settlementId":{"type":"string"},"note":{"type":"string"},"status":{"type":"string","enum":["pending","completed","failed","cancelled"]},"createdAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"}}},"TransactionListResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"$ref":"#/components/schemas/Transaction"}}}},"TransferRequest":{"type":"object","required":["recipientIdentifier","amount"],"properties":{"recipientIdentifier":{"type":"string","description":"Phone, email or wallet ID","example":"+8801712345678"},"recipientType":{"type":"string","enum":["phone","email","wallet_id"],"default":"phone"},"amount":{"type":"number","example":1000},"currency":{"type":"string","example":"ETB"},"note":{"type":"string"},"method":{"type":"string","default":"wallet"}}},"TransferResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"type":"object","properties":{"reference":{"type":"string"},"amount":{"type":"number"},"currency":{"type":"string"},"recipientName":{"type":"string"},"recipientPhone":{"type":"string"},"status":{"type":"string","example":"completed"},"newBalance":{"type":"number"},"completedAt":{"type":"string","format":"date-time"}}}}},"KycSubmissionRequest":{"type":"object","required":["documentType","documentNumber"],"properties":{"fullName":{"type":"string"},"documentType":{"type":"string","enum":["national_id","passport","drivers_license"]},"documentNumber":{"type":"string"},"documentFront":{"type":"string","description":"URL or base64 of front image"},"documentBack":{"type":"string"},"selfie":{"type":"string"},"dateOfBirth":{"type":"string","format":"date"},"address":{"type":"string"}}},"Kyc":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"status":{"type":"string","enum":["pending","submitted","approved","rejected"]},"level":{"type":"integer","example":2},"documentType":{"type":"string"},"reviewedBy":{"type":"string"},"rejectionReason":{"type":"string"},"submittedAt":{"type":"string","format":"date-time"},"reviewedAt":{"type":"string","format":"date-time"}}},"KycResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#/components/schemas/Kyc"}}},"KycListResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"$ref":"#/components/schemas/Kyc"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"Agent":{"type":"object","properties":{"id":{"type":"string"},"agentId":{"type":"string"},"agentCode":{"type":"string","example":"AG-0042"},"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"region":{"type":"string"},"tier":{"type":"string","example":"gold"},"floatBalance":{"type":"number"},"commissionRate":{"type":"number","example":0.5},"location":{"type":"object","properties":{"type":{"type":"string","example":"Point"},"coordinates":{"type":"array","items":{"type":"number"}}}},"status":{"type":"string","enum":["active","suspended","pending"]}}},"AgentRequest":{"type":"object","required":["name","phone"],"properties":{"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"region":{"type":"string"},"commissionRate":{"type":"number"},"password":{"type":"string"}}},"AgentResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#/components/schemas/Agent"}}},"AgentListResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"$ref":"#/components/schemas/Agent"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"Merchant":{"type":"object","properties":{"id":{"type":"string"},"merchantId":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"businessType":{"type":"string"},"country":{"type":"string"},"currency":{"type":"string"},"kycStatus":{"type":"string","enum":["pending","submitted","approved","rejected"]},"status":{"type":"string","enum":["active","suspended"]},"settlementBalance":{"type":"number"},"createdAt":{"type":"string","format":"date-time"}}},"MerchantRequest":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":"string"},"businessType":{"type":"string"},"country":{"type":"string"},"currency":{"type":"string"}}},"MerchantResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#/components/schemas/Merchant"}}},"Card":{"type":"object","properties":{"id":{"type":"string"},"last4":{"type":"string","example":"4242"},"brand":{"type":"string","example":"visa"},"currency":{"type":"string","example":"USD"},"label":{"type":"string"},"balance":{"type":"number"},"frozen":{"type":"boolean"},"dailyLimit":{"type":"number"},"onlineEnabled":{"type":"boolean"},"status":{"type":"string","enum":["active","frozen","terminated"]},"expiryMonth":{"type":"integer"},"expiryYear":{"type":"integer"}}},"CardResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#/components/schemas/Card"}}},"CardListResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"$ref":"#/components/schemas/Card"}}}},"AuditLog":{"type":"object","properties":{"id":{"type":"string"},"action":{"type":"string","example":"WALLET_CREDIT"},"actorId":{"type":"string"},"actorRole":{"type":"string"},"targetType":{"type":"string"},"targetId":{"type":"string"},"hash":{"type":"string","description":"SHA-256 of entry"},"prevHash":{"type":"string","description":"Hash of previous entry (chain)"},"signature":{"type":"string","description":"HMAC signature"},"ip":{"type":"string"},"metadata":{"type":"object"},"timestamp":{"type":"string","format":"date-time"}}},"AuditLogListResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"$ref":"#/components/schemas/AuditLog"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}},"Notification":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"},"type":{"type":"string","example":"transaction"},"channel":{"type":"string","enum":["push","email","sms","in_app"]},"title":{"type":"string"},"body":{"type":"string"},"read":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"}}},"NotificationRequest":{"type":"object","required":["title","body"],"properties":{"userId":{"type":"string"},"title":{"type":"string"},"body":{"type":"string"},"type":{"type":"string"},"channel":{"type":"string","enum":["push","email","sms","in_app"]}}},"NotificationResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"$ref":"#/components/schemas/Notification"}}},"NotificationListResponse":{"type":"object","properties":{"success":{"type":"boolean","example":true},"data":{"type":"array","items":{"$ref":"#/components/schemas/Notification"}},"pagination":{"$ref":"#/components/schemas/Pagination"}}}}},"security":[{"BearerAuth":[]}]}