---
title: asset_get
description: Fetch one Asset with its Registrations — where it has been placed, and how each placement went. Also how you poll a running registration.
---

Fetches a single **Asset** together with all its **Registrations** and their states. This is also how you **poll** a registration you started with [`asset_register`](/mcp/tools/asset-register): a `running` Registration is still in progress.

## Input

| Field      | Type    | Required | Description         |
| ---------- | ------- | -------- | ------------------- |
| `asset_id` | `ast_*` | yes      | The Asset to fetch. |

## Output

`{ asset: { …, registrations: [...] } }` — the Asset metadata (see [`asset_list`](/mcp/tools/asset-list)) plus a `registrations` array. Each Registration carries:

| Field | Type | Description |
| --- | --- | --- |
| `id` | `reg_*` | The Registration id. |
| `advertiserId` | `acc_*` | The advertiser whose library it was placed in. |
| `provider` | `string` | e.g. `meta`. |
| `status` | `'running' \| 'ready' \| 'failed'` | `running` = still processing; `ready` = live; `failed` = retryable. |
| `providerIdentifier` | `string` | The provider's own id for the file, once `ready`. |
| `failureReason` | `string` | Present when `status` is `failed`. |

:::tip[Polling video]

Video can stay `running` for several minutes while the provider transcodes it. That's expected — keep polling `asset_get`; don't treat it as a failure.

:::

## Example

> _"Is that image ready in the Acme account yet?"_

Claude calls `asset_get({ asset_id: 'ast_…' })`, finds the Registration for that advertiser, and reports its `status`.

## Errors

- Only `ready` (finalized) Assets are returned — an Asset still `pending` reads as not found.
- Unknown ids and Assets owned by another organization both come back the same way, so an id can't be probed for existence.
- `401` or `403` — see [Errors](/mcp/errors), which every tool shares. This one needs `asset:read`.

## Reference

Fetch one Asset together with its Registrations — where it has been placed, and how each placement went.

This is also how you poll a registration you started: a `running` Registration is still in progress. Video can stay running for several minutes while the provider processes it, which is normal.

### Input

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `asset_id` | string | yes | The Asset id (ast_…). |

### Failure codes

A failed call has `isError` set, and `structuredContent.error` holds one of these codes. [Errors](/mcp/errors) describes the shape of a failed call.

- `not_found`
- `forbidden`
- `invalid_request`
- `internal_error`

### Scope

The token must hold `asset:read`. [Auth & scopes](/mcp/auth) lists each scope.

### Annotations

A client reads these hints. A hint that the tool does not declare has the default value of the MCP specification.

- **Read-only.** The tool changes nothing.
- **Closed world.** The tool reads and writes the data of AdCrunch only.
