# Estimate Cost

Source: https://recoupable.dev/docs/api-reference/content/estimate

Estimate the cost of running the content creation pipeline. Calculates per-step and per-video costs based on current pricing. Supports comparing multiple workflow profiles (e.g., premium vs. budget) and projecting batch costs. This endpoint is informational only — it does not trigger any pipeline execution or spend credits.

## GET /api/content/estimate

Full OpenAPI specification: https://recoupable.dev/docs/spec/content.json

## Authentication

This operation requires one of the security alternatives in the specification below. Security scheme definitions are included where present in the published specification.

[Authentication guide](https://recoupable.dev/docs/authentication)

## Operation and referenced schemas

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "Recoup API - Content",
    "description": "API documentation for the Recoup platform - an AI agent platform for the music industry",
    "license": {
      "name": "MIT"
    },
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://api.recoupable.dev"
    }
  ],
  "paths": {
    "/api/content/estimate": {
      "get": {
        "description": "Estimate the cost of running the content creation pipeline. Calculates per-step and per-video costs based on current pricing. Supports comparing multiple workflow profiles (e.g., premium vs. budget) and projecting batch costs. This endpoint is informational only — it does not trigger any pipeline execution or spend credits.",
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearerAuth": []
          }
        ],
        "parameters": [
          {
            "name": "lipsync",
            "in": "query",
            "description": "Which workflow to estimate. `false` for image-to-video, `true` for audio-to-video. If omitted, estimates the default image-to-video workflow.",
            "required": false,
            "schema": {
              "type": "boolean",
              "example": false
            }
          },
          {
            "name": "batch",
            "in": "query",
            "description": "Number of videos to project costs for. Use this to answer questions like \"how much would 30 videos cost?\"",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1,
              "example": 1
            }
          },
          {
            "name": "compare",
            "in": "query",
            "description": "When `true`, returns estimates for all available workflow profiles (premium, budget, mid) for side-by-side comparison.",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false,
              "example": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Cost estimate calculated successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContentEstimateResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized — invalid or missing API key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContentErrorResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ContentEstimateResponse": {
        "type": "object",
        "required": [
          "workflows"
        ],
        "description": "Cost estimates based on current pricing. When `compare` is `false`, the `workflows` array contains a single entry. When `true`, it contains all available profiles.",
        "properties": {
          "workflows": {
            "type": "array",
            "description": "One or more workflow cost breakdowns",
            "items": {
              "$ref": "#/components/schemas/ContentWorkflowEstimate"
            }
          },
          "comparison": {
            "description": "Side-by-side summary. Only present when `compare` is `true` and multiple workflows are returned.",
            "$ref": "#/components/schemas/ContentEstimateComparison"
          },
          "batch": {
            "type": "object",
            "description": "Batch cost projection. Only present when `batch` > 1.",
            "properties": {
              "count": {
                "type": "integer",
                "description": "Number of videos in the batch",
                "example": 30
              },
              "cheapestTotal": {
                "type": "number",
                "format": "float",
                "description": "Total cost for the batch using the cheapest workflow",
                "example": 5.4
              },
              "mostExpensiveTotal": {
                "type": "number",
                "format": "float",
                "description": "Total cost for the batch using the most expensive workflow",
                "example": 28.5
              }
            }
          }
        }
      },
      "ContentErrorResponse": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "string",
            "description": "Error message describing what went wrong",
            "example": "Unauthorized"
          }
        }
      },
      "ContentWorkflowEstimate": {
        "type": "object",
        "required": [
          "name",
          "perVideo",
          "steps"
        ],
        "description": "Cost breakdown for a single workflow profile.",
        "properties": {
          "name": {
            "type": "string",
            "description": "Workflow profile name",
            "example": "Current (image-to-video)"
          },
          "perVideo": {
            "type": "number",
            "format": "float",
            "description": "Total estimated cost per video in USD",
            "example": 0.82
          },
          "steps": {
            "type": "array",
            "description": "Per-step cost breakdown showing where the money goes",
            "items": {
              "$ref": "#/components/schemas/ContentStepEstimate"
            }
          },
          "costBreakdown": {
            "type": "object",
            "description": "Summary of the biggest cost driver",
            "properties": {
              "mostExpensiveStep": {
                "type": "string",
                "description": "Name of the step that costs the most",
                "example": "Generate Video"
              },
              "mostExpensivePercent": {
                "type": "integer",
                "description": "Percentage of total cost from the most expensive step",
                "example": 68
              }
            }
          }
        }
      },
      "ContentEstimateComparison": {
        "type": "object",
        "required": [
          "cheapest",
          "cheapestPerVideo",
          "mostExpensive",
          "mostExpensivePerVideo",
          "savingsPercent"
        ],
        "description": "Summary comparing the cheapest and most expensive workflow options.",
        "properties": {
          "cheapest": {
            "type": "string",
            "description": "Name of the cheapest workflow profile",
            "example": "Budget (no upscale, LTX video)"
          },
          "cheapestPerVideo": {
            "type": "number",
            "format": "float",
            "description": "Cost per video for the cheapest workflow",
            "example": 0.18
          },
          "mostExpensive": {
            "type": "string",
            "description": "Name of the most expensive workflow profile",
            "example": "Current (audio-to-video)"
          },
          "mostExpensivePerVideo": {
            "type": "number",
            "format": "float",
            "description": "Cost per video for the most expensive workflow",
            "example": 0.95
          },
          "savingsPercent": {
            "type": "integer",
            "description": "Percentage savings between the cheapest and most expensive workflows",
            "example": 81
          }
        }
      },
      "ContentStepEstimate": {
        "type": "object",
        "required": [
          "name",
          "model",
          "cost",
          "note"
        ],
        "description": "Cost details for a single pipeline step.",
        "properties": {
          "name": {
            "type": "string",
            "description": "Pipeline step name",
            "example": "Generate Image"
          },
          "model": {
            "type": "string",
            "description": "The AI model or service used for this step",
            "example": "fal-ai/nano-banana-pro/edit"
          },
          "cost": {
            "type": "number",
            "format": "float",
            "description": "Estimated cost for this step in USD",
            "example": 0.04
          },
          "unit": {
            "type": "string",
            "description": "Billing unit type (e.g., `images`, `seconds`, `megapixels`). Not present for free steps.",
            "example": "images"
          },
          "unitPrice": {
            "type": "number",
            "format": "float",
            "description": "Price per billing unit in USD. Not present for free steps.",
            "example": 0.04
          },
          "note": {
            "type": "string",
            "description": "Human-readable calculation detail",
            "example": "1 call"
          }
        }
      }
    },
    "securitySchemes": {
      "apiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "x-api-key",
        "description": "Your Recoup API key. [Learn more](/quickstart#api-keys)."
      },
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer"
      }
    }
  }
}
```
