Skip to main content

Documentation Index

Fetch the complete documentation index at: https://developers.t2000.ai/llms.txt

Use this file to discover all available pages before exploring further.

Your agent takes a concept, generates a hero image with fal.ai’s Flux, writes a 60-second elevator pitch with Claude, and synthesizes the pitch as an MP3 via ElevenLabs — all in one chain, paid as you go in USDC. ~$0.18, ~18 seconds.

The prompt

Generate a hero image via fal.ai, write a 60-sec elevator pitch via Claude, synthesize it as MP3 via ElevenLabs.

What runs

  1. POST /fal/fal-ai/flux/dev — Flux image generation (~$0.06)
  2. POST /anthropic/v1/messages — Claude writes the pitch (~$0.02)
  3. POST /elevenlabs/v1/text-to-speech/:voiceId — pitch becomes audio (~$0.10)

Run it

Claude Desktop (MCP)

Same install pattern as any MPP recipe:
npm install -g @t2000/cli && t2 init && t2 receive && t2 mcp install
Then paste the prompt above (or your own variant — “Pitch a sleep tracker for cats” works).

SDK

import { T2000 } from '@t2000/sdk';
import { writeFileSync } from 'fs';

const agent = await T2000.create();

const concept = 'A weather-aware coffee subscription that ships beans matched to your forecast';

const image = await agent.pay({
  url: 'https://mpp.t2000.ai/fal/fal-ai/flux/dev',
  method: 'POST',
  body: JSON.stringify({
    prompt: `Hero brand image: ${concept}. Cinematic, soft morning light.`,
    image_size: 'landscape_16_9',
  }),
});

const pitch = await agent.pay({
  url: 'https://mpp.t2000.ai/anthropic/v1/messages',
  method: 'POST',
  headers: { 'anthropic-version': '2023-06-01' },
  body: JSON.stringify({
    model: 'claude-sonnet-4-5',
    max_tokens: 512,
    messages: [{
      role: 'user',
      content: `Write a 60-second elevator pitch for: ${concept}. First person, confident, no jargon.`,
    }],
  }),
});

const voiceId = 'EXAVITQu4vr4xnSDxMaL'; // any ElevenLabs voice
const audio = await agent.pay({
  url: `https://mpp.t2000.ai/elevenlabs/v1/text-to-speech/${voiceId}`,
  method: 'POST',
  body: JSON.stringify({
    text: (pitch.body as { content: { text: string }[] }).content[0].text,
    model_id: 'eleven_turbo_v2',
  }),
});

// Binary endpoints return JSON { url, contentType, sizeBytes } — fetch the URL
// for the bytes. (The gateway hosts the artifact so audio never has to survive
// a JSON/text transport.) See Agent Payments → Binary responses.
const { url } = audio.body as { url: string };
const mp3 = await fetch(url).then((res) => res.arrayBuffer());
writeFileSync('./pitch.mp3', Buffer.from(mp3));

Expected output

3 calls · ~$0.18 · ~18s · 0 taps
hero image (hosted URL) · pitch text · ./pitch.mp3
The image comes back as a hosted fal URL and the pitch as text — only the voiceover is written to disk above. Add writeFileSync for the others if you want local copies. The ElevenLabs step draws on the gateway’s pooled voice quota; if it’s exhausted the call returns an error (you still pay the micro-charge, surfaced truthfully).

Extend it

  • Swap Flux Dev for Flux Pro (/fal/fal-ai/flux-pro, $0.10) for higher-fidelity output
  • Add DeepL (/deepl/v1/translate) to ship the pitch in 5 languages, then run each through ElevenLabs for localized voiceovers
  • Swap Claude for Gemini 2.5 Pro (/gemini/v1beta/models/gemini-2.5-pro) for the pitch generation
  • Drop the assets into Walrus storage and embed them in a landing page — that’s the upcoming Audric Store flow