# Estimar

`POST /estimate/{sourceFileExtension}` calcula una cotización para un archivo y un JSON de opciones sin subir el archivo.

## Buscar opciones válidas

Llama a `GET /options/{format}` antes de construir un JSON de opciones. Devuelve los ids de capacidades válidos, las selecciones predeterminadas y los valores de opción permitidos para ese formato de origen.

```http
GET /options/mp4
X-Fast-Api-Key: YOUR_API_KEY
```

```json
{
  "format": "mp4",
  "job": "extract.mp4",
  "defaults": {
    "selectedCapabilities": ["video.audio", "video.frames", "video.metadata", "video.subtitles"],
    "includeManifest": true,
    "capabilityOptions": {
      "video.audio": {
        "audioFormat": "mp3"
      },
      "video.frames": {
        "frameMode": "evenly-spaced",
        "frameIntervalSeconds": 1,
        "maxExtractedFrames": 500
      }
    }
  },
  "capabilities": [
    {
      "id": "video.audio",
      "output": "audio",
      "defaultSelected": true,
      "options": [
        {
          "id": "audioFormat",
          "type": "enum",
          "defaultValue": "mp3",
          "allowedValues": ["mp3", "wav", "m4a", "original", "best"]
        }
      ]
    },
    {
      "id": "media.transcript",
      "output": "transcript",
      "defaultSelected": false,
      "options": [
        {
          "id": "transcription.mode",
          "type": "enum",
          "required": true,
          "defaultValue": "fast",
          "allowedValues": ["fast", "quality", "meeting-intelligence"]
        }
      ]
    }
  ]
}
```

Usa `capabilities[].id` dentro de `options.extraction.selectedCapabilities`. Si una capacidad seleccionada tiene `options[]`, coloca cada valor en `options.extraction.capabilityOptions[capability.id][option.id]`.

## Petición

```http
POST /estimate/mp4
Content-Type: application/json
X-Fast-Api-Key: YOUR_API_KEY
```

```json
{
  "fileSizeMb": 25,
  "durationMinutes": 3,
  "options": {
    "extraction": {
      "selectedCapabilities": ["video.audio", "video.metadata", "media.transcript"],
      "capabilityOptions": {
        "media.transcript": {
          "transcription.mode": "quality"
        }
      }
    }
  }
}
```

## Parámetros de ruta

| Parámetro | Obligatorio | Notas |
| --- | --- | --- |
| `sourceFileExtension` | Sí | Extensión de origen con o sin punto, como `mp4`, `pdf`, `docx` o `zip`. |

## Campos

| Campo | Obligatorio | Notas |
| --- | --- | --- |
| `fileSizeBytes` o `fileSizeMb` | Sí | Se usa para precios por crédito de archivo y para límites. |
| `durationSeconds` o `durationMinutes` | Recomendado para audio/video | Ayuda a estimar trabajos de medios y transcripción basados en duración. |
| `pageCount`, `slideCount`, `sheetCount`, `documentUnitCount` | Recomendado para documentos | Usa la métrica que coincida con el tipo de origen cuando la conozcas. |
| `frameCount` | Recomendado para imágenes con varios fotogramas | Ayuda a estimar imágenes animadas y de múltiples fotogramas. |
| `workflow` | No | `extract` de forma predeterminada; usa `transcribe` para estimaciones solo de transcripción. |
| `mode` | Para anular el modo solo-transcripción | `fast`, `quality` o `meeting-intelligence`. |
| `options` | No | El mismo objeto de opciones de extracción que acepta `POST /extract`. |

## Respuesta

```json
{
  "job": "extract.mp4",
  "category": "video",
  "quotedCredits": 16,
  "lineItems": [
    {
      "kind": "base",
      "credits": 1
    },
    {
      "kind": "capability",
      "capabilityId": "media.transcript",
      "credits": 15,
      "mode": "quality",
      "unit": "minute"
    }
  ]
}
```

## Cotización de créditos

`quotedCredits` es el coste cotizado en créditos para el archivo y el JSON de opciones. `lineItems` desglosa esa cotización entre extracción base y complementos seleccionados con coste adicional.
