---
title: Geometry
description: The Geometry API lets you list geometry.
---

# Geometry

The Geometry API lets you list geometry.

> **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)).

## Part Revision Drawing Url

`GET /api/v1/parts/geometry/{part_revision_id}/drawing-url`

Presigned URL for the revision's active 2D drawing, plus its
``content_type`` so the overlay viewer knows whether to render it as an
image or a PDF. ``{url, status, content_type}``; status ``no_dataset``
when no drawing is attached.

**Parameters**

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `part_revision_id` | path | string | yes | Identifier of the part revision. |

**Request**

<CodeTabs>

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

```python title="Python"
import requests

resp = requests.get(
    "https://api.arcnm.io/api/v1/parts/geometry/{part_revision_id}/drawing-url",
    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/geometry/{part_revision_id}/drawing-url", {
  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 |
| --- | --- | --- |
| `content_type` | string |  |
| `status` | string |  |
| `url` | string |  |

**Example response**

```json
{
  "content_type": "string",
  "status": "string",
  "url": "string"
}
```

## Part Revision Faces Url

`GET /api/v1/parts/geometry/{part_revision_id}/faces-url`

Presigned URL for the revision's per-face GLB (lazy-generated + cached).

Status values mirror the preview contract: ``ok`` (url present),
``no_dataset`` (no active CAD), ``unsupported`` (non-STEP CAD or OCP
runtime missing), ``failed`` (tessellation error).

**Parameters**

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `part_revision_id` | path | string | yes | Identifier of the part revision. |

**Request**

<CodeTabs>

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

```python title="Python"
import requests

resp = requests.get(
    "https://api.arcnm.io/api/v1/parts/geometry/{part_revision_id}/faces-url",
    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/geometry/{part_revision_id}/faces-url", {
  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 |
| --- | --- | --- |
| `status` | string |  |
| `url` | string |  |

**Example response**

```json
{
  "status": "string",
  "url": "string"
}
```
