Start closing the caller's current account
Requires an authenticated, active user. For an ACTIVE account, the service registers the closure with the custodian bank and sends an OTP by SMS. The account becomes CLOSED after the caller confirms the OTP and the custodian bank approves. The service closes a PENDING account at once when the custodian bank holds no onboarding for it. A failed onboarding needs an operator reset first. Returns 409 when the balance is not zero, a closure is in progress, or the status prevents a closure.
Authorization
oauth2 Create a client with POST /v1/oauth/clients, then exchange its credentials for an access token. AUTHORIZATION_CODE clients act on behalf of a signed-in user and always use PKCE; CLIENT_CREDENTIALS clients act as themselves. A client may only be granted scopes its creator already holds — read the grantable list from GET /v1/oauth/clients/scopes.
In: header
Request Body
application/json
Request body for starting a current-account closure.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/user/accounts/current/closure" \ -H "Content-Type: application/json" \ -d '{ "reasons": [ "NO_LONGER_USING" ] }'{ "id": "550e8400-e29b-41d4-a716-446655440000", "status": "AWAITING_OTP", "initiated_by": "USER", "reasons": [ "NO_LONGER_USING" ], "created_at": "2026-09-01T10:15:30Z", "otp_confirmed_at": "2026-01-15T09:31:00Z", "completed_at": "2026-01-15T09:33:00Z", "rejection_reason": "Account has a pending dispute", "resource_id": "string"}{ "code": "BAD_REQUEST", "description": "Bad Request"}{ "code": "UNAUTHORISED", "description": "Unauthorised"}{ "code": "FORBIDDEN", "description": "Forbidden"}{ "code": "RATE_LIMIT_EXCEEDED", "description": "Too Many Requests"}{ "code": "INTERNAL_ERROR", "description": "Internal Server Error"}Get the caller's current-account closure GET
Returns the caller's most recent current-account closure, in any lifecycle status. Requires an authenticated, active user. The result includes a `COMPLETED` closure even after the account stops appearing in account listings. Returns 404 when the caller has never started a closure.
Confirm the OTP for the in-flight closure POST
Verifies the OTP code and moves the closure to `OTP_CONFIRMED`. Requires an authenticated, active user. The custodian bank then reviews the request and moves the account to `CLOSED` only when it approves. Returns 409 with code `ACCOUNT_HAS_NON_ZERO_BALANCE` when money arrived on the account after the closure started. Returns 404 when no closure is in progress.