> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cngn.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Temporary Virtual Account

> Create a one-time virtual account for a single customer deposit

Creates a short-lived virtual account tied to a specific expected amount, ideal for checkout flows where each customer payment needs its own account number. The account expires at `expiresAt`.

<Note>
  Requires the **Fiat Deposit** permission. The request body must be [encrypted](/guides/encryption).
</Note>

### Body parameters (plain payload, pre-encryption)

<ParamField body="amount" type="number" required>
  Expected deposit amount in Naira. Minimum `100`.
</ParamField>

<ParamField body="customer" type="object" required>
  The paying customer.

  <Expandable title="properties">
    <ParamField body="customer.email" type="string" required>
      Customer email address.
    </ParamField>

    <ParamField body="customer.name" type="string">
      Customer full name.
    </ParamField>
  </Expandable>
</ParamField>

<ParamField body="accountName" type="string">
  Custom display name for the account (3–50 characters).
</ParamField>

<ParamField body="narration" type="string">
  Payment narration (max 100 characters).
</ParamField>

### Response (decrypted `data`)

<ResponseField name="reference" type="string">Your deposit reference.</ResponseField>
<ResponseField name="paymentReference" type="string">Provider payment reference.</ResponseField>
<ResponseField name="amount" type="number">Amount the customer should transfer.</ResponseField>
<ResponseField name="amountExpected" type="number">Total expected including fees.</ResponseField>
<ResponseField name="fee" type="number">Processing fee.</ResponseField>
<ResponseField name="vat" type="number">VAT on the fee.</ResponseField>
<ResponseField name="currency" type="string">`NGN`.</ResponseField>
<ResponseField name="status" type="string">Deposit status (e.g. `pending`).</ResponseField>
<ResponseField name="narration" type="string">Narration attached to the account.</ResponseField>
<ResponseField name="accountNumber" type="string">Temporary NUBAN account number.</ResponseField>
<ResponseField name="accountName" type="string">Account display name.</ResponseField>
<ResponseField name="bankName" type="string">Bank hosting the account.</ResponseField>
<ResponseField name="bankCode" type="string">CBN bank code.</ResponseField>
<ResponseField name="expiresAt" type="string">ISO 8601 expiry timestamp. Deposits after this time are not credited.</ResponseField>

<RequestExample>
  ```json Plain body (encrypt before sending) theme={null}
  {
    "amount": 50000,
    "customer": {
      "name": "Ada Obi",
      "email": "ada@example.com"
    },
    "accountName": "Acme Checkout",
    "narration": "Order #1042"
  }
  ```

  ```bash cURL (wire format) theme={null}
  curl -X POST "https://api.cngn.co/v1/api/virtual-account/temporary" \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "content": "<base64 AES-256-CBC ciphertext of the plain body>",
      "iv": "<base64 16-byte IV>"
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 - Success (data shown decrypted) theme={null}
  {
    "status": 200,
    "message": "Temporary virtual account created successfully",
    "data": {
      "reference": "DEP-8c1f2a9b",
      "paymentReference": "PAY-55aa66bb",
      "amount": 50000,
      "amountExpected": 50075,
      "fee": 70,
      "vat": 5,
      "currency": "NGN",
      "status": "pending",
      "narration": "Order #1042",
      "accountNumber": "8801234567",
      "accountName": "Acme Checkout",
      "bankName": "Wema Bank",
      "bankCode": "035",
      "expiresAt": "2026-07-22T18:45:00.000Z"
    }
  }
  ```

  ```json 400 - Validation error theme={null}
  {
    "status": 400,
    "message": "amount: Minimum amount is 100 NGN"
  }
  ```
</ResponseExample>
