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 viemimport { 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
POST · application/jsonPaid endpoints
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 USDC2predictionUrl04
NSFW models · USDC per requestUncensored model catalog
ModelGenerationEndpointPrice
Flux Schnell · NSFW
black-forest-labs/flux-schnelltext to image/api/generate/image$0.05 USDCFlux Dev · NSFW
black-forest-labs/flux-devtext to image/api/generate/image$0.05 USDCWan 2.6 Image · NSFW
alibaba/wan-2.6/text-to-imagetext to image/api/generate/image$0.05 USDCWan 2.7 Image · NSFW
alibaba/wan-2.7/text-to-imagetext to image/api/generate/image$0.05 USDCWan 2.2 Turbo Spicy I2V · NSFW
atlascloud/wan-2.2-turbo-spicy/image-to-videoimage to video/api/generate/video-fast$0.15 USDCWan 2.2 Turbo Spicy Infinite I2V · NSFW
atlascloud/wan-2.2-turbo-spicy/infinite-image-to-videoimage to video/api/generate/video-fast$0.15 USDCWan 2.2 Spicy I2V · NSFW
alibaba/wan-2.2-spicy/image-to-videoimage to video/api/generate/video-fast$0.15 USDCSeedance v1.5 Pro Spicy I2V · NSFW
bytedance/seedance-v1.5-pro/image-to-video-spicyimage to video/api/generate/video-pro$0.60 USDCWan 2.6 Spicy I2V · NSFW
atlascloud/wan-2.6-spicy/image-to-videoimage to video/api/generate/video-pro$0.60 USDCWan 2.7 Spicy I2V · NSFW
atlascloud/wan-2.7-spicy/image-to-videoimage to video/api/generate/video-ultra$1.20 USDCWan 2.7 Video Edit · NSFW
alibaba/wan-2.7/video-editvideo to video/api/generate/video-ultra$1.20 USDC05
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