PixVerse V4 Effects
Integrate
pixverse/v4/effects
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.com/v1/run/pixverse/v4/effects?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"effect": "Kiss Me AI",
"image": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}'
# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.com/v1/requests/REQUEST_ID?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY"
const API = "https://api.doitong.com/v1";
const headers = {
"Authorization": "Bearer " + process.env.DOITONG_API_KEY,
"Content-Type": "application/json",
};
// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/pixverse/v4/effects?wait=20", {
method: "POST",
headers,
body: JSON.stringify({
"effect": "Kiss Me AI",
"image": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);
// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
import os
import requests
API = "https://api.doitong.com/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}
payload = {
"effect": "Kiss Me AI",
"image": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
}
# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/pixverse/v4/effects", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])
# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
# 1. Connect once (Claude Code; Cursor, VS Code, Claude Desktop: https://doitong.com/en-US/developers/docs/mcp)
claude mcp add --transport http doitong-models https://api.doitong.com/v1/mcp \
--header "Authorization: Bearer $DOITONG_API_KEY"
# 2. Your agent calls the "run" tool with:
{
"model_id": "pixverse/v4/effects",
"input": {
"effect": "Kiss Me AI",
"image": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}
}
Call the PixVerse V4 Effects model (pixverse/v4/effects) through the Doitong API. Docs for agents: https://doitong.com/en-US/developers/models/pixverse/v4/effects.md
POST https://api.doitong.com/v1/run/pixverse/v4/effects?wait=20
Authorization: Bearer $DOITONG_API_KEY
Content-Type: application/json
{
"effect": "Kiss Me AI",
"image": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}
If the response status is "queued" or "running", poll GET https://api.doitong.com/v1/requests/REQUEST_ID?wait=20 until it is "succeeded"; the files are in outputs[].url. POST https://api.doitong.com/v1/quote/pixverse/v4/effects with the same body returns the exact price before the run.
Files like the example: $0.20 200 API credits your files are measured before the run Run it on this page
Your new API key. It is shown only now and is already in the code and in the API key field below. Keep it secret: never put it in code that runs in a browser.
Your first result goes here
Build a request below and run it with your API key. Outputs are copied to our storage, kept forever or 7 days for free.
Build a request
Controls are generated from the model schema. The code and the price update as you change them.
/run/pixverse/v4/effects?wait=20
quote → $0.20
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.com/v1/run/pixverse/v4/effects?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"effect": "Kiss Me AI",
"image": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}'
# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.com/v1/requests/REQUEST_ID?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY"
const API = "https://api.doitong.com/v1";
const headers = {
"Authorization": "Bearer " + process.env.DOITONG_API_KEY,
"Content-Type": "application/json",
};
// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/pixverse/v4/effects?wait=20", {
method: "POST",
headers,
body: JSON.stringify({
"effect": "Kiss Me AI",
"image": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);
// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
import os
import requests
API = "https://api.doitong.com/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}
payload = {
"effect": "Kiss Me AI",
"image": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
}
# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/pixverse/v4/effects", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])
# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "run",
"arguments": {
"model_id": "pixverse/v4/effects",
"input": {
"effect": "Kiss Me AI",
"image": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
},
"wait_seconds": 20
}
}
}
Run this request
Your key stays in this browser: it is sent only to the Doitong API and saved (localStorage) only if you tick Remember. Get an API key
About PixVerse V4 Effects
Pick one `effect` from 154 options, such as Kiss, Muscle Surge, Hug or Holy Wings, and supply an `image_url` as the first frame. Duration is 5 or 8 seconds and resolution is 360p, 540p, 720p or 1080p. It takes no prompt, though a `negative_prompt` can be set.
Parameters
Send either the canonical name or the native name, not both. Canonical names
effectrequired
+138 more
Punch FaceCreepy Devil SmileThunder GodEye Zoom ChallengeWho's Arrested?Baby ArrivedWerewolf RageBald SwipeBOOM DROPHuge CutieLiquid MetalSharksnap!Dust Me Away3D Figurine FactorBikini UpMy GirlfriendsMy BoyfriendsSubject 3 FeverEarth ZoomPole DanceVroom DanceGhostFace TerrorDragon EvokerSkeletal BaeSummoning succubusHalloween Voodoo Doll3D Naked-Eye ADPackage ExplosionDishes ServedOcean adSupermarket ADTree dollCome Feel My AbsThe Bicep FlexLondon Elite VibeFlora Nymph GownChristmas CostumeIt's SnowyReindeer CruiserSnow Globe MakerPet Christmas OutfitAdopt a Polar PalCat Christmas BoxStarlight Gift BoxXmas PosterPet Christmas TreeCity Santa HatStocking SweetieChristmas NightXmas Front Page KarmaGrinch's Xmas HijackGiant ProductTruck Fashion ShootBeach ADShoal SurroundMechanical AssemblyLighting ADBillboard ADProduct close-upParachute DeliveryDreamlike CloudMacaron MachinePoster ADTruck ADGraffiti AD3D Figurine FactoryThe Exclusive First ClassArt Zoom ChallengeI QuitHitchcock Dolly ZoomSmell the LensI believe I can flyStrikout DanceCourtside CamPit Crew MomentK-Baseball SprintToddler DoodleIdol EndingApex DanceOmniHero ForgePalm DecodeThe Age RippleMy Future Is LimitlessKnee SlideEpic Goal SaveSideline Ball BoyCup CelebrationVictory RoarVuvuzela FanWorld Champion LiftTunnel to CaptainLiquid Soccer MorphJump Into Crowd 2Golden Pitch CrasherStadium Fan CamBroadcast Moto GPThe Grotesque ClayRookie Star CardThe Final HugSharp Post-Match CommentStreet MaverickPitch LegendOne Step At A TimeBirthday MirrorSuperstar LobbyFinal Battle RoomTop of the WorldMini Me UnboxedWonderPOP SurpriseWhite ChicksKiss meWhat a DayThe Last Leap at SunsetTiny Sticker Chef ChaosMini Squeeze ToyTearful GunmanStreet Fashion CaricatureMini Me MakeoverStreet Art AwakeningHug TogetherACAI dance DuetPUBG Winner Hit!Blocky Mini-MeCheat Day BustedMiniSocial RechargeMy Little Perler CharmWhere did this cobweb come from?Holy Beast Summoning TechniqueIT'S THE FIRST OF THE MONTHPet EditorialThree lifetime bondPixel WorldMint in BoxHands up, HandFlora Nymph GoSomber EmbraceBeam me upSuit Swaggerimage_urlrequired
image
resolutionoptional
durationoptional
negative_promptoptional
enable_safety_checkeroptional
File parameters take a public https:// URL, a data: URI up to 10 MB, or the file_url of an upload. Files
Output
{
"id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
"object": "request",
"model": "pixverse/v4/effects",
"status": "succeeded",
"created_at": "2026-10-20T12:00:00Z",
"started_at": "2026-10-20T12:00:02Z",
"completed_at": "2026-10-20T12:00:09Z",
"queue_position": null,
"cost": {
"credits": 200,
"usd": "0.20",
"charged": 200,
"refunded": 0
},
"input": {
"effect": "Kiss Me AI",
"image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
},
"output": {
"video": {
"url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
"content_type": "video/mp4",
"file_name": "0-output.mp4",
"file_size": 1843200
}
},
"outputs": [
{
"type": "video",
"url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.mp4",
"content_type": "video/mp4",
"file_size": 1843200,
"width": 1280,
"height": 720,
"duration": 5,
"stored": true
}
],
"error": null,
"metrics": {
"inference_seconds": 6.8
},
"urls": {
"self": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
"cancel": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
}
}
Fields of output
- video
- object {url, content_type, file_name, file_size}Video produced by the model.
Other PixVerse variants
More models: Image to Video
For AI agents: this page as Markdown is at https://doitong.com/en-US/developers/models/pixverse/v4/effects.md. All models and guides: https://doitong.com/developers/llms.txt