UNRESTRICTED MEDIA API · X402

Unrestricted image and video generation through one API.

No filters, API key, or prepaid balance. Each request settles exact USDC through x402.

No filters Image + video No API key x402 exact USDC
1GET /api/modelsPick a model and route
2POST generationReceive HTTP 402
3Sign and retryPay exact USDC
4Poll predictionRead output URL
01

Run a paid request

npm install @x402/core @x402/evm @x402/fetch viem
import { x402Client } from "@x402/core/client";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { wrapFetchWithPayment } from "@x402/fetch";
import { privateKeyToAccount } from "viem/accounts";

const account = privateKeyToAccount(
  process.env.EVM_PRIVATE_KEY as `0x${string}`
);
const client = new x402Client()
  .register("eip155:*", new ExactEvmScheme(account));
const paidFetch = wrapFetchWithPayment(fetch, client);

const response = await paidFetch("https://www.studio-x.cc/api/generate/image", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    model: "black-forest-labs/flux-schnell",
    prompt: "Editorial studio portrait, precise lighting",
    params: {}
  })
});

const job = await response.json();

while (true) {
  const result = await fetch("https://www.studio-x.cc" + job.predictionUrl).then(r => r.json());
  if (["completed", "succeeded"].includes(result.data?.status)) {
    console.log(result.data.outputs[0]);
    break;
  }
  if (result.data?.status === "failed") throw new Error(result.data.error);
  await new Promise(resolve => setTimeout(resolve, 3000));
}
03

Paid endpoints

POST · application/json
RoutePriceModelsReturns
/api/generate/image$0.05 USDC4predictionUrl
/api/generate/video-fast$0.15 USDC3predictionUrl
/api/generate/video-pro$0.60 USDC2predictionUrl
/api/generate/video-ultra$1.20 USDC2predictionUrl
04

Uncensored model catalog

NSFW models · USDC per request
ModelGenerationEndpointPrice
Flux Schnell · NSFWblack-forest-labs/flux-schnelltext to image/api/generate/image$0.05 USDC
Flux Dev · NSFWblack-forest-labs/flux-devtext to image/api/generate/image$0.05 USDC
Wan 2.6 Image · NSFWalibaba/wan-2.6/text-to-imagetext to image/api/generate/image$0.05 USDC
Wan 2.7 Image · NSFWalibaba/wan-2.7/text-to-imagetext to image/api/generate/image$0.05 USDC
Wan 2.2 Turbo Spicy I2V · NSFWatlascloud/wan-2.2-turbo-spicy/image-to-videoimage to video/api/generate/video-fast$0.15 USDC
Wan 2.2 Turbo Spicy Infinite I2V · NSFWatlascloud/wan-2.2-turbo-spicy/infinite-image-to-videoimage to video/api/generate/video-fast$0.15 USDC
Wan 2.2 Spicy I2V · NSFWalibaba/wan-2.2-spicy/image-to-videoimage to video/api/generate/video-fast$0.15 USDC
Seedance v1.5 Pro Spicy I2V · NSFWbytedance/seedance-v1.5-pro/image-to-video-spicyimage to video/api/generate/video-pro$0.60 USDC
Wan 2.6 Spicy I2V · NSFWatlascloud/wan-2.6-spicy/image-to-videoimage to video/api/generate/video-pro$0.60 USDC
Wan 2.7 Spicy I2V · NSFWatlascloud/wan-2.7-spicy/image-to-videoimage to video/api/generate/video-ultra$1.20 USDC
Wan 2.7 Video Edit · NSFWalibaba/wan-2.7/video-editvideo to video/api/generate/video-ultra$1.20 USDC
05

Request contract

Use inputUrl for image-to-video and video-to-video routes. Text-to-image only needs a prompt.

{
  "model": "string",
  "prompt": "string",
  "inputUrl": "https://...", // optional by model
  "params": {
    "duration": 5,
    "resolution": "720p"
  }
}
First response may be HTTP 402 Retry carries PAYMENT-SIGNATURE Success returns a pollable prediction URL