# Get a registration document

> The registrations.documents.get operation: GET /api/v1/registrations/{id}/documents/{file} in the REST API and the registrations_documents_get tool in the MCP server.

Returns a document uploaded to a registration (`registrations.documents.upload`): its file name, type, size
and SHA-256. In the console, documents open from the registration's page; the file itself is served only
after this check, and only when its bytes still match the SHA-256.

## At a glance

- **REST:** `GET /api/v1/registrations/{id}/documents/{file}`
- **MCP tool:** `registrations_documents_get`
- **Operation ID:** `registrations.documents.get`
- **Scope:** Legal entity
- **Permission:** `registrations:read`
- **Risk tier:** `read`
- **Dry run:** Not supported
- **Idempotency:** Not needed (read only)
- **Modes:** Test and live
- **Authentication:** API key with the `registrations:read` scope
- **Since:** M7

## Request

### Path parameters

| Field  | Type        | Description                                                                               |
| ------ | ----------- | ----------------------------------------------------------------------------------------- |
| `id`   | string      | The registration (`regn_…`) or its regime's ID, e.g. `EU_OSS_UNION` or `US_SALES_TAX:TX`. |
| `file` | `file_…` ID | The document's ID (`file_…`).                                                             |

### Query parameters

This operation takes no query parameters.

## Response

`200 OK` with a JSON object:

| Field            | Type                                                              | Description |
| ---------------- | ----------------------------------------------------------------- | ----------- |
| `id`             | `file_…` ID                                                       |             |
| `object`         | `"registration_document"`                                         |             |
| `registrationId` | `regn_…` ID                                                       |             |
| `livemode`       | boolean                                                           |             |
| `filename`       | string or null                                                    |             |
| `contentType`    | one of `application/pdf`, `image/png`, `image/jpeg`, `image/webp` |             |
| `size`           | integer (at least 0)                                              |             |
| `sha256`         | string                                                            |             |
| `createdAt`      | date-time                                                         |             |

## Examples

### The uploaded OSS submission receipt

```http
GET /api/v1/registrations/EU_OSS_NON_UNION/documents/file_01m4tx5nj8emwbyf7y9vcf47xq
Authorization: Bearer or_test_…
```

Response (`200`):

```json
{
  "id": "file_01m4tx5nj8emwbyf7y9vcf47xq",
  "object": "registration_document",
  "registrationId": "regn_01m4tx5nj8emwbyf7y9vcf47xk",
  "livemode": true,
  "filename": "oss-submission-receipt.pdf",
  "contentType": "application/pdf",
  "size": 82,
  "sha256": "36dc4d8396e18eff67cf01ca1121f420465e698179be0d927351dbe6ac07884d",
  "createdAt": "2026-10-20T08:15:00.000Z"
}
```

## Errors

| Code                                                                                     | HTTP status | When                                                                                       | What to do                                                                                                                                         |
| ---------------------------------------------------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`validation_failed`](https://ownrecord.io/docs/reference/errors.md#validation_failed)   | 400         | `id` or `file` is malformed.                                                               | Fix the fields listed in `details.issues` and send the request again.                                                                              |
| [`resource_not_found`](https://ownrecord.io/docs/reference/errors.md#resource_not_found) | 404         | This entity has no such registration in this mode, or the file isn't one of its documents. | Check the ID and that your credentials are scoped to the right organization, entity, brand and mode.                                               |
| [`scope_required`](https://ownrecord.io/docs/reference/errors.md#scope_required)         | 400         | The request names no legal entity (an org key without `Ownrecord-Entity`).                 | Call the operation with credentials or a target at its level: an organization, a legal entity, a brand or the platform (`details.required_scope`). |
| [`permission_denied`](https://ownrecord.io/docs/reference/errors.md#permission_denied)   | 403         | You can't see this entity's registrations.                                                 | Ask an organization owner or admin for a role or scope that allows this action.                                                                    |

It can also return these [common errors](https://ownrecord.io/docs/reference.md#common-errors): [`api_version_unsupported`](https://ownrecord.io/docs/reference/errors.md#api_version_unsupported), [`authentication_required`](https://ownrecord.io/docs/reference/errors.md#authentication_required), [`api_key_invalid`](https://ownrecord.io/docs/reference/errors.md#api_key_invalid), [`dry_run_not_supported`](https://ownrecord.io/docs/reference/errors.md#dry_run_not_supported), [`rate_limited`](https://ownrecord.io/docs/reference/errors.md#rate_limited), [`internal_error`](https://ownrecord.io/docs/reference/errors.md#internal_error).
