asset_register
Register an Asset into the provider library of one advertiser, so that an ad of that advertiser can use it. The call returns at once, and asset_get gives the state.
Ask to register a file with one advertiser, so that an ad of that advertiser can use it. The Registration runs in the background.
“Put the spring sale video in the Acme Meta account.”
The agent finds the advertiser with list_advertisers, and then calls this tool. The call returns at once, and the Registration runs. The agent then reads the Asset with asset_get until the Registration settles. You see the result: the file is ready, with the id that the provider gave it, or the Registration failed, with the reason.
While a Registration of a file with an advertiser runs, or after it succeeds, AdCrunch refuses a second one, so a retry makes no copy. After a failed Registration, the agent can register the file again. What each provider supports states which providers take a Registration.
This tool is part of the job Bring your own creative.
Reference
Place an Asset in one advertiser’s provider-side library, so ads in that account can use it.
Registration targets an advertiser, not a provider — an organization usually has several ad accounts. Use list_advertisers to find the right id.
Returns immediately; poll asset_get to see when the Registration becomes ready. Video can stay running for several minutes while the provider processes it, which is normal and not a failure. Registering the same Asset to the same advertiser twice is refused rather than duplicated, so a retry is safe.
Input
| Argument | Type | Required | Description |
|---|---|---|---|
advertiser_id |
string | yes | The advertiser (ad account) id — acc_…. |
asset_id |
string | yes | The Asset id (ast_…). |
Output
A successful call returns this object in structuredContent.
| Field | Type | Always present | Description |
|---|---|---|---|
registration |
object | yes | The Registration, at running, with no providerIdentifier yet. Poll asset_get until the Registration is ready or failed. |
registration.advertiserId |
string | yes | The advertiser whose provider library gets the Asset. |
registration.assetId |
string | yes | The Asset that the Registration places. |
registration.createdAt |
number | yes | Milliseconds since the Unix epoch, UTC. |
registration.deletedAt |
number or null | yes | Always null here. When a retry replaces a failed Registration, AdCrunch sets this time on the old one and answers it no more. |
registration.failureReason |
string or null | yes | Why the Registration failed, as a sentence: the words of the provider, or the words of AdCrunch. null unless status is failed. |
registration.id |
string | yes | The id of the Registration, reg_…. |
registration.organizationId |
string | yes | The organization that owns the Asset. |
registration.provider |
one of meta, gads, tiktok, x, openai, snapchat, dv360 |
yes | The provider that owns the advertiser. |
registration.providerIdentifier |
string or null | yes | The id that the provider gave the file: a Meta image hash, or the id of the image or the video at the provider. null until the provider gives it, and null on a failed Registration. An image gets its id when the Registration becomes ready. A video gets its id earlier, while the Registration is running, because the provider gives the id before it has processed the file. Build a creative from a ready Registration only. |
registration.status |
one of running, ready, failed |
yes | Video can stay running for several minutes while the provider processes it. That is normal, and not a failure. |
registration.updatedAt |
number or null | yes | When the Registration last changed, in milliseconds since the Unix epoch, UTC. null until its first change. |
registration.uploadSessionId |
string or null | yes | An in-flight provider upload session, where the protocol has one. null for every image. |
registration.workflowId |
string | yes | The durable execution that runs the Registration. |
Failure codes
A failed call has isError set, and structuredContent.error holds one of these codes. Errors describes the shape of a failed call.
not_foundalready_registeredforbiddeninvalid_requestinternal_error
Scope
The token must hold asset:write. Auth & scopes 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.
- Writes. The tool can change data.
- Not destructive. The tool makes only additive changes.
- Idempotent. A second call with the same arguments changes nothing more.
- Open world. The tool reaches a system outside AdCrunch, such as an ad platform.
Example
The arguments:
{
"advertiser_id": "acc_1203456789012345",
"asset_id": "ast_7c1e9a"
}
The result, in structuredContent:
{
"registration": {
"advertiserId": "acc_1203456789012345",
"assetId": "ast_7c1e9a",
"createdAt": 1790000121000,
"deletedAt": null,
"failureReason": null,
"id": "reg_4b81d2",
"organizationId": "org_3a7f10",
"provider": "meta",
"providerIdentifier": null,
"status": "running",
"updatedAt": null,
"uploadSessionId": null,
"workflowId": "reg_4b81d2"
}
}