Skip to main content
POST
/
api
/
v1
/
virtual-accounts
/
{id}
/
close
Close Virtual Account
curl --request POST \
  --url https://api.usezentra.com/api/v1/virtual-accounts/{id}/close \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "reason": "<string>"
}
'
{
  "error": {
    "code": "NOT_FOUND",
    "message": "Account not found",
    "details": null
  },
  "meta": {
    "path": "/api/v1/virtual-accounts/va_missing/close",
    "method": "POST"
  }
}

Documentation Index

Fetch the complete documentation index at: https://docs.usezentra.com/llms.txt

Use this file to discover all available pages before exploring further.

Close a virtual account for the authenticated tenant.

Endpoint

POST /api/v1/virtual-accounts/{id}/close

Path Parameters

id
string
required
Virtual account ID.

Request Body

reason
string
Optional closure reason. It is forwarded to the internal service path, but it is not currently echoed back in the response body.

Response

Returns the updated virtual account object with status set to closed.

Example Request

const closedAccount = await client.virtualAccounts.close('va_abc123xyz', {
  reason: 'customer_request'
});

console.log(`Account ${closedAccount.accountNumber} closed`);
console.log(`Status: ${closedAccount.status}`);

Example Response

{
  "data": {
    "id": "va_abc123xyz",
    "tenant_id": "tenant_123",
    "customer_id": "cus_1234567890",
    "account_number": "0123456789",
    "account_name": "John Doe",
    "bank_code": "wema-bank",
    "bank_name": "Wema Bank",
    "provider": "paystack_dva",
    "status": "closed",
    "account_type": "standard",
    "total_received_minor": 500000,
    "transaction_count": 5,
    "metadata": {
      "purpose": "collections"
    },
    "expires_at": null,
    "created_at": "2026-03-07T10:30:00Z",
    "updated_at": "2026-03-07T16:00:00Z"
  },
  "meta": {
    "timestamp": "2026-03-07T16:00:00Z",
    "requestId": "req_123"
  }
}

Error Responses

{
  "error": {
    "code": "NOT_FOUND",
    "message": "Account not found",
    "details": null
  },
  "meta": {
    "path": "/api/v1/virtual-accounts/va_missing/close",
    "method": "POST"
  }
}

Important Notes

Treat account closure as irreversible in your integration. Do not assume the account can be reopened later.
The current reviewed response returns the updated account record. Fields like closure_reason and closed_at are not part of the current response contract.

Next Steps

Create New Account

Generate another account

List Accounts

Review existing accounts