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

# Invoice VA

> Create a Bill and a One-Time Invoice Virtual Account

An **invoice virtual account** is a temporary number for one checkout. The amount and expiry are enforced. Do not reuse the number after the bill is paid, expired, or cancelled.

## Create Bill

```http theme={null}
POST https://vas.finpaytech.co/business-api/api/v1/merchants/me/expected-payments
Authorization: Bearer <access-token>
Content-Type: application/json

{
  "paymentReference": "INV-2026-1044",
  "amount": 2500.00,
  "currency": "KES",
  "expiresAt": "2026-09-12T21:00:00Z",
  "provisionInvoiceVa": true
}
```

`provisionInvoiceVa` defaults to `true`. Optional: `subMerchantId`, `customerId`.

```json theme={null}
{
  "id": "721e86a8-fd29-49b5-b42f-67e19dfb2f6e",
  "merchantId": "301f0991-8f7c-4501-a1d4-c317fe7b7f23",
  "paymentReference": "INV-2026-1044",
  "amount": 2500.00,
  "currency": "KES",
  "status": "OPEN",
  "expiresAt": "2026-09-12T21:00:00Z",
  "matchedCreditId": null,
  "virtualAccountId": "dae3dc89-dd62-42cb-84a9-d884e8d6f536",
  "virtualAccountNumber": "7600000073",
  "createdAt": "2026-09-09T10:00:00.000Z"
}
```

Put `virtualAccountNumber` on the checkout screen. Load ready-to-show copy with `GET https://vas.finpaytech.co/business-api/api/v1/merchants/me/payment-options?expectedPaymentId={id}`.

When the payer sends the exact amount before `expiresAt`, `status` becomes `MATCHED` and `matchedCreditId` is set.

## List, Get, Cancel

```http theme={null}
GET https://vas.finpaytech.co/business-api/api/v1/merchants/me/expected-payments
GET https://vas.finpaytech.co/business-api/api/v1/merchants/me/expected-payments/{expectedPaymentId}
POST https://vas.finpaytech.co/business-api/api/v1/merchants/me/expected-payments/{expectedPaymentId}/cancel
```

Cancel is for `OPEN` bills only.
