Upload ad creatives from an AI agent
You can drag an image or video into your AI agent and ask it to upload that creative to Meta Ads or Google Ads through AdKit. The agent handles everything: it talks to AdKit, AdKit sends the file to the ad platform, and you get back a media ID ready to use in your ads.
For small files, the agent sends the creative inline and it just works. But larger images and videos can get silently truncated during transfer, which produces a corrupted creative in your ad account.
When that happens, AdKit automatically switches to a direct upload flow: the agent requests a temporary upload URL from AdKit, uploads the file directly, and registers it with the ad platform. This flow is more reliable, but it requires the agent to make outbound requests to *.adkit.so. Most agents block unknown domains by default. No worries though, AdKit got you covered :)
The fix is simple: add *.adkit.so to your agent's allowed domains. Pick your agent below and follow the steps.
Whitelist AdKit's upload domain
Add *.adkit.so to your agent's allowed domains. This lets the agent use AdKit's direct upload flow, which bypasses the file size limits of inline transfer.
Claude
Go to Settings > Capabilities, turn on Allow network egress, then add *.adkit.so under Additional allowed domains.

Claude Code
Add *.adkit.so to the allowedHosts array in your project's .claude/settings.json:
{
"permissions": {
"allowedHosts": ["*.adkit.so"]
}
}
You can also add it to ~/.claude/settings.json if you want it allowed across all projects, or to .claude/settings.local.json for just your machine.
Codex
Add *.adkit.so to your network domain permissions in .codex/config.toml:
[permissions.default.network.domains]
"*.adkit.so" = "allow"
Other agents
Paste this into your agent and it will figure out the best approach for your setup:
AdKit has an MCP tool for uploading creatives that sends the file as base64 in
the tool call. If you can handle large base64 payloads, that's the simplest
path.
If not, AdKit also supports temporary signed upload URLs: you request a URL from
AdKit, then upload the file directly via fetch/curl
Which approach works best for you, and do I need to configure anything (like
domain allowlisting for *.adkit.so) to make it work?
Common questions
Upload links are temporary. Just ask the agent to start the upload again. It will request a new link automatically.
Any agent that supports an AdKit connector: Claude, Claude Code, Codex, ChatGPT, and others. Local agents (CLI-based) usually work without any config. Cloud-hosted agents need the domain allowlisted first.
AdKit passes your file to Meta or Google as-is. Generally: JPEG, PNG, and MP4 for most ad types. Check your ad platform's creative specs for exact requirements.
The agent returns a media ID from the ad platform. For Meta, that's an image hash or video ID. For Google, it's an asset ID. You can verify by asking the agent to list your account's media.