MCP tool · Creatives
get_upload_urls
For files on your computer: one signed upload URL per file (50 per call, 500 MB per file, valid 1 hour). The assistant uploads each file with an HTTP PUT.
What it does
For creatives on the user's computer: returns one signed upload URL per file (max 50 per call, 500 MB per file, valid 1 hour), for a Meta, TikTok or Snapchat launch (ad_account_id: the account the files are for).
Upload each file with: curl -sS -X PUT -H "Content-Type: <mimeType>" --data-binary @"<local path>" "<upload_url>"
then call confirm_uploads with the returned paths (it checks each file arrived and is not empty), and pass each ref in prepare_launch files. Detect each file's format (width/height, e.g. with ffprobe) yourself: 9:16, 4:5, 1:1 or 16:9.
Parameters
-
ad_account_idstring requiredThe ad account (list_ad_accounts): Meta act_…, a TikTok advertiser id, a Snapchat ad account id
-
filesarray of objects requiredFields of each item (3)
-
namestring requiredFile name with its extension
-
sizeinteger requiredBytes (required: e.g. stat -f%z, or wc -c)
-
mimeTypestring optional
-
Example
Your assistant calls it for you when you ask in your own words. What it sends (MCP tools/call, JSON-RPC 2.0):
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_upload_urls",
"arguments": {
"ad_account_id": "act_1234567890",
"files": [
{
"name": "NORDLICHT_RAIN_HOOK1_9x16.mp4",
"size": 48213112,
"mimeType": "video/mp4"
}
]
}
}
} The same call over HTTP with an API key, for an MCP client of your own (an assistant that signs in sends its OAuth token instead):
curl -X POST https://app.apogee.ad/mcp \
-H "Authorization: Bearer $APOGEE_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_upload_urls","arguments":{"ad_account_id":"act_1234567890","files":[{"name":"NORDLICHT_RAIN_HOOK1_9x16.mp4","size":48213112,"mimeType":"video/mp4"}]}}}' Access and cost
| Plans | Pro and Scale. |
|---|---|
| Scope | launch: a connection or an API key without it does not see this tool (scopes). |
| Effect | Changes Apogee only (imports, uploads, settings, comment syncs, AI drafts): nothing on the ad account. |
| Credits | Free up to the daily free reads (5,000 a day on Pro, 10,000 on Scale), then 1 credit per read. A call that fails costs nothing (credits). |
| Rate limit | 600 MCP requests per 15 minutes on Pro, 1,200 on Scale (rate limits). |
| Daily cap | Counts 2 units toward the 2,000 units one API key or assistant connection can use in 24 hours. |
In the REST API
The same thing for your own code, with an API key:
- Create uploads:
POST /uploads
Related tools
Creatives: Bring the files in before a launch. Nothing reaches Meta at this point.
import_link: Imports the creatives behind a Frame.io, Dropbox or Google Drive link (a file or a folder) through the account connected to Apogee. A public Frame.io share works without a Frame.io account when downloads are allowed; a password-protected share does not.import_status: The progress of an import. Each finished file gets areffor the launch.list_drive_folder: The videos and images of a Google Drive folder, subfolders included, each with its format.confirm_uploads: Checks each uploaded file arrived and is not empty.