API v1 preview

# Get a model

`GET /api/v1/models/{model_id}`

## Overview

Retrieve current inspection progress, findings and estimated measurements. A completed inspection can report defects. Processing failures return HTTP 200 with mesh_check.error; use the response body to determine the outcome. Previews run independently: when preview.status is ready, preview.images contains all seven signed PNG URLs. Refresh this resource when the URLs expire.

Requires `models:read`.

[Create and poll a model guide](https://ottomfg.com/docs/models.md)

[Errors and retries](https://ottomfg.com/docs/errors.md)

Request

cURL

```
curl -X GET "$API_BASE_URL/api/v1/models/$MODEL_ID" \
  -H "Authorization: Bearer $OTTOMFG_API_KEY"
```

Use your configured API_BASE_URL. Set MODEL_ID to the ID returned by creation.

[Registration and lookup examples](https://ottomfg.com/docs/models.md)

## Parameters

`model_id` path · required

Public model ID returned in id; pass unchanged.

Immutable model ID: MD- followed by eight uppercase Crockford Base32 characters. Use this same ID in the website, URLs and API; pass it unchanged.

string

## Responses

Model with current progress and inspection results.

200 response

```
{
  "id": "MD-739YQ549",
  "source": {
    "file_id": "file_6c82bd3e319b4bb099310d54a761879e"
  },
  "name": "Wedding figurine",
  "external_id": "design-123",
  "created_at": "2026-09-18T18:00:00.000000Z",
  "updated_at": "2026-09-18T18:00:00.000000Z",
  "status": "processing",
  "status_reasons": [
    {
      "code": "inspection_pending",
      "message": "Mesh inspection is running."
    }
  ],
  "preview": {
    "status": "pending"
  },
  "longest_dimension_mm": 100,
  "mesh_check": {
    "status": "pending"
  },
  "print_check": {
    "status": "pending"
  },
  "repair": {
    "required": false,
    "applied": false,
    "reason": null,
    "status": "not_applied",
    "fee": 0,
    "covered_by_order_id": null
  },
  "progress": {
    "stage": "queued"
  },
  "volume": null,
  "estimated_weight_g": null
}
```

Returns [the Model object](https://ottomfg.com/docs/model-object.md).

**Response headers**

`X-Request-ID`

Request identifier for support. Send X-Request-ID with 8–64 ASCII letters, digits or hyphens to reuse that value; otherwise the server generates a UUID4 hex value. Include the returned X-Request-ID in support requests. Do not put secrets or account IDs in this value.

`ETag`

Opaque model edit version. Changes only when the file, name or print size changes; processing and previews do not invalidate it. Send the complete quoted value in If-Match.

## Errors

| HTTP | Code | What to do |
| --- | --- | --- |
| 401 Unauthorized | `unauthenticated` | The API key is missing, invalid or revoked. Send a valid business API key in Authorization: Bearer. |
| 403 Forbidden | `permission_denied` | The key lacks the endpoint's scope, or payments lack spending consent. Check the scope listed on the endpoint. |
| 404 Not Found | `model_not_found` | No model with this ID exists in the account, or it was deleted. Check the ID. |
| 429 Too Many Requests | `resource_exhausted` | A rate or account limit was reached. Wait at least Retry-After seconds, then retry. |
| 500 Internal Server Error | `internal` | The server failed unexpectedly. Retry with backoff; contact support with X-Request-ID if it persists. |
| 503 Service Unavailable | `unavailable` | A required service is briefly unavailable. Retry with backoff, reusing the same Idempotency-Key. |

[Idempotent requests](https://ottomfg.com/docs/idempotency.md)

API v1 preview

Source: https://ottomfg.com/docs/get-model
