Skip to main content
POST
/
v1
/
jobs
/
estimate
Estimate Cost
curl --request POST \
  --url https://api.muvi.video/v1/jobs/estimate \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "model": "<string>"
}
'
import requests

url = "https://api.muvi.video/v1/jobs/estimate"

payload = { "model": "<string>" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({model: '<string>'})
};

fetch('https://api.muvi.video/v1/jobs/estimate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
{
  "baseCostMicroCents": 123,
  "estimatedCostMicroCents": 123,
  "breakdown": [
    {}
  ],
  "hasDiscount": true,
  "discounted": {}
}

Authentication

This endpoint requires an API key with the check_status scope.
Authorization: Bearer YOUR_API_KEY

Request Body

model
string
required
The model slug to estimate costs for. Example: "google/veo-3.1-fast/text-to-video"
version
string
Optional model version. If omitted, the latest stable version is used.
input
object
Optional model-specific input parameters. Some models use input parameters (e.g. resolution, duration) for dynamic pricing calculations.

Response

baseCostMicroCents
number
The base cost of the job in micro-cents before any discounts.
estimatedCostMicroCents
number
The final estimated cost in micro-cents after applying any applicable discounts.
breakdown
array
Detailed cost breakdown by component.
hasDiscount
boolean
Whether a discount is applied to this estimate.
discounted
object
Discount details when hasDiscount is true. Contains the discount type and amount.

Examples

curl -X POST https://api.muvi.video/v1/jobs/estimate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "google/veo-3.1-fast/text-to-video",
    "input": {
      "prompt": "A cinematic drone shot of a mountain landscape at sunset",
      "duration": 10
    }
  }'
import requests

response = requests.post(
    "https://api.muvi.video/v1/jobs/estimate",
    headers={
        "Authorization": "Bearer YOUR_API_KEY",
        "Content-Type": "application/json"
    },
    json={
        "model": "google/veo-3.1-fast/text-to-video",
        "input": {
            "prompt": "A cinematic drone shot of a mountain landscape at sunset",
            "duration": 10
        }
    }
)

data = response.json()
print(f"Base cost: {data['baseCostMicroCents']} micro-cents")
print(f"Estimated cost: {data['estimatedCostMicroCents']} micro-cents")
print(f"Has discount: {data['hasDiscount']}")
const response = await fetch("https://api.muvi.video/v1/jobs/estimate", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    model: "google/veo-3.1-fast/text-to-video",
    input: {
      prompt: "A cinematic drone shot of a mountain landscape at sunset",
      duration: 10
    }
  })
});

const data = await response.json();
console.log(`Base cost: ${data.baseCostMicroCents} micro-cents`);
console.log(`Estimated cost: ${data.estimatedCostMicroCents} micro-cents`);
console.log(`Has discount: ${data.hasDiscount}`);

Example Response

{
  "baseCostMicroCents": 500000,
  "estimatedCostMicroCents": 400000,
  "breakdown": [
    {
      "component": "base_generation",
      "costMicroCents": 300000
    },
    {
      "component": "extended_duration",
      "costMicroCents": 200000
    }
  ],
  "hasDiscount": true,
  "discounted": {
    "type": "volume",
    "percentage": 20,
    "savedMicroCents": 100000
  }
}