---
title: asset_register
description: Place an Asset in one advertiser's provider-side library so ads in that account can use it. Returns immediately; poll asset_get for readiness.
---

Places an **Asset** in one **advertiser's** provider-side library, so ads in that account can reference it. Registration targets an advertiser (an `acc_…`), not a provider — an organization usually has several ad accounts. Use [`list_advertisers`](/mcp/tools/list-advertisers) to find the right id.

## Input

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `asset_id` | `ast_*` | yes | The Asset to register. |
| `advertiser_id` | `acc_*` | yes | The advertiser (ad account) to place it in. |

## Output

`{ registration }` — a Registration that starts as `status: 'running'`. The provider processes the file in the background; the call **returns immediately** rather than waiting. Poll [`asset_get`](/mcp/tools/asset-get) to see it become `ready`.

:::tip[Video takes a while — and retries are safe]

Video can stay `running` for several minutes while the provider transcodes it; that's normal. Registering the same Asset to the same advertiser twice is refused, not duplicated, so a retry never creates a second placement.

:::

## Example

> _"Register that image to the Acme ad account."_

Claude calls `asset_register({ asset_id: 'ast_…', advertiser_id: 'acc_…' })`, then polls `asset_get` until the Registration reports `ready` with a `providerIdentifier`.

## Errors

- `already_registered` — this Asset is already registered to that advertiser. Use `asset_get` to see its state.
- `not_found` — no such Asset in this organization. Use `asset_list` to see what's available.
- A provider failure comes back as a Registration with `status: 'failed'` and a `failureReason` — not an error. Retry `asset_register`.
- `401` or `403` — see [Errors](/mcp/errors), which every tool shares. This one needs `asset:write`.
