asset_list
List the images and videos that your organization owns as Assets, each with its Registrations.
Ask what creative your organization has. The agent lists the Assets of your organization, newest first, and each Asset comes with its Registrations.
“What creative do we have, and where is each file registered?”
The agent calls this tool, and calls it again for each next page until the list ends. You see each file with its name, its kind and its size, and for a video its length. For each file, you also see each advertiser that it has a Registration with, and the state of that Registration. An upload that never finished is not in the list.
This tool is part of the job Bring your own creative.
Reference
List the active organization’s Assets — the source media it owns (images and video) — newest first. Use asset_get to see which ad accounts an Asset has been registered to. The answer holds at most limit rows (default 100, maximum 500). When it carries nextCursor, more rows exist: call this tool again with the same arguments and cursor set to that value. When it carries no nextCursor, you have every row.
Input
| Argument | Type | Required | Description |
|---|---|---|---|
cursor |
string, at least 1 character | no | The nextCursor of the previous page. Omit it to get the first page. Send it with no change, and with the same filters as the request that answered it: a cursor from a different query gets a 400 invalid_cursor. Do not build or change a cursor. |
limit |
integer, 1 to 500 | no | The greatest number of rows on the page, from 1 to 500. The default is 100. A greater value gets a 400, with error of invalid_request. Default: 100. |
Output
A successful call returns this object in structuredContent.
| Field | Type | Always present | Description |
|---|---|---|---|
assets |
array of object | yes | The Assets of this page, newest first, each with its Registrations. The list holds no reservation whose bytes have not arrived, and no deleted Asset. |
assets[].contentHash |
string | yes | AdCrunch’s own hash of the stored bytes. A hint for de-duplication, never an identity, and never a provider’s hash. Empty when the store reports none. |
assets[].createdAt |
number | yes | Milliseconds since the Unix epoch, UTC. |
assets[].createdBy |
string | yes | The user who reserved the upload. |
assets[].deletedAt |
number or null | yes | Always null here. A deleted Asset is not answered. |
assets[].durationMs |
number or null | yes | How long the video runs, in milliseconds, read from the header of the file at finalize. null for an image. For a video, null when the file does not state it, or for an Asset uploaded before AdCrunch read it. |
assets[].filename |
string | yes | The name the file was uploaded under. Never a lookup key. |
assets[].height |
number or null | yes | The height in pixels as the file is displayed, with its rotation applied, read from the header of the file at finalize. null when the file does not state it, or for an Asset uploaded before AdCrunch read it. |
assets[].id |
string | yes | The id of the Asset, ast_…. |
assets[].key |
string | yes | Where the bytes are held. Read-only, and never sent by you. |
assets[].kind |
one of image, video |
yes | Follows from mimeType, so the stored bytes verify it at finalize. It selects how a provider takes the file. |
assets[].mimeType |
string | yes | The Content-Type the file was uploaded with, verified against the stored bytes at finalize. |
assets[].name |
string or null | yes | The name a person gave this Asset, and what a provider receives at a future registration. null until somebody renames it, and the filename is the fallback. |
assets[].organizationId |
string | yes | The organization that owns the Asset. |
assets[].sizeBytes |
number | yes | Read from the stored object at finalize. |
assets[].status |
one of pending, ready |
yes | ready once the bytes have been inspected. A pending Asset is a reservation whose bytes have not arrived, and no operation here answers one. |
assets[].updatedAt |
number or null | yes | When the Asset last changed, in milliseconds since the Unix epoch, UTC: at finalize, or at the last rename. |
assets[].width |
number or null | yes | The width in pixels as the file is displayed, with its rotation applied, read from the header of the file at finalize. null when the file does not state it, or for an Asset uploaded before AdCrunch read it. |
assets[].registrations |
array of object | yes | Each Registration of this Asset, one for each advertiser, with its state. An empty array means that the Asset has no Registration. |
assets[].registrations[].advertiserId |
string | yes | The advertiser whose provider library gets the Asset. |
assets[].registrations[].assetId |
string | yes | The Asset that the Registration places. |
assets[].registrations[].createdAt |
number | yes | Milliseconds since the Unix epoch, UTC. |
assets[].registrations[].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. |
assets[].registrations[].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. |
assets[].registrations[].id |
string | yes | The id of the Registration, reg_…. |
assets[].registrations[].organizationId |
string | yes | The organization that owns the Asset. |
assets[].registrations[].provider |
one of meta, gads, tiktok, x, openai, snapchat, dv360 |
yes | The provider that owns the advertiser. |
assets[].registrations[].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. |
assets[].registrations[].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. |
assets[].registrations[].updatedAt |
number or null | yes | When the Registration last changed, in milliseconds since the Unix epoch, UTC. null until its first change. |
assets[].registrations[].uploadSessionId |
string or null | yes | An in-flight provider upload session, where the protocol has one. null for every image. |
assets[].registrations[].workflowId |
string | yes | The durable execution that runs the Registration. |
nextCursor |
string | no | Send this value as cursor to get the next page. It is absent on the last page. |
Failure codes
A failed call has isError set, and structuredContent.error holds one of these codes. Errors describes the shape of a failed call.
invalid_cursorforbiddeninvalid_requestinternal_error
Scope
The token must hold asset:read. 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.
- Read-only. The tool changes nothing.
- Closed world. The tool reads and writes the data of AdCrunch only.
Example
The arguments:
{
"limit": 2
}
The result, in structuredContent:
{
"assets": [
{
"contentHash": "9d2f41b7c6e8a35014f7b2d9c3e6a810",
"createdAt": 1790000000000,
"createdBy": "usr_2e5b84",
"deletedAt": null,
"durationMs": 15000,
"filename": "spring-sale.mp4",
"height": 1920,
"id": "ast_7c1e9a",
"key": "org_3a7f10/ast_7c1e9a",
"kind": "video",
"mimeType": "video/mp4",
"name": "Spring sale 9:16",
"organizationId": "org_3a7f10",
"sizeBytes": 24117248,
"status": "ready",
"updatedAt": 1790000120000,
"width": 1080,
"registrations": [
{
"advertiserId": "acc_1203456789012345",
"assetId": "ast_7c1e9a",
"createdAt": 1790000121000,
"deletedAt": null,
"failureReason": null,
"id": "reg_4b81d2",
"organizationId": "org_3a7f10",
"provider": "meta",
"providerIdentifier": "23843178520310445",
"status": "ready",
"updatedAt": 1790000249000,
"uploadSessionId": "1264871528937461",
"workflowId": "reg_4b81d2"
}
]
},
{
"contentHash": "4a7e1c9b0d3f26854b1e7a9c2d6f3081",
"createdAt": 1789900000000,
"createdBy": "usr_2e5b84",
"deletedAt": null,
"durationMs": null,
"filename": "spring-sale-square.jpg",
"height": 1080,
"id": "ast_2d4f83",
"key": "org_3a7f10/ast_2d4f83",
"kind": "image",
"mimeType": "image/jpeg",
"name": null,
"organizationId": "org_3a7f10",
"sizeBytes": 486112,
"status": "ready",
"updatedAt": 1789900090000,
"width": 1080,
"registrations": []
}
],
"nextCursor": "eyJwIjpbMTc4OTkwMDAwMDAwMCwiYXN0XzJkNGY4MyJdLCJxIjoiZHVkaDB0emdtdCJ9"
}