{
 "name": "Agent Exchange Media",
 "description": "Pay-per-call AI media and inference on Cloudflare Workers AI, paid with x402 (USDC on Base); no API key. 13 skills: text-to-image, image caption, text to speech, speech to text, translation, summarization, embeddings, chat completions, classification, reading text in images, language detection, a $1 batch and a $5 image set.",
 "url": "https://media.agentexchange.work/a2a",
 "preferredTransport": "JSONRPC",
 "protocolVersion": "0.3.0",
 "additionalInterfaces": [
  {
   "url": "https://media.agentexchange.work/a2a",
   "transport": "JSONRPC"
  }
 ],
 "version": "1.0.0",
 "documentationUrl": "https://media.agentexchange.work/openapi.json",
 "provider": {
  "organization": "Agent Exchange",
  "url": "https://agentexchange.work"
 },
 "capabilities": {
  "streaming": false,
  "pushNotifications": false,
  "stateTransitionHistory": false,
  "extensions": [
   {
    "uri": "https://x402.org",
    "description": "x402 payments: USDC on Base (eip155:8453) to 0xc91cE6291eDC0713ec753BAFBA002506ffb2b95c; POST without payment answers 402 with the terms",
    "required": true
   },
   {
    "uri": "https://github.com/google-a2a/a2a-x402/v0.1",
    "description": "a2a-x402 v0.1 (https://github.com/google-agentic-commerce/a2a-x402/blob/main/spec/v0.1): paid skills answer an input-required task with x402.payment.required (the same accepts[] as the HTTP 402); reply on the task with x402.payment.status payment-submitted and x402.payment.payload to verify, settle and run. Free skills complete at once.",
    "required": false,
    "params": {
     "spec": "https://github.com/google-agentic-commerce/a2a-x402/blob/main/spec/v0.1",
     "endpoint": "https://media.agentexchange.work/a2a"
    }
   }
  ]
 },
 "defaultInputModes": [
  "application/json",
  "text/plain"
 ],
 "defaultOutputModes": [
  "application/json"
 ],
 "skills": [
  {
   "id": "image",
   "name": "Text to image ($0.02 USDC)",
   "description": "POST https://media.agentexchange.work/image Text-to-image on Workers AI: FLUX.1 [schnell], 1024x1024 JPEG, 1-8 steps (fallback Stable Diffusion XL base, PNG). Call it when an agent needs one picture from a text prompt in a few seconds. Body {prompt (<=1,000 chars), steps? (1-8, default 4), seed?}; returns {image_base64, mime, model, seed, steps, took_ms}; add ?format=binary for the image bytes. $0.02 USDC per image. Limits: prompt <= 1,000 characters; steps 1-8; seed 0-4294967295; one image per call. Models: @cf/black-forest-labs/flux-1-schnell, @cf/stabilityai/stable-diffusion-xl-base-1.0. Unpaid requests answer 402 (x402 v1 body, v2 in PAYMENT-REQUIRED); pay 20000 USDC atomic units to 0xc91cE6291eDC0713ec753BAFBA002506ffb2b95c on eip155:8453 and resend with X-PAYMENT. Free sample: https://media.agentexchange.work/samples/image.json. Over A2A (POST https://media.agentexchange.work/a2a, message/send with DataPart {\"skill\":\"image\",\"input\":{...}}) the unpaid call answers an input-required task carrying the same x402 terms; reply with x402.payment.payload to settle and run.",
   "tags": [
    "image",
    "text-to-image",
    "flux",
    "x402",
    "usdc"
   ],
   "examples": [
    "POST https://media.agentexchange.work/image {\"prompt\":\"a lighthouse on a basalt cliff at dawn, thick fog, film grain\",\"steps\":4,\"seed\":7}",
    "A2A message/send DataPart {\"skill\":\"image\",\"input\":{\"prompt\":\"a lighthouse on a basalt cliff at dawn, thick fog, film grain\",\"steps\":4,\"seed\":7}}"
   ],
   "inputModes": [
    "application/json"
   ],
   "outputModes": [
    "application/json",
    "image/jpeg",
    "image/png"
   ]
  },
  {
   "id": "caption",
   "name": "Image caption ($0.005 USDC)",
   "description": "POST https://media.agentexchange.work/caption Image to caption: LLaVA 1.5 7B (fallback Llama 3.2 11B Vision) describes the picture in one or two sentences. Use it to label, alt-text or index images. Body {image_url (https, <=5 MB, fetched within 8 s)} or {image_base64}, optional prompt (<=500 chars); or POST the raw image bytes with an image/* content type. Returns {caption, model, took_ms}. $0.005 USDC per image. Limits: image <= 5 MB (JPEG, PNG, WebP, GIF); image_url fetched in 8 s from a public https host; prompt <= 500 characters. Models: @cf/llava-hf/llava-1.5-7b-hf, @cf/meta/llama-3.2-11b-vision-instruct. Unpaid requests answer 402 (x402 v1 body, v2 in PAYMENT-REQUIRED); pay 5000 USDC atomic units to 0xc91cE6291eDC0713ec753BAFBA002506ffb2b95c on eip155:8453 and resend with X-PAYMENT. Free sample: https://media.agentexchange.work/samples/caption.json. Over A2A (POST https://media.agentexchange.work/a2a, message/send with DataPart {\"skill\":\"caption\",\"input\":{...}}) the unpaid call answers an input-required task carrying the same x402 terms; reply with x402.payment.payload to settle and run.",
   "tags": [
    "image",
    "caption",
    "vision",
    "x402",
    "usdc"
   ],
   "examples": [
    "POST https://media.agentexchange.work/caption {\"image_url\":\"https://upload.wikimedia.org/wikipedia/commons/3/3a/Cat03.jpg\"}",
    "A2A message/send DataPart {\"skill\":\"caption\",\"input\":{\"image_url\":\"https://upload.wikimedia.org/wikipedia/commons/3/3a/Cat03.jpg\"}}"
   ],
   "inputModes": [
    "application/json",
    "image/jpeg",
    "image/png"
   ],
   "outputModes": [
    "application/json"
   ]
  },
  {
   "id": "speech",
   "name": "Text to speech ($0.01 USDC)",
   "description": "POST https://media.agentexchange.work/speech Text to speech: MeloTTS returns MP3 audio for up to 2,000 characters (lang en, es, fr, zh, ja, ko; fallback Deepgram Aura-1, English, for texts under 600 characters). Body {text, lang?}; the response is audio/mpeg bytes with X-Model and X-Chars headers, or JSON {audio_base64, mime, model} with ?format=json. $0.01 USDC per call. Limits: text <= 2,000 characters; lang one of en, es, fr, zh, ja, ko (default en). Models: @cf/myshell-ai/melotts, @cf/deepgram/aura-1. Unpaid requests answer 402 (x402 v1 body, v2 in PAYMENT-REQUIRED); pay 10000 USDC atomic units to 0xc91cE6291eDC0713ec753BAFBA002506ffb2b95c on eip155:8453 and resend with X-PAYMENT. Free sample: https://media.agentexchange.work/samples/speech.json. Over A2A (POST https://media.agentexchange.work/a2a, message/send with DataPart {\"skill\":\"speech\",\"input\":{...}}) the unpaid call answers an input-required task carrying the same x402 terms; reply with x402.payment.payload to settle and run.",
   "tags": [
    "audio",
    "tts",
    "speech",
    "x402",
    "usdc"
   ],
   "examples": [
    "POST https://media.agentexchange.work/speech {\"text\":\"Your order has shipped and will arrive on Thursday.\",\"lang\":\"en\"}",
    "A2A message/send DataPart {\"skill\":\"speech\",\"input\":{\"text\":\"Your order has shipped and will arrive on Thursday.\",\"lang\":\"en\"}}"
   ],
   "inputModes": [
    "application/json"
   ],
   "outputModes": [
    "audio/mpeg",
    "application/json"
   ]
  },
  {
   "id": "transcribe",
   "name": "Speech to text ($0.01 USDC)",
   "description": "POST https://media.agentexchange.work/transcribe Speech to text: Whisper large-v3-turbo (fallback Whisper for files <= 3 MB) transcribes audio up to 10 MB in any common format. Body {audio_url (https, <=10 MB)} or {audio_base64 (<=4.5 MB raw because of the 6 MB body cap)} or raw audio/* bytes; optional language (ISO 639-1). Returns {text, language, duration_s, word_count, segments, vtt, model}. $0.01 USDC per file. Limits: audio <= 10 MB by URL, <= 4.5 MB inline (6 MB request cap); fetched in 8 s from a public https host. Models: @cf/openai/whisper-large-v3-turbo, @cf/openai/whisper. Unpaid requests answer 402 (x402 v1 body, v2 in PAYMENT-REQUIRED); pay 10000 USDC atomic units to 0xc91cE6291eDC0713ec753BAFBA002506ffb2b95c on eip155:8453 and resend with X-PAYMENT. Free sample: https://media.agentexchange.work/samples/transcribe.json. Over A2A (POST https://media.agentexchange.work/a2a, message/send with DataPart {\"skill\":\"transcribe\",\"input\":{...}}) the unpaid call answers an input-required task carrying the same x402 terms; reply with x402.payment.payload to settle and run.",
   "tags": [
    "audio",
    "transcription",
    "whisper",
    "x402",
    "usdc"
   ],
   "examples": [
    "POST https://media.agentexchange.work/transcribe {\"audio_url\":\"https://upload.wikimedia.org/wikipedia/commons/c/c8/Example.ogg\",\"language\":\"en\"}",
    "A2A message/send DataPart {\"skill\":\"transcribe\",\"input\":{\"audio_url\":\"https://upload.wikimedia.org/wikipedia/commons/c/c8/Example.ogg\",\"language\":\"en\"}}"
   ],
   "inputModes": [
    "application/json",
    "audio/mpeg",
    "audio/wav"
   ],
   "outputModes": [
    "application/json"
   ]
  },
  {
   "id": "translate",
   "name": "Translate ($0.002 USDC)",
   "description": "POST https://media.agentexchange.work/translate Translation: Meta M2M100 1.2B between 100 languages (fallback Llama 3.1 8B with a translation prompt). Body {text (<=5,000 chars), source_lang? (ISO 639-1, default en), target_lang (ISO 639-1)}. Returns {translation, source_lang, target_lang, model}. $0.002 USDC per call. Limits: text <= 5,000 characters; language codes ISO 639-1 (en, es, fr, de, ja, ...). Models: @cf/meta/m2m100-1.2b, @cf/meta/llama-3.1-8b-instruct-fp8. Unpaid requests answer 402 (x402 v1 body, v2 in PAYMENT-REQUIRED); pay 2000 USDC atomic units to 0xc91cE6291eDC0713ec753BAFBA002506ffb2b95c on eip155:8453 and resend with X-PAYMENT. Free sample: https://media.agentexchange.work/samples/translate.json. Over A2A (POST https://media.agentexchange.work/a2a, message/send with DataPart {\"skill\":\"translate\",\"input\":{...}}) the unpaid call answers an input-required task carrying the same x402 terms; reply with x402.payment.payload to settle and run.",
   "tags": [
    "text",
    "translation",
    "x402",
    "usdc"
   ],
   "examples": [
    "POST https://media.agentexchange.work/translate {\"text\":\"The invoice is due in thirty days.\",\"source_lang\":\"en\",\"target_lang\":\"es\"}",
    "A2A message/send DataPart {\"skill\":\"translate\",\"input\":{\"text\":\"The invoice is due in thirty days.\",\"source_lang\":\"en\",\"target_lang\":\"es\"}}"
   ],
   "inputModes": [
    "application/json"
   ],
   "outputModes": [
    "application/json"
   ]
  },
  {
   "id": "summarize",
   "name": "Summarize ($0.002 USDC)",
   "description": "POST https://media.agentexchange.work/summarize Summarization: Llama 3.1 8B instruct (fp8) with a summarization prompt; BART-large-CNN is no longer in the Workers AI catalog. Body {text (<=20,000 chars), max_words? (20-400, default 120)}. Returns {summary, max_words, input_chars, model}. $0.002 USDC per call. Limits: text 20 to 20,000 characters; max_words 20-400. Models: @cf/meta/llama-3.1-8b-instruct-fp8, @cf/meta/llama-3.2-3b-instruct. Unpaid requests answer 402 (x402 v1 body, v2 in PAYMENT-REQUIRED); pay 2000 USDC atomic units to 0xc91cE6291eDC0713ec753BAFBA002506ffb2b95c on eip155:8453 and resend with X-PAYMENT. Free sample: https://media.agentexchange.work/samples/summarize.json. Over A2A (POST https://media.agentexchange.work/a2a, message/send with DataPart {\"skill\":\"summarize\",\"input\":{...}}) the unpaid call answers an input-required task carrying the same x402 terms; reply with x402.payment.payload to settle and run.",
   "tags": [
    "text",
    "summary",
    "llm",
    "x402",
    "usdc"
   ],
   "examples": [
    "POST https://media.agentexchange.work/summarize {\"text\":\"Cloudflare Workers AI runs machine learning models on Cloudflare's global network... (up to 20,000 characters)\",\"max_words\":60}",
    "A2A message/send DataPart {\"skill\":\"summarize\",\"input\":{\"text\":\"Cloudflare Workers AI runs machine learning models on Cloudflare's global network... (up to 20,000 characters)\",\"max_words\":60}}"
   ],
   "inputModes": [
    "application/json"
   ],
   "outputModes": [
    "application/json"
   ]
  },
  {
   "id": "embed",
   "name": "Embeddings ($0.001 USDC)",
   "description": "POST https://media.agentexchange.work/embed Text embeddings: BAAI bge-m3, 1024 dimensions, multilingual, up to 32 texts of 2,000 characters per call (fallback bge-base-en-v1.5, 768 dims, English). Body {texts: [...]}. Returns {vectors, dims, count, model}. $0.001 USDC per call, not per text. Limits: 1-32 texts, each <= 2,000 characters. Models: @cf/baai/bge-m3, @cf/baai/bge-base-en-v1.5. Unpaid requests answer 402 (x402 v1 body, v2 in PAYMENT-REQUIRED); pay 1000 USDC atomic units to 0xc91cE6291eDC0713ec753BAFBA002506ffb2b95c on eip155:8453 and resend with X-PAYMENT. Free sample: https://media.agentexchange.work/samples/embed.json. Over A2A (POST https://media.agentexchange.work/a2a, message/send with DataPart {\"skill\":\"embed\",\"input\":{...}}) the unpaid call answers an input-required task carrying the same x402 terms; reply with x402.payment.payload to settle and run.",
   "tags": [
    "text",
    "embeddings",
    "vectors",
    "x402",
    "usdc"
   ],
   "examples": [
    "POST https://media.agentexchange.work/embed {\"texts\":[\"pay-per-call image generation\",\"USDC settlement on Base\"]}",
    "A2A message/send DataPart {\"skill\":\"embed\",\"input\":{\"texts\":[\"pay-per-call image generation\",\"USDC settlement on Base\"]}}"
   ],
   "inputModes": [
    "application/json"
   ],
   "outputModes": [
    "application/json"
   ]
  },
  {
   "id": "chat",
   "name": "Chat completions ($0.005 USDC)",
   "description": "POST https://media.agentexchange.work/chat OpenAI-style chat completion: Llama 3.1 8B instruct fp8 at $0.005 (model \"llama-3.1-8b\", default) or Llama 3.3 70B instruct fp8-fast at $0.02 (model \"llama-3.3-70b\" in the body or ?model=llama-3.3-70b; the 402 then asks for 20000). Body {messages (<=20, <=12,000 chars total), model?, max_tokens? (<=1024, default 256), temperature? (0-2)}. Returns {choices:[{message}], usage, model} and no stream. Limits: <= 20 messages, <= 12,000 characters in total; max_tokens <= 1024; roles system, user, assistant. Models: @cf/meta/llama-3.1-8b-instruct-fp8, @cf/meta/llama-3.3-70b-instruct-fp8-fast, @cf/meta/llama-3.2-3b-instruct. Unpaid requests answer 402 (x402 v1 body, v2 in PAYMENT-REQUIRED); pay 5000 USDC atomic units to 0xc91cE6291eDC0713ec753BAFBA002506ffb2b95c on eip155:8453 and resend with X-PAYMENT. Free sample: https://media.agentexchange.work/samples/chat.json. Over A2A (POST https://media.agentexchange.work/a2a, message/send with DataPart {\"skill\":\"chat\",\"input\":{...}}) the unpaid call answers an input-required task carrying the same x402 terms; reply with x402.payment.payload to settle and run.",
   "tags": [
    "llm",
    "chat",
    "openai-compatible",
    "x402",
    "usdc"
   ],
   "examples": [
    "POST https://media.agentexchange.work/chat {\"model\":\"llama-3.1-8b\",\"messages\":[{\"role\":\"user\",\"content\":\"Give me three names for a lighthouse-keeping robot.\"}],\"max_tokens\":120}",
    "A2A message/send DataPart {\"skill\":\"chat\",\"input\":{\"model\":\"llama-3.1-8b\",\"messages\":[{\"role\":\"user\",\"content\":\"Give me three names for a lighthouse-keeping robot.\"}],\"max_tokens\":120}}"
   ],
   "inputModes": [
    "application/json"
   ],
   "outputModes": [
    "application/json"
   ]
  },
  {
   "id": "classify",
   "name": "Classify text ($0.001 USDC)",
   "description": "POST https://media.agentexchange.work/classify Text classification: sentiment (POSITIVE/NEGATIVE with scores) from DistilBERT SST-2, or zero-shot into your own labels (2-10) with Llama 3.1 8B when {labels} is sent. Body {text (<=5,000 chars; <=2,000 for zero-shot), labels?}. Returns {label, scores|confidence, method, model}. $0.001 USDC per call. Limits: text <= 5,000 characters (<= 2,000 with labels); 2-10 labels of <= 60 characters. Models: @cf/huggingface/distilbert-sst-2-int8, @cf/meta/llama-3.1-8b-instruct-fp8. Unpaid requests answer 402 (x402 v1 body, v2 in PAYMENT-REQUIRED); pay 1000 USDC atomic units to 0xc91cE6291eDC0713ec753BAFBA002506ffb2b95c on eip155:8453 and resend with X-PAYMENT. Free sample: https://media.agentexchange.work/samples/classify.json. Over A2A (POST https://media.agentexchange.work/a2a, message/send with DataPart {\"skill\":\"classify\",\"input\":{...}}) the unpaid call answers an input-required task carrying the same x402 terms; reply with x402.payment.payload to settle and run.",
   "tags": [
    "text",
    "classification",
    "sentiment",
    "x402",
    "usdc"
   ],
   "examples": [
    "POST https://media.agentexchange.work/classify {\"text\":\"The checkout kept timing out and support never answered.\"}",
    "A2A message/send DataPart {\"skill\":\"classify\",\"input\":{\"text\":\"The checkout kept timing out and support never answered.\"}}"
   ],
   "inputModes": [
    "application/json"
   ],
   "outputModes": [
    "application/json"
   ]
  },
  {
   "id": "ocr",
   "name": "Read text in an image ($0.005 USDC)",
   "description": "POST https://media.agentexchange.work/ocr Image to text: LLaVA 1.5 7B (fallback Llama 3.2 11B Vision) reads the text visible in an image. It is a vision-language model, not a dedicated OCR engine, so expect mistakes on dense pages or tiny print; good for signs, labels, screenshots and short documents. Body {image_url (<=5 MB)} or {image_base64} or raw image/* bytes. Returns {text, method, model}. $0.005 USDC per image. Limits: image <= 5 MB; image_url fetched in 8 s from a public https host. Models: @cf/llava-hf/llava-1.5-7b-hf, @cf/meta/llama-3.2-11b-vision-instruct. Unpaid requests answer 402 (x402 v1 body, v2 in PAYMENT-REQUIRED); pay 5000 USDC atomic units to 0xc91cE6291eDC0713ec753BAFBA002506ffb2b95c on eip155:8453 and resend with X-PAYMENT. Free sample: https://media.agentexchange.work/samples/ocr.json. Over A2A (POST https://media.agentexchange.work/a2a, message/send with DataPart {\"skill\":\"ocr\",\"input\":{...}}) the unpaid call answers an input-required task carrying the same x402 terms; reply with x402.payment.payload to settle and run.",
   "tags": [
    "image",
    "ocr",
    "vision",
    "x402",
    "usdc"
   ],
   "examples": [
    "POST https://media.agentexchange.work/ocr {\"image_url\":\"https://upload.wikimedia.org/wikipedia/commons/2/25/Stop_sign_MUTCD.svg.png\"}",
    "A2A message/send DataPart {\"skill\":\"ocr\",\"input\":{\"image_url\":\"https://upload.wikimedia.org/wikipedia/commons/2/25/Stop_sign_MUTCD.svg.png\"}}"
   ],
   "inputModes": [
    "application/json",
    "image/jpeg",
    "image/png"
   ],
   "outputModes": [
    "application/json"
   ]
  },
  {
   "id": "detect-language",
   "name": "Detect language ($0.001 USDC)",
   "description": "POST https://media.agentexchange.work/detect-language Language detection by a heuristic (Unicode script ranges plus stopword frequencies for 20 Latin-script languages); no model runs, sub-millisecond, reliable from about 20 characters of prose. Body {text (<=20,000 chars)}. Returns {language (ISO 639-1 or 'und'), name, script, confidence, method}. $0.001 USDC per call. Limits: text <= 20,000 characters; 'und' when nothing matches. Models: none (heuristic). Unpaid requests answer 402 (x402 v1 body, v2 in PAYMENT-REQUIRED); pay 1000 USDC atomic units to 0xc91cE6291eDC0713ec753BAFBA002506ffb2b95c on eip155:8453 and resend with X-PAYMENT. Free sample: https://media.agentexchange.work/samples/detect-language.json. Over A2A (POST https://media.agentexchange.work/a2a, message/send with DataPart {\"skill\":\"detect-language\",\"input\":{...}}) the unpaid call answers an input-required task carrying the same x402 terms; reply with x402.payment.payload to settle and run.",
   "tags": [
    "text",
    "language",
    "detection",
    "x402",
    "usdc"
   ],
   "examples": [
    "POST https://media.agentexchange.work/detect-language {\"text\":\"La factura vence en treinta días y el pago se realiza por transferencia.\"}",
    "A2A message/send DataPart {\"skill\":\"detect-language\",\"input\":{\"text\":\"La factura vence en treinta días y el pago se realiza por transferencia.\"}}"
   ],
   "inputModes": [
    "application/json"
   ],
   "outputModes": [
    "application/json"
   ]
  },
  {
   "id": "batch",
   "name": "Batch of 100 ($1.00 USDC)",
   "description": "POST https://media.agentexchange.work/batch One request, up to 100 items across embed, translate, summarize and classify with the same limits as the single routes (total text <= 500,000 characters); items run 4 at a time and each returns its own result or error. Body {items: [{op: 'embed'|'translate'|'summarize'|'classify', ...fields of that route}]}. Returns {results, count, ok_count}. $1.00 USDC per batch whatever the item count; a batch whose items all fail can be replayed free within 10 minutes. Limits: 1-100 items; ops embed (<=32 texts of 2,000 chars), translate (<=5,000 chars), summarize (<=20,000 chars), classify (<=5,000 chars); total text <= 500,000 characters; a single bad item fails the whole batch before payment. Models: @cf/baai/bge-m3, @cf/meta/m2m100-1.2b, @cf/meta/llama-3.1-8b-instruct-fp8, @cf/huggingface/distilbert-sst-2-int8. Unpaid requests answer 402 (x402 v1 body, v2 in PAYMENT-REQUIRED); pay 1000000 USDC atomic units to 0xc91cE6291eDC0713ec753BAFBA002506ffb2b95c on eip155:8453 and resend with X-PAYMENT. Free sample: https://media.agentexchange.work/samples/batch.json. Over A2A (POST https://media.agentexchange.work/a2a, message/send with DataPart {\"skill\":\"batch\",\"input\":{...}}) the unpaid call answers an input-required task carrying the same x402 terms; reply with x402.payment.payload to settle and run.",
   "tags": [
    "batch",
    "embeddings",
    "translation",
    "x402",
    "usdc"
   ],
   "examples": [
    "POST https://media.agentexchange.work/batch {\"items\":[{\"op\":\"translate\",\"text\":\"Where is the station?\",\"target_lang\":\"de\"},{\"op\":\"classify\",\"text\":\"Loved it, fast and simple.\"},{\"op\":\"embed\",\"texts\":[\"one\",\"two\"]}]}",
    "A2A message/send DataPart {\"skill\":\"batch\",\"input\":{\"items\":[{\"op\":\"translate\",\"text\":\"Where is the station?\",\"target_lang\":\"de\"},{\"op\":\"classify\",\"text\":\"Loved it, fast and simple.\"},{\"op\":\"embed\",\"texts\":[\"one\",\"two\"]}]}}"
   ],
   "inputModes": [
    "application/json"
   ],
   "outputModes": [
    "application/json"
   ]
  },
  {
   "id": "image-set",
   "name": "Image set of 20 ($5.00 USDC)",
   "description": "POST https://media.agentexchange.work/image-set Twenty 1024x1024 JPEGs from a list of 1-20 prompts (prompts are cycled to fill 20 slots), FLUX.1 [schnell] at 1-4 steps each: schnell-grade quality, no upscaling, no SDXL fallback, seeds seed+i. Body {prompts: [...] (<=1,000 chars each), steps? (1-4, default 4), seed?}. Returns {images: [{index, prompt_index, seed, image_base64, mime}], ok_count, model}. $5.00 USDC per set; when 10 or more slots fail the call answers 502 and can be replayed free within 10 minutes. Limits: 1-20 prompts of <= 1,000 characters; steps 1-4; always 20 images (prompts cycle); response about 2-4 MB of base64. Models: @cf/black-forest-labs/flux-1-schnell. Unpaid requests answer 402 (x402 v1 body, v2 in PAYMENT-REQUIRED); pay 5000000 USDC atomic units to 0xc91cE6291eDC0713ec753BAFBA002506ffb2b95c on eip155:8453 and resend with X-PAYMENT. Free sample: https://media.agentexchange.work/samples/image-set.json. Over A2A (POST https://media.agentexchange.work/a2a, message/send with DataPart {\"skill\":\"image-set\",\"input\":{...}}) the unpaid call answers an input-required task carrying the same x402 terms; reply with x402.payment.payload to settle and run.",
   "tags": [
    "image",
    "batch",
    "flux",
    "x402",
    "usdc"
   ],
   "examples": [
    "POST https://media.agentexchange.work/image-set {\"prompts\":[\"a red lighthouse at dawn, fog\",\"a blue lighthouse at noon, clear sky\",\"a white lighthouse at dusk, storm\"],\"steps\":4,\"seed\":100}",
    "A2A message/send DataPart {\"skill\":\"image-set\",\"input\":{\"prompts\":[\"a red lighthouse at dawn, fog\",\"a blue lighthouse at noon, clear sky\",\"a white lighthouse at dusk, storm\"],\"steps\":4,\"seed\":100}}"
   ],
   "inputModes": [
    "application/json"
   ],
   "outputModes": [
    "application/json"
   ]
  },
  {
   "id": "samples",
   "name": "Free samples",
   "description": "GET https://media.agentexchange.work/samples/<route>.json returns one example request and response per paid route; GET https://media.agentexchange.work/live.json returns per-route counters. Over A2A: skill \"samples\", input {route?}.",
   "tags": [
    "free",
    "samples"
   ],
   "examples": [
    "GET https://media.agentexchange.work/samples/image.json",
    "A2A message/send DataPart {\"skill\":\"samples\",\"input\":{\"route\":\"image\"}}"
   ],
   "inputModes": [
    "text/plain",
    "application/json"
   ],
   "outputModes": [
    "application/json"
   ]
  },
  {
   "id": "pricing",
   "name": "Price table (free)",
   "description": "The price of every route in USDC and atomic units, the Workers AI model ids, limits and what Workers AI charges us (the JSON of GET https://media.agentexchange.work/pricing.json). Free; over A2A skill \"pricing\" completes at once.",
   "tags": [
    "free",
    "pricing"
   ],
   "examples": [
    "GET https://media.agentexchange.work/pricing.json",
    "A2A message/send DataPart {\"skill\":\"pricing\"}"
   ],
   "inputModes": [
    "text/plain",
    "application/json"
   ],
   "outputModes": [
    "application/json"
   ]
  }
 ],
 "x402": {
  "payTo": "0xc91cE6291eDC0713ec753BAFBA002506ffb2b95c",
  "network": "eip155:8453",
  "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
  "facilitator": "https://facilitator.payai.network",
  "manifest": "https://media.agentexchange.work/.well-known/x402",
  "replay": "a failed call (502 model_failed) replays once with the same X-PAYMENT within 10 minutes"
 }
}