---
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`.
