Introducing ad variations: turn one winner into ten
MCP · REST API

Plug Funnelful into your existing agents.

Funnelful exposes its studio agent as an MCP server over Streamable HTTP. Sessions run with your account's API key, stay out of your Chats in the web app, and are billed to your credits exactly like the web chat. The same key works for the REST API.

One setup for every client. Claude, ChatGPT, Cursor, and any other MCP-capable agent all connect the same way.

funnelful · mcp
  1. 1
    In Funnelful, open the MCP/API tab in the side panel and create an API key.
  2. 2
    Add an MCP server to your agent (Streamable HTTP):https://funnelful.ai/api/mcp
  3. 3
    Send the key in the x-api-key header, or as a Bearer token.
Toolsstart_sessionsend_messagewait_for_turnget_messageslist_media

Fastest path: paste this into your agent and it connects itself.

Set up Funnelful for me so I can produce video and image ads from here.
1. Add the Funnelful MCP server: https://funnelful.ai/api/mcp (Streamable HTTP).
2. Authenticate with my API key via the `x-api-key` header: YOUR_API_KEY
Once it's connected, let me know — then I can ask you to run ad productions, check on renders, and fetch the finished media.
Tools

What your agent can call

funnelful_start_sessionStart a new studio chat (one chat = one ad project); returns the sessionId and the chat's link.
funnelful_send_messageSend a brief to the studio agent and wait for its reply. Long renders return status=running after waitSeconds.
funnelful_wait_for_turnKeep waiting on a running turn instead of resending.
funnelful_get_messagesLatest reply and recent messages, without waiting.
funnelful_list_mediaStills, video takes, songs, and final cuts made in the chat, with download links.
funnelful_list_sessionsYour studio chats, newest first.
funnelful_stop_turnStop a running turn; nothing new starts.
funnelful_list_modelsModel playground: the models you can generate with directly, their options and list prices.
funnelful_quoteThe list price of a generate request, without starting or billing anything.
funnelful_generateGenerate with one model directly (no studio agent); image URLs are fetched server-side.
funnelful_get_generationA generation by id, with a download link once it succeeded.
REST API

Or call it over HTTP

The same studio agent and models as plain HTTP + JSON at https://funnelful.ai/api/v1, for backends and scripts that don't speak MCP. Same API keys, same credits, same list prices.

Models: generate directly

# List the models, their options and from-prices
curl https://funnelful.ai/api/v1/models -H "Authorization: Bearer $FUNNELFUL_API_KEY"

# Price a request first (nothing is started or billed)
curl https://funnelful.ai/api/v1/quote -H "Authorization: Bearer $FUNNELFUL_API_KEY" \
  -H "content-type: application/json" \
  -d '{"request":{"model":"gpt-image-2.5","prompt":"a cozy kitchen, morning light","aspectRatio":"9:16"}}'

# Generate: 202 with the generation (status queued or running)
curl https://funnelful.ai/api/v1/generations -H "Authorization: Bearer $FUNNELFUL_API_KEY" \
  -H "content-type: application/json" \
  -d '{"request":{"model":"gpt-image-2.5","prompt":"a cozy kitchen, morning light","aspectRatio":"9:16"}}'

# Poll: wait (up to 60 s) holds the request until it succeeds or fails; url is the download link
curl "https://funnelful.ai/api/v1/generations/gen:<id>?wait=60" -H "Authorization: Bearer $FUNNELFUL_API_KEY"

Reference images take asset: ids from POST /uploads (a file, or a public https url the server downloads) or gen: ids of earlier images.

Agent: run an ad production

# Start a session (one session = one ad project)
curl https://funnelful.ai/api/v1/sessions -X POST -H "x-api-key: $FUNNELFUL_API_KEY"

# Send the brief and stream the turn as server-sent events
curl -N https://funnelful.ai/api/v1/sessions/<id>/messages -H "x-api-key: $FUNNELFUL_API_KEY" \
  -H "content-type: application/json" \
  -d '{"message":"A 20 s UGC ad for our matcha powder, 9:16"}'

# The agent asked a question? Answer it with the next message
curl -N https://funnelful.ai/api/v1/sessions/<id>/messages -H "x-api-key: $FUNNELFUL_API_KEY" \
  -H "content-type: application/json" -d '{"message":"Go with the second script"}'

# Renders finish after the turn: follow the session until the media is ready
curl -N https://funnelful.ai/api/v1/sessions/<id>/events -H "x-api-key: $FUNNELFUL_API_KEY"
turn.startedThe turn began.
message.deltaAssistant text as it streams.
tool.started / tool.completedThe agent called a tool, and it finished (ok, plus a short summary).
generation.created / generation.updatedA still, clip or song started, or changed status (url once succeeded).
turn.completedThe turn ended, with the full reply. Last event of the message stream.
turn.failed / turn.stoppedThe turn failed (with the reason) or was stopped.
Book a call