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

# Verify CAC documents

> Submit CAC certificate, status report, and MEMART for asynchronous verification.

Submit CAC documents for verification. This endpoint is **asynchronous**: it queues the documents and returns immediately with a `pending` status. Verification runs in the background and the result is emailed to the owner; you can also poll [Get CAC verification status](/api-reference/verifications/cac-status) for the per-document outcome.

Send the request as `multipart/form-data`. Supply at least the certificate or the status report. RC companies (any classification other than `BUSINESS_NAME`) also need the MEMART to complete the bucket.

## Form fields

<ParamField body="companyId" type="string" required>
  The company the documents belong to.
</ParamField>

<ParamField body="cacert" type="file" required>
  CAC certificate. PDF, JPEG, or PNG, up to 25 MB.
</ParamField>

<ParamField body="cacReport" type="file">
  CAC status report. Optional, same formats and limit.
</ParamField>

<ParamField body="memartDocument" type="file">
  MEMART document. Optional, but required to clear the full CAC bucket for RC companies.
</ParamField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST https://api.vouchmark.com/v1/verifyCacAndReport \
    -H "Authorization: Bearer $TOKEN" \
    -F "companyId=cmp_aBcD..." \
    -F "cacert=@./cacert.pdf" \
    -F "cacReport=@./cac-report.pdf" \
    -F "memartDocument=@./memart.pdf"
  ```
</RequestExample>

## Response

The response uses the standard envelope `{ success, message, data }`. Because verification is asynchronous, `data` is the uniform verification object with `verified: false` and `status: "pending"`; the submitted `companyId` is echoed in `data.details`.

<ResponseExample>
  ```json Accepted theme={null}
  {
    "success": true,
    "message": "CAC documents submitted for verification. You will receive an email notification once verification is complete, or check back later for status.",
    "data": {
      "verified": false,
      "status": "pending",
      "details": { "companyId": "cmp_aBcD..." }
    }
  }
  ```
</ResponseExample>

## Errors

Errors use the same envelope with `success: false` and a `message`.

| Status | Body                                                                               | When                                           |
| ------ | ---------------------------------------------------------------------------------- | ---------------------------------------------- |
| `400`  | `{ "success": false, "message": "At least one file is required." }`                | Neither `cacert` nor `cacReport` was supplied. |
| `400`  | `{ "success": false, "message": "Memart document is required for RC companies." }` | An RC company submitted with no files.         |
| `404`  | `{ "success": false, "message": "Company not found" }`                             | No company matches `companyId`.                |
| `500`  | `{ "success": false, "message": "..." }`                                           | Unexpected processing error.                   |

Verification is rate limited to 10 attempts per hour per caller.

<Note>
  To submit a single document type instead of a batch, use [Verify one CAC document](/api-reference/verifications/verify-cac-document).
</Note>
