Provider Routing
A video model may be served by more than one provider. provider is a top-level field of the request body with two sub-fields: type selects the provider, options passes provider-specific parameters through.
| Field | Type | Description |
|---|---|---|
provider.type | string | Pins the serving provider. A value outside the enum returns 400 invalid_provider_type; a provider that does not serve the model returns 400 provider_type_unavailable |
provider.options.<slug> | object | Provider-specific passthrough — only the matched provider receives it |
cURL
curl https://api.ofox.io/v1/videos \
-H "Authorization: Bearer $OFOX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "bytedance/seedance-2.0-mini",
"prompt": "...",
"duration": 5,
"provider": {
"type": "byteplus",
"options": { "dashscope": { "watermark": false } }
}
}'When provider.type is not sent, a model served by several providers is distributed by weight across the available channels, and which provider serves any single request is not predictable. The video path does not support order / sort / fallback, and there is no equivalent header form.
The providers available for a model are those listed under Providers on its model page; the full list is in Provider routing.
seedance’s two providers
The bytedance/seedance-* family is served by the two providers below, whose content policies differ:
| Provider | Description | Content policy |
|---|---|---|
volcengine | Volcengine Ark, ByteDance’s platform for mainland China | Standard moderation |
byteplus | BytePlus, ByteDance’s platform for markets outside mainland China | Allows not-for-all-audiences (NSFW) content |
byteplus allows seedance to generate not-for-all-audiences (NSFW) content, while volcengine applies standard moderation. provider.type: "byteplus" must be set explicitly when such content is required; otherwise the weighted distribution may route the request to volcengine, where moderation will reject it.
provider.options: parameter passthrough
Provider-specific parameters are passed through provider.options.<slug>, and only the matched provider receives them. Parameters such as watermark are not supported by every model, which is why they live in provider passthrough rather than in a top-level field (matching OpenRouter’s passthrough design). Which passthrough parameters a model accepts depends on the model.
{
"model": "alibaba/wan-2.7",
"prompt": "...",
"provider": {
"options": {
"dashscope": { "watermark": false, "audio_setting": "..." }
}
}
}type and options may be sent together.