API reference · Boson AI · Modal overflow

wan-s2v video server — 74 endpoints, live examples

← Back to plan & tracker

wan-s2v video server — API reference (live examples)

Base URL: https://bosonai--wan-web-stream-serve.modal.run

All examples below are real curl calls captured against the live deployment — requests and responses are recorded verbatim (responses truncated for readability). {SESSION_ID} is substituted with a real session created during capture.

80 operations across 74 paths.

Health & server info

POST /get_weights_checksum

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/get_weights_checksum' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 200

{"transformer":"3ea83d1196c3ee35e2136d9733510e999d1c0f95b6f6204d2336c1be00f19fcd"}

GET /health

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/health'

HTTP 200

{"status":"ok"}

GET /health_generate

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/health_generate'

HTTP 200

{"status":"ok"}

GET /model_info

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/model_info'

HTTP 200

{"model_path":"/opt/wan-model/sglang_scaffold","is_generation":true,"model_type":"diffusion","architectures":["WanS2VCausalStreamingPipeline"],"has_image_understanding":false,"has_audio_understanding":false,"task_type":"T2V","is_image_gen":false}

GET /models

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/models'

HTTP 200

{"model_path":"/opt/wan-model/sglang_scaffold","num_gpus":1,"task_type":"T2V","dit_precision":"bf16","vae_precision":"fp32","pipeline_name":"WanS2VCausalStreamingPipeline","pipeline_class":"WanS2VCausalStreamingPipeline"}

GET /server_info

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/server_info'

HTTP 200

{"model_path":"/opt/wan-model/sglang_scaffold","served_model_name":"/opt/wan-model/sglang_scaffold","tp_size":1,"dp_size":1,"version":"0.5.10.post1"}

POST /update_weights_from_disk

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/update_weights_from_disk' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 400

{"success":false,"message":"model_path is required"}

POST /vertex_generate

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/vertex_generate' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 422

{"detail":[{"type":"missing","loc":["body","instances"],"msg":"Field required","input":{}}]}

Models & LoRAs (/v1)

GET /v1/list_loras

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/list_loras'

HTTP 200

{"loaded_adapters":[],"active":{}}

POST /v1/merge_lora_weights

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/v1/merge_lora_weights' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 200

{"status":"ok","message":"Successfully merged LoRA weights (target: all, strength: 1.0)"}

GET /v1/model_info

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/model_info'

HTTP 200

{"model_path":"/opt/wan-model/sglang_scaffold"}

GET /v1/models

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/models'

HTTP 200

{"object":"list","data":[{"id":"/opt/wan-model/sglang_scaffold","object":"model","created":1783032593,"owned_by":"sglang","root":"/opt/wan-model/sglang_scaffold","parent":null,"max_model_len":null,"num_gpus":1,"task_type":"T2V","dit_precision":"bf16","vae_precision":"fp32","pipeline_name":"WanS2VCausalStreamingPipeline","pipeline_class":"WanS2VCausalStreamingPipeline"}]}

GET /v1/models/{model}

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/models/wan'

HTTP 404

{"error":{"message":"The model 'wan' does not exist","type":"invalid_request_error","param":"model","code":"model_not_found"}}

POST /v1/set_lora

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/v1/set_lora' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 422

{"detail":[{"type":"missing","loc":["body","lora_nickname"],"msg":"Field required","input":null}]}

POST /v1/unmerge_lora_weights

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/v1/unmerge_lora_weights' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 200

{"status":"ok","message":"Successfully unmerged LoRA weights (target: all)"}

Video — OpenAI/Sora style (/v1/videos)

POST /v1/videos

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/v1/videos' \
  -F 'prompt=a person speaking'

HTTP 200

{"id":"e99eecb2-11e2-460d-9c48-6fedefd777e8","object":"video","model":"sora-2","status":"queued","progress":0,"created_at":1783032597,"size":"480x480","seconds":"4","quality":"standard","url":null,"remixed_from_video_id":null,"completed_at":null,"expires_at":null,"error":null,"file_path":"/workspace/outputs/e99eecb2-11e2-460d-9c48-6fedefd777e8.mp4","peak_memory_mb":null,"inference_time_s":null}

