x402 · USDC on Base or Solana · live

Text and image to video, paid per call

Post a prompt, settle the 402 in USDC, and the video comes back in the same response. Eight models, 4 to 15 seconds, landscape or vertical.

POST /api/x402/video · from $0.42

Bought through this endpoint by a wallet, with the prompt in the example below. The transaction is on the x402 page.POST /api/x402/video

Try it

1 · Ask for the price (free)
curl -i -X POST https://www.trezalabs.com/api/x402/video \
  -H 'Content-Type: application/json' \
  -d '{"prompt":"a manta ray gliding over a sunlit coral reef, slow cinematic drift","seconds":5,"aspectRatio":"16:9","model":"minimax-h3"}'

Without a payment this answers 402 Payment Required, with the price for exactly this body, the USDC token and the address to pay in the PAYMENT-REQUIRED header. Nothing is charged.

2 · Pay and collect, with Coinbase's awal wallet
npx awal@latest x402 pay https://www.trezalabs.com/api/x402/video \
  -X POST \
  -d '{"prompt":"a manta ray gliding over a sunlit coral reef, slow cinematic drift","seconds":5,"aspectRatio":"16:9","model":"minimax-h3"}' \
  --max-amount 420000

awal reads the 402, pays it from your agentic wallet in USDC on Base, repeats the request and prints the response. --max-amount caps the payment in USDC units of a millionth: 420,000 is $0.42, this body's price. Any other x402 client works the same way.

Or just read what it asks for
npx awal@latest x402 details https://www.trezalabs.com/api/x402/video

Price

Quoted per request in the 402, so read it from there rather than hard-coding it. A render that fails gets a free retry.

Limits

  • prompt: up to 2,000 characters.
  • Returns an MP4 URL in the JSON response, with a statusUrl you can GET again for free.
  • 30 requests per hour per IP address, before any payment is looked at.
  • Paid in USDC on Base or Solana. Fields the endpoint does not read are refused before payment, not charged for and ignored.
  • 4 to 15 seconds, depending on the model; 16:9 or 9:16.
  • image_url: a public https JPEG, PNG or WebP up to 10 MB, cropped to your aspect ratio. Every model but the default takes one.
  • The paid POST waits about as long as the model usually takes, then hands you a statusUrl if it is still rendering. Prefer: wait=N sets the wait; async: true answers at once.

A bare GET /api/x402/video answers with the whole menu as JSON.

What a paid call returns
{
  "runId": "2026-09-23T18:04:11.000Z#1a2b3c4d",
  "status": "success",
  "video": "https://www.trezalabs.com/api/media/generated/x402_video/1a2b3c4d.mp4?s=...&c=...",
  "statusUrl": "https://www.trezalabs.com/api/x402/video?runId=...&token=...",
  "paidUsd": 0.42,
  "model": "minimax-h3",
  "seconds": 5,
  "aspectRatio": "16:9",
  "transaction": "0x..."
}