# Estimate a generation request

> Price the exact task, model, and input payload before deciding whether to create paid media.

Canonical: https://entirefeed.com/docs/generate/estimate

`POST /v1/estimate` is public. It requires no API key, creates no media, and spends no balance.

## Estimate the payload you intend to run

Send the same `task`, optional `model`, and `input` object you would send to `POST /v1/generations`. This catches unsupported combinations and returns a request-specific USD estimate with line items.

Use static prices to understand units. Use the estimate response as the decision point for a concrete request, especially when duration or quantity changes the total.

## Estimate again after input changes

Treat an estimate as a snapshot of one payload. Estimate again after changing the task, model, duration, quantity, resolution, or source media. Creation performs its own current estimate before reserving balance.

Continue to [Create and monitor](/docs/generate/create-and-monitor) only when the estimated amount is acceptable.

## Estimate a model-backed task

`POST /v1/estimate` is public, creates no media, and spends no balance.

### cURL

```bash
curl https://api.entirefeed.com/v1/estimate \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
  "task": "video.create",
  "model": "seedance-2",
  "input": {
    "prompt": "A crisp product reveal on a clean studio set",
    "duration_seconds": 8,
    "aspect_ratio": "9:16",
    "resolution": "720p"
  }
}'
```

### TypeScript

```typescript
const response = await fetch("https://api.entirefeed.com/v1/estimate", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "task": "video.create",
    "model": "seedance-2",
    "input": {
      "prompt": "A crisp product reveal on a clean studio set",
      "duration_seconds": 8,
      "aspect_ratio": "9:16",
      "resolution": "720p"
    }
  }),
});

if (!response.ok) throw new Error(await response.text());
console.log(await response.json());
```

### Python

```python
import requests

response = requests.request(
    "POST",
    "https://api.entirefeed.com/v1/estimate",
    headers={"Content-Type": "application/json"},
    json={
      "task": "video.create",
      "model": "seedance-2",
      "input": {
        "prompt": "A crisp product reveal on a clean studio set",
        "duration_seconds": 8,
        "aspect_ratio": "9:16",
        "resolution": "720p",
      },
    },
    timeout=30,
)
response.raise_for_status()
print(response.json())
```

Expected response:

```json
{
  "estimated_cost": {
    "amount_usd": "1.64"
  },
  "line_items": [
    {
      "type": "video_generation",
      "model": "seedance-2",
      "quantity": 1,
      "unit": "operation",
      "amount_usd": "1.64"
    }
  ]
}
```

## Estimate a model-less task

Model-less tasks omit `model` entirely:

### cURL

```bash
curl https://api.entirefeed.com/v1/estimate \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
  "task": "video.split_scenes",
  "input": {
    "video": {
      "url": "https://cdn.example.com/source/interview.mp4"
    },
    "threshold": 24,
    "minimum_scene_length_seconds": 1.5
  }
}'
```

### TypeScript

```typescript
const response = await fetch("https://api.entirefeed.com/v1/estimate", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "task": "video.split_scenes",
    "input": {
      "video": {
        "url": "https://cdn.example.com/source/interview.mp4"
      },
      "threshold": 24,
      "minimum_scene_length_seconds": 1.5
    }
  }),
});

if (!response.ok) throw new Error(await response.text());
console.log(await response.json());
```

### Python

```python
import requests

response = requests.request(
    "POST",
    "https://api.entirefeed.com/v1/estimate",
    headers={"Content-Type": "application/json"},
    json={
      "task": "video.split_scenes",
      "input": {
        "video": {
          "url": "https://cdn.example.com/source/interview.mp4",
        },
        "threshold": 24,
        "minimum_scene_length_seconds": 1.5,
      },
    },
    timeout=30,
)
response.raise_for_status()
print(response.json())
```

```json
{
  "estimated_cost": {
    "amount_usd": "0.00"
  },
  "line_items": [
    {
      "type": "split_scenes",
      "model": null,
      "quantity": 1,
      "unit": "operation",
      "amount_usd": "0.00"
    }
  ]
}
```