GET /v1/videos

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/videos'

HTTP 200

{"data":[{"id":"e99eecb2-11e2-460d-9c48-6fedefd777e8","object":"video","model":"sora-2","status":"failed","progress":0,"created_at":1783032597,"size":"480x480","seconds":"4","quality":"standard","url":null,"remixed_from_video_id":null,"completed_at":null,"expires_at":null,"error":{"message":"Model generation returned no output. Error from scheduler: Error executing request e99eecb2-11e2-460d-9c48-6fedefd777e8: wan_s2v_session_id is required for step requests."},"file_path":"/workspace/outputs/e99eecb2-11e2-460d-9c48-6fedefd777e8.mp4","peak_memory_mb":null,"inference_time_s":null}],"object":"li

GET /v1/videos/{video_id}

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/videos/VIDEO_ID'

HTTP 404

{"detail":"Video not found"}

DELETE /v1/videos/{video_id}

curl -X DELETE 'https://bosonai--wan-web-stream-serve.modal.run/v1/videos/VIDEO_ID'

HTTP 404

{"detail":"Video not found"}

GET /v1/videos/{video_id}/content

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/videos/VIDEO_ID/content'

HTTP 404

{"detail":"Video not found"}

Images (/v1/images)

POST /v1/images/edits

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/v1/images/edits' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 422

{"detail":[{"type":"missing","loc":["body","prompt"],"msg":"Field required","input":null}]}

POST /v1/images/generations

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/v1/images/generations' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 422

{"detail":[{"type":"missing","loc":["body","prompt"],"msg":"Field required","input":{}}]}

GET /v1/images/{image_id}/content

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/images/IMAGE_ID/content'

HTTP 404

{"detail":"Image not found"}

Meshes (/v1/meshes)

POST /v1/meshes

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/v1/meshes' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 422

{"detail":"An input image is required for mesh generation"}

GET /v1/meshes

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/meshes'

HTTP 200

{"data":[],"object":"list"}

GET /v1/meshes/{mesh_id}

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/meshes/MESH_ID'

HTTP 404

{"detail":"Mesh not found"}

DELETE /v1/meshes/{mesh_id}

curl -X DELETE 'https://bosonai--wan-web-stream-serve.modal.run/v1/meshes/MESH_ID'

HTTP 404

{"detail":"Mesh not found"}

GET /v1/meshes/{mesh_id}/content

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/v1/meshes/MESH_ID/content'

HTTP 404

{"detail":"Mesh not found"}

Avatar video — offline (audio→mp4)

POST /avatar/video/sessions

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/sessions' \
  -H 'Content-Type: application/json' \
  -d '{"prompt": "", "ref_image_path": "/workspace/data/examples/wan/Animate-0.jpeg", "width": 480, "height": 480, "fps": 16, "sample_rate": 16000}'

HTTP 200

{"session_id":"off-18ebae8ec504","state":"queued","queue_position":3,"block_duration_ms":750,"error":null,"scheduler_phase":"queued","audio_scheduler_phase":"idle","video_scheduler_phase":"idle","scheduler_detail":{"start_policy":"lookahead","wav2vec_window_ms":8000,"block_duration_ms":750,"audio_received_ms":0,"audio_final":false},"scheduler_history_tail":[{"t_ms":0,"phase":"queued","audio_phase":"idle","video_phase":"idle","detail":{"start_policy":"lookahead","wav2vec_window_ms":8000,"block_duration_ms":750,"audio_received_ms":0,"audio_final":false}}]}

GET /avatar/video/sessions/{session_id}

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/sessions/off-f9450ee61169'

HTTP 200

{"session_id":"off-f9450ee61169","state":"queued","queue_position":2,"audio_received_ms":0,"audio_final":false,"generated_blocks":0,"playable_blocks":0,"next_block_start_ms":0,"block_duration_ms":750,"error":null,"scheduler_phase":"queued","audio_scheduler_phase":"idle","video_scheduler_phase":"idle","scheduler_detail":{"start_policy":"lookahead","wav2vec_window_ms":8000,"block_duration_ms":750,"audio_received_ms":0,"audio_final":false},"scheduler_history_tail":[{"t_ms":0,"phase":"queued","audio_phase":"idle","video_phase":"idle","detail":{"start_policy":"lookahead","wav2vec_window_ms":8000,"b

DELETE /avatar/video/sessions/{session_id}

curl -X DELETE 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/sessions/off-f9450ee61169'

HTTP 200

{"session_id":"off-f9450ee61169","state":"cancelled","queue_position":2,"audio_received_ms":0,"audio_final":true,"generated_blocks":0,"playable_blocks":0,"next_block_start_ms":0,"block_duration_ms":750,"error":null,"scheduler_phase":"cancelled","audio_scheduler_phase":"cancelled","video_scheduler_phase":"cancelled","scheduler_detail":{"start_policy":"lookahead","wav2vec_window_ms":8000,"block_duration_ms":750,"audio_received_ms":0,"audio_final":false},"scheduler_history_tail":[{"t_ms":0,"phase":"queued","audio_phase":"idle","video_phase":"idle","detail":{"start_policy":"lookahead","wav2vec_win

POST /avatar/video/sessions/{session_id}/audio

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/sessions/off-f9450ee61169/audio' \
  -H 'Content-Type: application/json' \
  -d '{"seq": 0, "sample_rate": 16000, "pcm_f32_b64": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}'

HTTP 400

{"detail":"cannot append audio after final"}

POST /avatar/video/sessions/{session_id}/audio/end

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/sessions/off-f9450ee61169/audio/end' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 200

{"session_id":"off-f9450ee61169","state":"cancelled","queue_position":2,"audio_received_ms":0,"audio_final":true,"generated_blocks":0,"playable_blocks":0,"next_block_start_ms":0,"block_duration_ms":750,"error":null,"scheduler_phase":"cancelled","audio_scheduler_phase":"audio_final","video_scheduler_phase":"cancelled","scheduler_detail":{"start_policy":"lookahead","wav2vec_window_ms":8000,"block_duration_ms":750,"audio_received_ms":0,"audio_final":true},"scheduler_history_tail":[{"t_ms":0,"phase":"queued","audio_phase":"idle","video_phase":"idle","detail":{"start_policy":"lookahead","wav2vec_wi

Avatar video — fMP4 streaming

GET /avatar/video/stream/replica/status

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/replica/status'

HTTP 200

{"ok":true,"replica_ready":true,"accepts_new_session":true,"worker":{"active_session_id":null,"busy":false,"queue_depth":0,"session_count":0,"worker_status_available":false},"stream_session_count":4,"stream_state_counts":{"active":4},"stream_sessions":[{"session_id":"stream-2f9d4b286e","engine_session_id":"stream-2f9d4b286e","state":"active","closed":false,"fragment_count":0,"total_bytes":0,"profile_enabled":false,"profile_records":0,"error":null},{"session_id":"stream-64f91e800f","engine_session_id":"stream-64f91e800f","state":"active","closed":false,"fragment_count":0,"total_bytes":0,"profil

POST /avatar/video/stream/sessions

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/sessions' \
  -H 'Content-Type: application/json' \
  -d '{"prompt": "", "ref_image_path": "/workspace/data/examples/wan/Animate-0.jpeg", "width": 480, "height": 480, "fps": 16, "sample_rate": 16000}'

HTTP 200

{"session_id":"stream-2ee87e3460","state":"active","block_duration_ms":750,"audio_sample_rate":16000,"init_url":"/avatar/video/stream/sessions/stream-2ee87e3460/init.fmp4","fragments_url":"/avatar/video/stream/sessions/stream-2ee87e3460/fragments","file_url":"/avatar/video/stream/sessions/stream-2ee87e3460/file.mp4","status_url":"/avatar/video/stream/sessions/stream-2ee87e3460/status","audio_url":"/avatar/video/stream/sessions/stream-2ee87e3460/audio","audio_bin_url":"/avatar/video/stream/sessions/stream-2ee87e3460/audio.bin","audio_end_url":"/avatar/video/stream/sessions/stream-2ee87e3460/aud

DELETE /avatar/video/stream/sessions/{session_id}

curl -X DELETE 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/sessions/SESSION_ID'

HTTP 404

{"detail":"unknown session 'SESSION_ID'"}

POST /avatar/video/stream/sessions/{session_id}/audio

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/sessions/SESSION_ID/audio' \
  -H 'Content-Type: application/json' \
  -d '{"seq": 0, "sample_rate": 16000, "pcm_f32_b64": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}'

HTTP 404

{"detail":"unknown session 'SESSION_ID'"}

POST /avatar/video/stream/sessions/{session_id}/audio.bin

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/sessions/SESSION_ID/audio.bin' \
  -H 'Content-Type: application/json' \
  -d '{"seq": 0, "sample_rate": 16000, "pcm_f32_b64": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}'

HTTP 404

{"detail":"unknown session 'SESSION_ID'"}

POST /avatar/video/stream/sessions/{session_id}/audio/end

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/sessions/SESSION_ID/audio/end' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 404

{"detail":"unknown session 'SESSION_ID'"}

GET /avatar/video/stream/sessions/{session_id}/file.mp4

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/sessions/SESSION_ID/file.mp4'

HTTP 404

{"detail":"unknown session 'SESSION_ID'"}

GET /avatar/video/stream/sessions/{session_id}/fragments

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/sessions/SESSION_ID/fragments'

HTTP 404

{"detail":"unknown session 'SESSION_ID'"}

GET /avatar/video/stream/sessions/{session_id}/init.fmp4

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/sessions/SESSION_ID/init.fmp4'

HTTP 404

{"detail":"unknown session 'SESSION_ID'"}

GET /avatar/video/stream/sessions/{session_id}/profile

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/sessions/SESSION_ID/profile'

HTTP 404

{"detail":"unknown session 'SESSION_ID'"}

GET /avatar/video/stream/sessions/{session_id}/status

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/avatar/video/stream/sessions/SESSION_ID/status'

HTTP 404

{"detail":"unknown session 'SESSION_ID'"}

Avatar realtime

POST /avatar/realtime/reference

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/realtime/reference' \
  -H 'Content-Type: application/json' \
  -d '{"prompt": "", "ref_image_path": "/workspace/data/examples/wan/Animate-0.jpeg", "width": 480, "height": 480, "fps": 16, "sample_rate": 16000}'

HTTP 400

{"detail":"encode_ref_v3 requires ref_image_b64 in the payload."}

POST /avatar/realtime/sessions

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/realtime/sessions' \
  -H 'Content-Type: application/json' \
  -d '{"prompt": "", "ref_image_path": "/workspace/data/examples/wan/Animate-0.jpeg", "width": 480, "height": 480, "fps": 16, "sample_rate": 16000}'

HTTP 200

{"session_id":"wan-s2v-a5e07461f612","status":"unknown","slot_idx":null,"epoch":null,"lane":null,"retry_after_seconds":null,"n_bound":null,"n_idle":null,"n_bootstrapping":null,"n_cold":null,"summary":{},"error":"Error executing request wan-s2v-create-v3-b13c6c76: create_v3 requires a ref image — pass either EXTRA_REF_LATENT (pre-encoded tensor) or EXTRA_REF_IMAGE_B64 (b64 PNG/JPEG, will be VAE-encoded inline)."}

DELETE /avatar/realtime/sessions/{session_id}

curl -X DELETE 'https://bosonai--wan-web-stream-serve.modal.run/avatar/realtime/sessions/wan-s2v-2428aea68177'

HTTP 200

{"session_id":"wan-s2v-2428aea68177","destroyed":false,"error":null}

POST /avatar/realtime/sessions/{session_id}/audio

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/realtime/sessions/wan-s2v-2428aea68177/audio' \
  -H 'Content-Type: application/json' \
  -d '{"seq": 0, "sample_rate": 16000, "pcm_f32_b64": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}'

HTTP 422

{"detail":[{"type":"missing","loc":["body","raw_waveform_b64"],"msg":"Field required","input":{"seq":0,"sample_rate":16000,"pcm_f32_b64":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}}]}

POST /avatar/realtime/sessions/{session_id}/start

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/realtime/sessions/wan-s2v-2428aea68177/start' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 200

{"session_id":"wan-s2v-2428aea68177","status":"UNKNOWN","started":false,"error":"Error executing request wan-s2v-start-2fca27b0: Session 'wan-s2v-2428aea68177' not found; cannot start."}

Avatar debug

POST /avatar/debug/sessions

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/debug/sessions' \
  -H 'Content-Type: application/json' \
  -d '{"prompt": "", "ref_image_path": "/workspace/data/examples/wan/Animate-0.jpeg", "width": 480, "height": 480, "fps": 16, "sample_rate": 16000}'

HTTP 200

{"session_id":"wan-s2v-0f13bfc210db","summary":{"session_id":"wan-s2v-0f13bfc210db","block_index":0,"block_frames":3,"cache_blocks":2,"cfg_scale":1.0,"audio_mode":"raw","finalized":false,"rope_state":{},"has_prompt_cache":false,"has_ref_cache":false,"age_seconds":0.00026869773864746094},"error":null}

DELETE /avatar/debug/sessions/{session_id}

curl -X DELETE 'https://bosonai--wan-web-stream-serve.modal.run/avatar/debug/sessions/wan-s2v-3818f43163b1'

HTTP 200

{"session_id":"wan-s2v-3818f43163b1","destroyed":true,"error":null}

POST /avatar/debug/sessions/{session_id}/finalize

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/debug/sessions/wan-s2v-3818f43163b1/finalize' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 200

{"session_id":"wan-s2v-3818f43163b1","summary":{},"error":"Error executing request wan-s2v-finalize-5a77e4c3: Session 'wan-s2v-3818f43163b1' not found; cannot finalize."}

POST /avatar/debug/sessions/{session_id}/step

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/avatar/debug/sessions/wan-s2v-3818f43163b1/step' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 200

{"session_id":"wan-s2v-3818f43163b1","block_index":0,"plan":{},"kv_plan":{},"latents_b64":null,"pixels_b64":null,"decode_kind":null,"error":"Error executing request wan-s2v-step-988814b7: Session 'wan-s2v-3818f43163b1' not found; create it first."}

wan_s2v — low-level session

POST /wan_s2v/session

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/session' \
  -H 'Content-Type: application/json' \
  -d '{"prompt": "", "ref_image_path": "/workspace/data/examples/wan/Animate-0.jpeg", "width": 480, "height": 480, "fps": 16, "sample_rate": 16000}'

HTTP 200

{"session_id":"wan-s2v-857f24126dfb","summary":{"session_id":"wan-s2v-857f24126dfb","block_index":0,"block_frames":3,"cache_blocks":2,"cfg_scale":1.0,"audio_mode":"raw","finalized":false,"rope_state":{},"has_prompt_cache":false,"has_ref_cache":false,"age_seconds":0.00021982192993164062},"error":null}

POST /wan_s2v/session/v3

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/session/v3' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 200

{"session_id":"wan-s2v-ae89165e2ff5","status":"unknown","slot_idx":null,"epoch":null,"lane":null,"retry_after_seconds":null,"n_bound":null,"n_idle":null,"n_bootstrapping":null,"n_cold":null,"summary":{},"error":"Error executing request wan-s2v-create-v3-d5a91ce9: create_v3 requires a ref image — pass either EXTRA_REF_LATENT (pre-encoded tensor) or EXTRA_REF_IMAGE_B64 (b64 PNG/JPEG, will be VAE-encoded inline)."}

POST /wan_s2v/session/v3/encode_ref

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/session/v3/encode_ref' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 400

{"detail":"encode_ref_v3 requires ref_image_b64 in the payload."}

DELETE /wan_s2v/session/{session_id}

curl -X DELETE 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/session/wan-s2v-19811c550cff'

HTTP 200

{"session_id":"wan-s2v-19811c550cff","destroyed":true,"error":null}

POST /wan_s2v/session/{session_id}/audio

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/session/wan-s2v-19811c550cff/audio' \
  -H 'Content-Type: application/json' \
  -d '{"seq": 0, "sample_rate": 16000, "pcm_f32_b64": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}'

HTTP 422

{"detail":[{"type":"missing","loc":["body","raw_waveform_b64"],"msg":"Field required","input":{"seq":0,"sample_rate":16000,"pcm_f32_b64":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}}]}

POST /wan_s2v/session/{session_id}/finalize

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/session/wan-s2v-19811c550cff/finalize' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 200

{"session_id":"wan-s2v-19811c550cff","summary":{},"error":"Error executing request wan-s2v-finalize-9e58a59a: Session 'wan-s2v-19811c550cff' not found; cannot finalize."}

GET /wan_s2v/session/{session_id}/pull

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/session/wan-s2v-19811c550cff/pull'

HTTP 200

{"session_id":"wan-s2v-19811c550cff","block_index":-1,"pixels_b64":null,"video_b64":null,"video_codec":null,"video_container":null,"video_mime":null,"video_fps":null,"video_crf":null,"audio_start_sec":0.0,"audio_end_sec":0.0,"is_silent_block":false,"audio_block_id":-1,"audio_start_sample":0,"audio_end_sample":0,"audio_source_kind":"unknown","real_samples":0,"silence_pad_samples":0,"consumed_chunk_id_start":-1,"consumed_chunk_id_end":-1,"source_start_sample":-1,"source_end_sample":-1,"empty":true,"error":null}

POST /wan_s2v/session/{session_id}/start

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/session/wan-s2v-19811c550cff/start' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 200

{"session_id":"wan-s2v-19811c550cff","status":"UNKNOWN","started":false,"error":"Error executing request wan-s2v-start-861a87d1: Session 'wan-s2v-19811c550cff' not found; cannot start."}

POST /wan_s2v/session/{session_id}/step

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/session/wan-s2v-19811c550cff/step' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 200

{"session_id":"wan-s2v-19811c550cff","block_index":0,"plan":{},"kv_plan":{},"latents_b64":null,"pixels_b64":null,"decode_kind":null,"error":"Error executing request wan-s2v-step-b3581e4b: Session 'wan-s2v-19811c550cff' not found; create it first."}

DELETE /wan_s2v/session/{session_id}/v3

curl -X DELETE 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/session/wan-s2v-19811c550cff/v3'

HTTP 200

{"session_id":"wan-s2v-19811c550cff","destroyed":false,"error":null}

wan_s2v — fMP4 streaming

GET /wan_s2v/stream/replica/status

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/replica/status'

HTTP 200

{"ok":true,"replica_ready":true,"accepts_new_session":true,"worker":{"active_session_id":null,"busy":false,"queue_depth":0,"session_count":0,"worker_status_available":false},"stream_session_count":5,"stream_state_counts":{"active":5},"stream_sessions":[{"session_id":"stream-2f9d4b286e","engine_session_id":"stream-2f9d4b286e","state":"active","closed":false,"fragment_count":0,"total_bytes":0,"profile_enabled":false,"profile_records":0,"error":null},{"session_id":"stream-64f91e800f","engine_session_id":"stream-64f91e800f","state":"active","closed":false,"fragment_count":0,"total_bytes":0,"profil

POST /wan_s2v/stream/sessions

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/sessions' \
  -H 'Content-Type: application/json' \
  -d '{"prompt": "", "ref_image_path": "/workspace/data/examples/wan/Animate-0.jpeg", "width": 480, "height": 480, "fps": 16, "sample_rate": 16000}'

HTTP 200

{"session_id":"stream-46bd37be15","state":"active","block_duration_ms":750,"audio_sample_rate":16000,"init_url":"/wan_s2v/stream/sessions/stream-46bd37be15/init.fmp4","fragments_url":"/wan_s2v/stream/sessions/stream-46bd37be15/fragments","file_url":"/wan_s2v/stream/sessions/stream-46bd37be15/file.mp4","status_url":"/wan_s2v/stream/sessions/stream-46bd37be15/status","audio_url":"/wan_s2v/stream/sessions/stream-46bd37be15/audio","audio_bin_url":"/wan_s2v/stream/sessions/stream-46bd37be15/audio.bin","audio_end_url":"/wan_s2v/stream/sessions/stream-46bd37be15/audio/end","profile_url":"/wan_s2v/str

DELETE /wan_s2v/stream/sessions/{session_id}

curl -X DELETE 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/sessions/SESSION_ID'

HTTP 404

{"detail":"unknown session 'SESSION_ID'"}

POST /wan_s2v/stream/sessions/{session_id}/audio

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/sessions/SESSION_ID/audio' \
  -H 'Content-Type: application/json' \
  -d '{"seq": 0, "sample_rate": 16000, "pcm_f32_b64": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}'

HTTP 404

{"detail":"unknown session 'SESSION_ID'"}

POST /wan_s2v/stream/sessions/{session_id}/audio.bin

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/sessions/SESSION_ID/audio.bin' \
  -H 'Content-Type: application/json' \
  -d '{"seq": 0, "sample_rate": 16000, "pcm_f32_b64": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}'

HTTP 404

{"detail":"unknown session 'SESSION_ID'"}

POST /wan_s2v/stream/sessions/{session_id}/audio/end

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/sessions/SESSION_ID/audio/end' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 404

{"detail":"unknown session 'SESSION_ID'"}

GET /wan_s2v/stream/sessions/{session_id}/file.mp4

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/sessions/SESSION_ID/file.mp4'

HTTP 404

{"detail":"unknown session 'SESSION_ID'"}

GET /wan_s2v/stream/sessions/{session_id}/fragments

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/sessions/SESSION_ID/fragments'

HTTP 404

{"detail":"unknown session 'SESSION_ID'"}

GET /wan_s2v/stream/sessions/{session_id}/init.fmp4

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/sessions/SESSION_ID/init.fmp4'

HTTP 404

{"detail":"unknown session 'SESSION_ID'"}

GET /wan_s2v/stream/sessions/{session_id}/profile

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/sessions/SESSION_ID/profile'

HTTP 404

{"detail":"unknown session 'SESSION_ID'"}

GET /wan_s2v/stream/sessions/{session_id}/status

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/stream/sessions/SESSION_ID/status'

HTTP 404

{"detail":"unknown session 'SESSION_ID'"}

wan_s2v — offline sessions

POST /wan_s2v/offline/sessions

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/offline/sessions' \
  -H 'Content-Type: application/json' \
  -d '{"prompt": "", "ref_image_path": "/workspace/data/examples/wan/Animate-0.jpeg", "width": 480, "height": 480, "fps": 16, "sample_rate": 16000}'

HTTP 200

{"session_id":"off-197cf6a753c0","state":"queued","queue_position":4,"block_duration_ms":750,"error":null,"scheduler_phase":"queued","audio_scheduler_phase":"idle","video_scheduler_phase":"idle","scheduler_detail":{"start_policy":"lookahead","wav2vec_window_ms":8000,"block_duration_ms":750,"audio_received_ms":0,"audio_final":false},"scheduler_history_tail":[{"t_ms":0,"phase":"queued","audio_phase":"idle","video_phase":"idle","detail":{"start_policy":"lookahead","wav2vec_window_ms":8000,"block_duration_ms":750,"audio_received_ms":0,"audio_final":false}}]}

GET /wan_s2v/offline/sessions/{session_id}

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/offline/sessions/SESSION_ID'

HTTP 404

{"detail":"\"offline session 'SESSION_ID' not found\""}

DELETE /wan_s2v/offline/sessions/{session_id}

curl -X DELETE 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/offline/sessions/SESSION_ID'

HTTP 404

{"detail":"\"offline session 'SESSION_ID' not found\""}

POST /wan_s2v/offline/sessions/{session_id}/audio

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/offline/sessions/SESSION_ID/audio' \
  -H 'Content-Type: application/json' \
  -d '{"seq": 0, "sample_rate": 16000, "pcm_f32_b64": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="}'

HTTP 404

{"detail":"\"offline session 'SESSION_ID' not found\""}

POST /wan_s2v/offline/sessions/{session_id}/audio/end

curl -X POST 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/offline/sessions/SESSION_ID/audio/end' \
  -H 'Content-Type: application/json' \
  -d '{}'

HTTP 404

{"detail":"\"offline session 'SESSION_ID' not found\""}

GET /wan_s2v/offline/sessions/{session_id}/chunks

curl -X GET 'https://bosonai--wan-web-stream-serve.modal.run/wan_s2v/offline/sessions/SESSION_ID/chunks'

HTTP 404

{"detail":"\"offline session 'SESSION_ID' not found\""}