Upload ad creatives from an AI agent

Upload images and videos to Meta Ads or Google Ads from Claude, Codex, or any AI agent using AdKit. Includes domain allowlist setup for each client.

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 settings showing *.adkit.so added to 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