Cowdidocs
API ReferenceCurrent account closure

Start closing the caller's current account

POST
/v1/user/accounts/current/closure

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.

AuthorizationBearer <token>

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"}
Empty
{  "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"}