---
title: Verification
description: The Verification API lets you create and retrieve verification.
---

# Verification

The Verification API lets you create and retrieve verification.

> **Auto-generated** from the public OpenAPI spec — this page never
> drifts from the running API. Base URL `https://api.arcnm.io`. Authenticate with
> the `X-API-Key` header (see [Authentication](../authentication.md)).

## Get Verification Prompts

`GET /api/v1/parts/verification/{calculation_id}`

Apply the ask-policy to the calculation's persisted verification
candidates and return the prompts the user should answer.

**Parameters**

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `calculation_id` | path | string | yes | Identifier of the calculation. |
| `confidence_threshold` | query | number | no |  |
| `max_prompts` | query | integer | no |  |
| `include_all` | query | boolean | no |  |

**Request**

<CodeTabs>

```bash title="cURL"
curl -X GET https://api.arcnm.io/api/v1/parts/verification/{calculation_id} \
  -H "X-API-Key: $ARCNM_API_KEY"
```

```python title="Python"
import requests

resp = requests.get(
    "https://api.arcnm.io/api/v1/parts/verification/{calculation_id}",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
resp.raise_for_status()
print(resp.json())
```

```typescript title="TypeScript"
const resp = await fetch("https://api.arcnm.io/api/v1/parts/verification/{calculation_id}", {
  method: "GET",
  headers: {
    "X-API-Key": process.env.ARCNM_API_KEY!,
  },
})
const data = await resp.json()
```

</CodeTabs>

**Responses**

| Status | Description |
| --- | --- |
| `200` | Successful Response |
| `422` | Validation Error |

**Errors**

Standard error responses — see the [Errors catalog](../errors.md) for the full envelope, `request_id`, and retry-safety table.

| Status | Code | When |
| --- | --- | --- |
| `401` | `invalid_api_key` | Missing, malformed, or revoked API key. |
| `403` | `insufficient_scope` | The key is valid but lacks a scope this endpoint requires. |
| `404` | `not_found` | A referenced resource doesn't exist or isn't visible to your organisation. |
| `429` | `rate_limited` | Per-key or per-org rate limit exceeded — back off with jitter and retry. |


**Response body** `200`

| Field | Type | Description |
| --- | --- | --- |
| `all_candidates` | object[] |  |
| `calculation_id` | string |  |
| `part_revision_id` | string |  |
| `prompts` | object[] |  |
| `summary` | object |  |

**Example response**

```json
{
  "all_candidates": [
    {}
  ],
  "calculation_id": "string",
  "part_revision_id": "string",
  "prompts": [
    {}
  ],
  "summary": {}
}
```

## Submit Verification Responses

`POST /api/v1/parts/verification/{calculation_id}/responses`

Persist the user's verify/correct answers as end_user ground-truth
labels that both feed the corpus and apply to the next calculation.

**Parameters**

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `calculation_id` | path | string | yes | Identifier of the calculation. |

**Request body** (`application/json`)

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `responses` | VerificationResponseItem[] | yes |  |

**Request**

<CodeTabs>

```bash title="cURL"
curl -X POST https://api.arcnm.io/api/v1/parts/verification/{calculation_id}/responses \
  -H "X-API-Key: $ARCNM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "responses": [
      {
        "corrected_value": null,
        "detail_kind": "string",
        "dfm_issue_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "drawing_bbox": [
          0
        ],
        "face_uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "feature_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "field_name": "string",
        "field_path": "string",
        "pmi_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "predicted_confidence": 0,
        "predicted_value": null,
        "target_kind": "string",
        "verdict": "string"
      }
    ]
  }'
```

```python title="Python"
import requests

resp = requests.post(
    "https://api.arcnm.io/api/v1/parts/verification/{calculation_id}/responses",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "responses": [
            {
                "corrected_value": None,
                "detail_kind": "string",
                "dfm_issue_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                "drawing_bbox": [
                    0
                ],
                "face_uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                "feature_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                "field_name": "string",
                "field_path": "string",
                "pmi_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
                "predicted_confidence": 0,
                "predicted_value": None,
                "target_kind": "string",
                "verdict": "string"
            }
        ]
    },
)
resp.raise_for_status()
print(resp.json())
```

```typescript title="TypeScript"
const resp = await fetch("https://api.arcnm.io/api/v1/parts/verification/{calculation_id}/responses", {
  method: "POST",
  headers: {
    "X-API-Key": process.env.ARCNM_API_KEY!,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "responses": [
      {
        "corrected_value": null,
        "detail_kind": "string",
        "dfm_issue_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "drawing_bbox": [
          0
        ],
        "face_uuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "feature_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "field_name": "string",
        "field_path": "string",
        "pmi_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "predicted_confidence": 0,
        "predicted_value": null,
        "target_kind": "string",
        "verdict": "string"
      }
    ]
  }),
})
const data = await resp.json()
```

</CodeTabs>

**Responses**

| Status | Description |
| --- | --- |
| `201` | Successful Response |
| `422` | Validation Error |

**Errors**

Standard error responses — see the [Errors catalog](../errors.md) for the full envelope, `request_id`, and retry-safety table.

| Status | Code | When |
| --- | --- | --- |
| `401` | `invalid_api_key` | Missing, malformed, or revoked API key. |
| `403` | `insufficient_scope` | The key is valid but lacks a scope this endpoint requires. |
| `404` | `not_found` | A referenced resource doesn't exist or isn't visible to your organisation. |
| `409` | `conflict` | A conflicting change, or an `Idempotency-Key` reused with a different body. |
| `429` | `rate_limited` | Per-key or per-org rate limit exceeded — back off with jitter and retry. |


**Response body** `201`

| Field | Type | Description |
| --- | --- | --- |
| `applies_to_subsequent_calculations` | boolean |  |
| `created` | integer |  |
| `part_revision_id` | string |  |

**Example response**

```json
{
  "applies_to_subsequent_calculations": true,
  "created": 0,
  "part_revision_id": "string"
}
```
