> For the complete documentation index, see [llms.txt](https://docs.neox.vn/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.neox.vn/docs/global/global-collections/integration/virtual-accounts/api-supplement-virtual-account-material.md).

# Supplement Virtual Account Material

#### Endpoint: POST /v2/gc/virtual-accounts/supplement

#### Description: Submit additional KYC material requested for a virtual account application, as indicated by the `materialCode`/`materialInfoJson` on the [`VA_SUPPLEMENT_REQUIRED`](/docs/global/global-collections/integration/virtual-accounts/webhook.md#va_supplement_required) webhook or the `materialCode`/`materialInfoJson` fields on [Get Detail Virtual Account](/docs/global/global-collections/integration/virtual-accounts/get-detail-virtual-account.md).

{% hint style="info" %}
The material payload is a **JSON string** (`materialInfo`) whose actual required keys vary per virtual account, per the `materialInfoJson` you were told to supplement (see [Get Detail Virtual Account](/docs/global/global-collections/integration/virtual-accounts/get-detail-virtual-account.md) and the [Webhook](/docs/global/global-collections/integration/virtual-accounts/webhook.md) page).
{% endhint %}

## Request

#### Request Body Field Descriptions (JSON)

| Field Name   | Type    | Required | Description                                                                                                                                                                                      |
| ------------ | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| id           | string  | Yes      | The virtual account's NeoX `id`, as returned by Create Virtual Account.                                                                                                                          |
| materialInfo | string  | No       | A JSON-encoded string containing the supplementary material key/value pairs. Parsed and validated against the required fields declared in this VA's own `materialInfoJson`, unless `draft=true`. |
| materialId   | string  | No       | Identifier of a specific material submission, if resubmitting/referencing a prior one.                                                                                                           |
| requestId    | string  | No       | Merchant-generated request ID for this supplement submission.                                                                                                                                    |
| draft        | boolean | No       | If `true`, skips required-field validation and saves the submission with status `DRAFT` instead of submitting it for review.                                                                     |

#### Commonly-seen `materialInfo` keys

The exact set of required keys is defined per-VA by its own `materialInfoJson` (returned on creation / on Get Detail) — there is no fixed global schema. The following keys are known to appear (from the Merchant Portal's field catalog) and are documented here as a reference, not an exhaustive or guaranteed list:

| Key                                                          | Type / Enum                                                                                                                                                           |
| ------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `enterpriseSubjectType`                                      | `MAINLAND_CHINA_JOINT_VENTURE` \| `MAINLAND_CHINA_INDIVIDUAL` \| `MAINLAND_CHINA_ENTERPRISE` \| `HONGKONG_CHINA` \| `OVERSEAS_COUNTRIES`                              |
| `listed`, `stateOwnedEnterprised`, `foreignOwnedEnterprised` | boolean-as-string: `'1'` (yes) / `'0'` (no)                                                                                                                           |
| `independentWebsiteMonthlyTurnover`                          | `TURNOVER_10000` \| `TURNOVER_50000` \| `TURNOVER_100000` \| `TURNOVER_MAX`                                                                                           |
| `independentWebsiteSellCount`                                | `COUNT_20` \| `COUNT_50` \| `COUNT_MAX`                                                                                                                               |
| `independentWebsitePayInterface`                             | `USA_LOCAL_TRANSFER` \| `PAYPAL` \| `OTHER`                                                                                                                           |
| `independentWebsitePayType`                                  | `CREDIT_CARD` \| `DEBIT_CARD` \| `PAYPAL` \| `OTHER`                                                                                                                  |
| `independentWebsiteSetUpType`                                | `INDEPENDENT_DEVELOPMENT` \| `SIGN_IN` \| `PLATFORM_CONSTRUCTION_STATION` \| `OTHER`                                                                                  |
| `independentWebsitePayInterfaceOther`                        | free text — required only when `independentWebsitePayInterface=OTHER`                                                                                                 |
| `independentWebsiteSetUpTypeOther`                           | free text — required only when `independentWebsiteSetUpType=OTHER`                                                                                                    |
| `independentWebsiteSetUpDate`                                | date — cannot be a future date (UI-enforced)                                                                                                                          |
| `platformOrApplicationAccountRegisterName`                   | free text, 1–60 chars, English only (seen in a real `M003` material request — see [Webhook](/docs/global/global-collections/integration/virtual-accounts/webhook.md)) |
| `platformOrApplicationUrl`                                   | URL, 1–200 chars, must start with `http://` or `https://`                                                                                                             |

#### Request sample

Real captured example (material code `M003`):

```json
{
  "id": "ff2f112d687a4dc98ec33788c8e63b60",
  "materialInfo": "{\"platformOrApplicationAccountRegisterName\":\"NGUYEN VAN A\",\"platformOrApplicationUrl\":\"https://example.com\"}",
  "requestId": "1785407870418"
}
```

### Response

#### Response Field Descriptions

| Field Name    | Type   | Description                      |
| ------------- | ------ | -------------------------------- |
| code          | number | Response code.                   |
| data          | object | Material submission result.      |
| message       | string | Response message.                |
| neoResponseId | string | Unique NeoX response identifier. |

{% hint style="warning" %}
There is no `state` field in the response envelope.
{% endhint %}

#### `data` object fields:

| Field Name | Type   | Description                                                                                                                                                                                                                                                                                                                                             |
| ---------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| id         | string | The virtual account's NeoX `id`.                                                                                                                                                                                                                                                                                                                        |
| requestId  | string | Echoes the `requestId` from the request, if provided.                                                                                                                                                                                                                                                                                                   |
| status     | string | Status after this submission. Real captured example shows `APPROVED` once the material is reviewed and accepted — see [Get Detail Virtual Account](/docs/global/global-collections/integration/virtual-accounts/get-detail-virtual-account.md)'s `supplementData` for the full per-submission status lifecycle (`submittedAt` → review → `approvedAt`). |

#### Response sample

```json
{
  "code": 1,
  "data": {
    "id": "ff2f112d687a4dc98ec33788c8e63b60",
    "requestId": "1785407870418",
    "status": "APPROVED"
  },
  "message": "Successful"
}
```

### Notes

* Requires Bearer token in the Authorization header.
* The Accept-Language header can be used to specify the response language (Support: "vi", "en").
* Call this endpoint when a `VA_SUPPLEMENT_REQUIRED` webhook is received, or when [Get Detail Virtual Account](/docs/global/global-collections/integration/virtual-accounts/get-detail-virtual-account.md) shows a non-empty `materialCode`/`materialInfoJson`.
* `materialInfo` must be a JSON **string** (not a raw JSON object) whose keys match what `materialInfoJson` asked for.
* Set `draft=true` to save progress without submitting for review (skips required-field validation).
* The review outcome is delivered via the `VA_MATERIAL_SUPPLEMENT` webhook and reflected in `supplementData` on [Get Detail Virtual Account](/docs/global/global-collections/integration/virtual-accounts/get-detail-virtual-account.md). There is no separate "get supplement material status" endpoint — see the notice on that page.
