CheaperGen

API-Referenz

API-Referenz

REST-API-Referenz: Generierungen absenden, abfragen und abbrechen, Modelle und Preise auflisten, Preise abfragen, Guthaben abrufen und Bilder, Videos sowie Audiodateien hochladen – mit Beispielen.

Die API ist in einige Ressourcen gegliedert: generations (die von Ihnen gestarteten Aufträge), Modelle (verfügbare Modelle und ihre Kosten), quotes, Ihr account und uploads. Alle Anfragen und Antworten sind JSON über HTTPS.

Basis-URLhttps://cheapergen.com/api/v1

Authentifizieren Sie sich mit Authorization: Bearer cg_live_… (siehe Authentifizierung). Fehler verwenden das in Fehler beschriebene Format. Alle Endpunkte senden CORS-Header. Geben Sie Ihren Schlüssel niemals im Browser preis; nur öffentliche Endpunkte sind für clientseitige Aufrufe vorgesehen.

API-Endpunkte
Endpunkt
POST/run/{endpoint}
GET/generations/{id}
GET/generations
POST/generations/{id}/cancel
DELETE/generations/{id}
GET/models
GET/models/{vendor}/{model}
POST/quote/{endpoint}
GET/account
GET/account/pricing
POST/uploads
GET/webhooks/secret

Generierung starten#

POST/api/v1/run/{endpoint}API-Schlüssel erforderlich

Startet eine asynchrone Generierung und gibt 202 Accepted mit einem Generierungsobjekt im Status queued zurück. Zu diesem Zeitpunkt wird der Preis von Ihrem Guthaben reserviert (siehe Abrechnung).

Pfadparameter
endpointstringerforderlich
Die Endpunkt-ID des Modells, {vendor}/{model}/{task} – zum Beispiel bytedance/seedance-2.0-fast/text-to-video. Alle IDs finden Sie auf der Seite Modelle.
Body
…model inputsobjecterforderlich
Die Eingabefelder des Endpunkts, zum Beispiel prompt, resolution oder image_url. Felder, Typen, Standardwerte und zulässige Werte jedes Modells sind auf der jeweiligen API-Seite dokumentiert und werden über Modell abrufen als JSON Schema bereitgestellt. Nicht bekannte Felder werden abgelehnt.
webhook_urlstring (https URL)
Optional. Wir senden die abgeschlossene Generierung per POST an diese URL. Siehe Webhooks.
retentionstring
Optional. Aufbewahrungsdauer für Prompt, Eingaben und Ausgaben dieser Generierung: immediate, 1h, 1d, 7d oder 30d. Standardmäßig gilt die Einstellung Ihres Kontos (1d). Jedes Konto kann die Frist verkürzen; 7d und 30d erfordern eine Aufbewahrungseinstellung für Enterprise-Konten. Siehe Datenaufbewahrung.
allow_fallback_priceboolean
Optional; Standardwert true. Wenn die übliche Kapazität für eine Anfrage nicht verfügbar ist, wird sie zu einem höheren Preis über alternative Kapazität ausgeführt: zum Preis aus Notfallpreis — höchstens zum offiziellen Modellpreis und niemals über max_cost_usd. Das gilt beim Absenden (der Preis steht in der Antwort und in /quote) und auch bei einem späteren Wechsel, falls die Kapazität nach Annahme des Auftrags ausfällt (der Aufpreis wird dann reserviert; pricing.fallback und Webhooks weisen darauf hin). Setze false, wenn du nie mehr als den angebotenen Preis zahlen möchtest. Ohne diese Einstellung kann ein angenommener Auftrag in einem Pro- oder Max-Tarif ebenfalls hochgestuft werden, höchstens bis zum Standardpreis. Dann erhältst du 503 fallback_price_declined, statt einen höheren Preis zu zahlen, oder der Auftrag schlägt fehl und wird erstattet.
max_cost_usdnumber
Optional. Höchstbetrag, den Sie für diese Generierung zu zahlen bereit sind, einschließlich Notfallpreis. Bei einem höheren Preis erhalten Sie 400 max_cost_exceeded und es wird nichts berechnet; ein Auftrag wird später nie über diesen Betrag hinaus verschoben.
const resp = await fetch("https://cheapergen.com/api/v1/run/bytedance/seedance-2.0-fast/text-to-video", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.CHEAPERGEN_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "prompt": "Langsame Kamerafahrt auf einen Keramiker, der zur goldenen Stunde eine Vase formt, Staub im Licht, geringe Tiefenschärfe",
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "duration": 5
  }),
});
const generation = await resp.json();
Antwort · 202 Accepted
{
  "id": "gen_8c2QmX1nq0k4Lw7Z",
  "object": "generation",
  "model": "bytedance/seedance-2.0-fast",
  "endpoint": "bytedance/seedance-2.0-fast/text-to-video",
  "mode": "text-to-video",
  "status": "queued",
  "input": {
    "prompt": "Langsame Kamerafahrt auf einen Keramiker, der zur goldenen Stunde eine Vase formt, Staub im Licht, geringe Tiefenschärfe",
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "duration": 5,
    "generate_audio": true
  },
  "output": null,
  "error": null,
  "cost": {
    "amount_usd": 0.4494,
    "currency": "usd",
    "estimated": true
  },
  "source": "api",
  "created_at": "2026-10-15T09:21:04.512Z",
  "started_at": null,
  "completed_at": null,
  "retention": "1d",
  "expires_at": null,
  "purged_at": null,
  "urls": {
    "get": "https://cheapergen.com/api/v1/generations/gen_8c2QmX1nq0k4Lw7Z",
    "cancel": "https://cheapergen.com/api/v1/generations/gen_8c2QmX1nq0k4Lw7Z/cancel"
  }
}

Fehler: 400 invalid_request (Validierung), 401 unauthorized, 402 insufficient_balance, 404 not_found (unbekannter Endpunkt), 429 rate_limited (Anfragerate, oder Ihre Warteschlange wartender Generierungen ist voll), 503 model_unavailable, 503 pricing_unavailable (bitte nach einigen Sekunden erneut versuchen; es wurde nichts berechnet), 503 fallback_price_declined (nur der Ausweichpreis ist verfügbar und du hast allow_fallback_price: false gesendet), 400 max_cost_exceeded.

Generierung abrufen#

GET/api/v1/generations/{id}API-Schlüssel erforderlich

Gibt eine Generierung anhand ihrer ID zurück. Falls eine Statusprüfung ansteht, wird sie vor der Antwort durchgeführt. Um einen Auftrag bis zum Abschluss zu verfolgen, reicht es daher, diesen Endpunkt wiederholt abzufragen. Gibt 404 not_found bei unbekannten IDs und für Generierungen anderer Konten zurück.

Anfrage
curl https://cheapergen.com/api/v1/generations/gen_8c2QmX1nq0k4Lw7Z \
  -H "Authorization: Bearer $CHEAPERGEN_API_KEY"
Antwort · 200 OK
{
  "id": "gen_8c2QmX1nq0k4Lw7Z",
  "object": "generation",
  "model": "bytedance/seedance-2.0-fast",
  "endpoint": "bytedance/seedance-2.0-fast/text-to-video",
  "mode": "text-to-video",
  "status": "succeeded",
  "input": {
    "prompt": "Langsame Kamerafahrt auf einen Keramiker, der zur goldenen Stunde eine Vase formt, Staub im Licht, geringe Tiefenschärfe",
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "duration": 5,
    "generate_audio": true
  },
  "output": {
    "video": {
      "url": "https://cdn.cheapergen.com/outputs/gen_8c2QmX1nq0k4Lw7Z.mp4",
      "content_type": "video/mp4"
    }
  },
  "error": null,
  "cost": {
    "amount_usd": 0.4494,
    "currency": "usd",
    "estimated": false
  },
  "source": "api",
  "created_at": "2026-10-15T09:21:04.512Z",
  "started_at": "2026-10-15T09:21:09.031Z",
  "completed_at": "2026-10-15T09:22:31.870Z",
  "retention": "1d",
  "expires_at": "2026-10-16T09:22:31.870Z",
  "purged_at": null
}

Generierungen auflisten#

GET/api/v1/generationsAPI-Schlüssel erforderlich

Listet Ihre Generierungen absteigend nach Datum auf. Enthalten sind auch Aufträge aus dem Studio und den Playgrounds.

Abfrageparameter
limitinteger
Seitengröße, 1–100. Standardwert 20.
cursorstring
next_cursor von der vorherigen Seite.
statusstring
Nur Generierungen mit diesem Status zurückgeben: queued, running, succeeded, failed oder canceled.
modelstring
Nur Generierungen für diese Modell-ID zurückgeben, z. B. bytedance/seedance-2.0-fast.
sourcestring
Nur Generierungen aus playground (Studio und Modellseiten), api oder mcp (KI-Agenten) zurückgeben.
Anfrage
curl "https://cheapergen.com/api/v1/generations?limit=2&status=succeeded" \
  -H "Authorization: Bearer $CHEAPERGEN_API_KEY"
Antwort · 200 OK
{
  "object": "list",
  "data": [
    {
      "id": "gen_8c2QmX1nq0k4Lw7Z",
      "object": "generation",
      "model": "bytedance/seedance-2.0-fast",
      "endpoint": "bytedance/seedance-2.0-fast/text-to-video",
      "mode": "text-to-video",
      "status": "succeeded",
      "input": {
        "prompt": "Langsame Kamerafahrt auf einen Keramiker, der zur goldenen Stunde eine Vase formt, Staub im Licht, geringe Tiefenschärfe",
        "aspect_ratio": "16:9",
        "resolution": "720p",
        "duration": 5,
        "generate_audio": true
      },
      "output": {
        "video": {
          "url": "https://cdn.cheapergen.com/outputs/gen_8c2QmX1nq0k4Lw7Z.mp4",
          "content_type": "video/mp4"
        }
      },
      "error": null,
      "cost": {
        "amount_usd": 0.4494,
        "currency": "usd",
        "estimated": false
      },
      "source": "api",
      "created_at": "2026-10-15T09:21:04.512Z",
      "started_at": "2026-10-15T09:21:09.031Z",
      "completed_at": "2026-10-15T09:22:31.870Z",
      "retention": "1d",
      "expires_at": "2026-10-16T09:22:31.870Z",
      "purged_at": null
    },
    {
      "id": "gen_3vYk2PqL9sTn0bWd",
      "object": "generation",
      "model": "bytedance/seedream-5.0-pro",
      "endpoint": "bytedance/seedream-5.0-pro/text-to-image",
      "mode": "text-to-image",
      "status": "succeeded",
      "input": {
        "prompt": "Redaktionelles Produktfoto einer mattschwarzen Espressomaschine auf Travertin, weiches Fensterlicht, 85 mm",
        "aspect_ratio": "1:1",
        "size": "2K"
      },
      "output": {
        "images": [
          {
            "url": "https://cdn.cheapergen.com/outputs/gen_8c2QmX1nq0k4Lw7Z.png",
            "content_type": "image/png"
          }
        ]
      },
      "error": null,
      "cost": {
        "amount_usd": 0.0665,
        "currency": "usd",
        "estimated": false
      },
      "source": "api",
      "created_at": "2026-10-15T09:21:04.512Z",
      "started_at": "2026-10-15T09:21:09.031Z",
      "completed_at": "2026-10-15T09:22:31.870Z",
      "retention": "1d",
      "expires_at": "2026-10-16T09:22:31.870Z",
      "purged_at": null
    }
  ],
  "next_cursor": "gen_3vYk2PqL9sTn0bWd"
}

next_cursor ist null auf der letzten Seite.

Generierung abbrechen#

POST/api/v1/generations/{id}/cancelAPI-Schlüssel erforderlich

Bricht eine Generierung ab, die noch queued ist, und erstattet die Reservierung vollständig. Gibt die aktualisierte Generierung mit status: "canceled" zurück. Gibt 409 conflict zurück, wenn die Generierung bereits läuft oder abgeschlossen ist oder das Modell keine Aufträge in der Warteschlange abbrechen kann.

Anfrage
curl -X POST https://cheapergen.com/api/v1/generations/gen_8c2QmX1nq0k4Lw7Z/cancel \
  -H "Authorization: Bearer $CHEAPERGEN_API_KEY"
Antwort · 200 OK
{
  "id": "gen_8c2QmX1nq0k4Lw7Z",
  "object": "generation",
  "model": "bytedance/seedance-2.0-fast",
  "endpoint": "bytedance/seedance-2.0-fast/text-to-video",
  "mode": "text-to-video",
  "status": "canceled",
  "input": {
    "prompt": "Langsame Kamerafahrt auf einen Keramiker, der zur goldenen Stunde eine Vase formt, Staub im Licht, geringe Tiefenschärfe",
    "aspect_ratio": "16:9",
    "resolution": "720p",
    "duration": 5,
    "generate_audio": true
  },
  "output": null,
  "error": null,
  "cost": {
    "amount_usd": 0,
    "currency": "usd",
    "estimated": false
  },
  "source": "api",
  "created_at": "2026-10-15T09:21:04.512Z",
  "started_at": null,
  "completed_at": "2026-10-15T09:21:06.200Z",
  "retention": "1d",
  "expires_at": "2026-10-16T09:21:06.200Z",
  "purged_at": null
}

Generierung löschen#

DELETE/api/v1/generations/{id}API-Schlüssel erforderlich

Löscht eine Generierung: Ausgabedateien, hochgeladene Eingaben, die keine andere Generierung nutzt, Prompt und Eingabe werden sofort entfernt. Die Generierung erscheint nicht mehr in Listen und GET gibt 404 zurück. Abrechnungsdaten (Belastung im Transaktionsverlauf und Nutzungswerte) bleiben erhalten. Eine Generierung, die noch queued ist, wird zuerst abgebrochen und der reservierte Betrag vollständig erstattet; lässt sie sich nicht mehr abbrechen (sie läuft, oder ihr Modell kann wartende Aufträge nicht abbrechen), gibt es 409 conflict zurück – warten Sie, bis sie fertig ist.

Anfrage
curl -X DELETE https://cheapergen.com/api/v1/generations/gen_8c2QmX1nq0k4Lw7Z \
  -H "Authorization: Bearer $CHEAPERGEN_API_KEY"
Antwort · 200 OK
{
  "id": "gen_8c2QmX1nq0k4Lw7Z",
  "object": "generation",
  "deleted": true
}

Das Generierungsobjekt#

idstring
Eindeutige ID mit Präfix gen_.
objectstring
Immer "generation".
modelstring
Modell-ID, z. B. bytedance/seedance-2.0-fast.
endpointstring
Endpunkt-ID, an die der Auftrag gesendet wurde, z. B. bytedance/seedance-2.0-fast/text-to-video.
modestring
Aufgabe: text-to-video, image-to-video, reference-to-video, text-to-image oder image-edit.
statusstring
queued → running → succeeded | failed oder canceled. Siehe Generierungen.
inputobject
The validated input, with defaults filled in.
outputobject | null
Wird bei Erfolg festgelegt. Video: { "video": { "url", "content_type" } }. Bild: { "images": [{ "url", "content_type" }] }. Ein Bild, das der Sicherheitsfilter ersetzt hat (es wird leer zurückgegeben), hat ebenfalls "safety_filtered": true; es wird wie jede andere Ausgabe abgerechnet.
errorobject | null
Bei Fehler gesetzt: { "code", "message", "reason", "hint", "retryable", "refunded" }, außerdem param (zu änderndes Feld) und, falls bekannt, detail (Wortlaut des Anbieters). reason nennt den Grund – etwa content_blocked, invalid_input oder upstream_unavailable. Siehe Fehlerursachen.
costobject
amount_usd, currency ("usd") und estimated – true, solange der Betrag reserviert ist, false nach der endgültigen Abrechnung. Fehlgeschlagene und abgebrochene Generierungen kosten 0.
pricingobject
custom_price (Ihr individueller Preis: ein Vertragspreis oder Ihr Pro- oder Max-Tarif), volume_level (1 = Pro, 2 = Max, wenn der Tarif den Preis festlegt, sonst null), standard_usd (die üblichen Kosten dieser Anfrage) und fallback: null oder { "active", "reason", "message", "standard_usd", "amount_usd" }, wenn sie zum Ausweichpreis ausgeführt wurde – höchstens zum offiziellen Preis, festgelegt durch allow_fallback_price und begrenzt auf max_cost_usd.
sourcestring
"api" oder "playground" (Studio und Modellseiten).
created_atstring
ISO 8601 timestamp of submission.
started_atstring | null
When the model started generating.
completed_atstring | null
When the generation reached a final state.
retentionstring | null
API-Generierungen: immediate, 1h, 1d, 7d oder 30d. null für Studio-Generierungen, die bis zu ihrer Löschung durch Sie gespeichert bleiben.
expires_atstring | null
Wann Inhalte (Prompt, Eingaben, Ausgaben, Medien) gelöscht werden. Wird beim Abschluss der Generierung festgelegt. Mit immediate wird die Löschung auf 10 Minuten nach erstmaliger Bereitstellung des Ergebnisses verschoben.
purged_atstring | null
Wird gesetzt, sobald die Inhalte gelöscht wurden. Danach ist output null; input behält nur die preisbestimmenden Parameter, und content_expired erklärt den Grund. Kosten und Zeitstempel bleiben erhalten.
urlsobject
Nur in der Antwort auf das Absenden: get und cancel-URLs für diese Generierung.

Modelle auflisten#

GET/api/v1/modelsÖffentlich · keine Authentifizierung

Gibt alle verfügbaren Modelle mit Endpunkten und aktuellen Preisen zurück. Preise gelten pro unit (second für Video oder image für Bilder); list_price_usd ist der Listenpreis, mit dem wir vergleichen, und discount_pct die prozentuale Ersparnis. list_price_source gibt die Preisart an: official (der eigene Listenpreis des Entwicklers) oder reference (ein anderer Vergleichspreis, angegeben von list_price_label — zum Beispiel fal API für ein Modell, dessen Entwickler keine internationale API anbietet).

Anfrage
curl https://cheapergen.com/api/v1/models
Antwort · 200 OK
{
  "object": "list",
  "data": [
    {
      "id": "bytedance/seedance-2.0-fast",
      "object": "model",
      "name": "Seedance 2.0 Fast",
      "vendor": "ByteDance",
      "category": "video",
      "available": true,
      "url": "https://cheapergen.com/models/bytedance/seedance-2.0-fast",
      "endpoints": [
        {
          "id": "bytedance/seedance-2.0-fast/text-to-video",
          "mode": "text-to-video",
          "output": "video"
        },
        {
          "id": "bytedance/seedance-2.0-fast/image-to-video",
          "mode": "image-to-video",
          "output": "video"
        },
        {
          "id": "bytedance/seedance-2.0-fast/reference-to-video",
          "mode": "reference-to-video",
          "output": "video"
        }
      ],
      "pricing": {
        "unit": "second",
        "list_price_source": "official",
        "list_price_label": "Official",
        "tiers": [
          {
            "tier": "480p",
            "price_usd": 0.050086,
            "list_price_usd": 0.056246,
            "discount_pct": 11
          },
          {
            "tier": "720p",
            "price_usd": 0.08988,
            "list_price_usd": 0.12096,
            "discount_pct": 26
          }
        ]
      },
      "deprecation": null,
      "upcoming_price_changes": []
    }
  ]
}

Zur Kürze ist hier nur ein Modell aufgeführt.

Modell abrufen#

GET/api/v1/models/{vendor}/{model}Öffentlich · keine Authentifizierung

Gibt ein Modell mit JSON Schema für die Eingabe jedes Endpunkts zurück – nützlich für Formulare oder zum Prüfen von Anfragen vor dem Senden. Unbekannte Modelle ergeben 404 not_found.

Anfrage
curl https://cheapergen.com/api/v1/models/bytedance/seedream-5.0-pro
Antwort · 200 OK
{
  "id": "bytedance/seedream-5.0-pro",
  "object": "model",
  "name": "Seedream 5.0 Pro",
  "vendor": "ByteDance",
  "category": "image",
  "available": true,
  "description": "ByteDance Seedream 5.0 Pro erstellt und bearbeitet fotorealistische, markengerechte Bilder bis 2K, mit präziser Bearbeitung mehrerer Bilder und genauer Textdarstellung.",
  "url": "https://cheapergen.com/models/bytedance/seedream-5.0-pro",
  "endpoints": [
    {
      "id": "bytedance/seedream-5.0-pro/text-to-image",
      "mode": "text-to-image",
      "label": "Text zu Bild",
      "output": "image",
      "input_schema": {
        "type": "object",
        "required": [
          "prompt"
        ],
        "properties": {
          "prompt": {
            "title": "Prompt",
            "description": "Beschreiben Sie Motiv, Handlung, Kamerabewegung, Beleuchtung und Stil.",
            "type": "string",
            "maxLength": 5000
          },
          "aspect_ratio": {
            "title": "Seitenverhältnis",
            "description": "Ausgabeformat des Bildes.",
            "type": "string",
            "enum": [
              "1:1",
              "4:3",
              "3:4",
              "16:9",
              "9:16",
              "3:2",
              "2:3",
              "21:9"
            ],
            "default": "1:1"
          },
          "size": {
            "title": "Größe",
            "description": "1K ≈ 1 Megapixel, 2K ≈ 4 Megapixel.",
            "type": "string",
            "enum": [
              "1K",
              "2K"
            ],
            "default": "2K"
          },
          "seed": {
            "title": "Seed",
            "description": "Verwenden Sie denselben Seed und dieselben Einstellungen, um ein Ergebnis zu reproduzieren. Leer lassen für Zufallswerte.",
            "type": "integer",
            "minimum": 0,
            "maximum": 2147483647
          },
          "webhook_url": {
            "type": "string",
            "format": "uri",
            "title": "Webhook URL",
            "description": "Optional. We POST the finished generation here (signed)."
          }
        },
        "additionalProperties": false
      }
    }
  ],
  "pricing": {
    "unit": "image",
    "notes": [],
    "list_price_source": "official",
    "list_price_label": "Official",
    "tiers": [
      {
        "tier": "1K",
        "detail": "≈1 MP",
        "price_usd": 0.03325,
        "list_price_usd": 0.045,
        "discount_pct": 26
      },
      {
        "tier": "2K",
        "detail": "≈4 MP",
        "price_usd": 0.0665,
        "list_price_usd": 0.09,
        "discount_pct": 26
      }
    ]
  },
  "deprecation": null,
  "upcoming_price_changes": []
}

Zur Kürze ist hier nur ein Endpunkt aufgeführt.

Abkündigungen und Preisänderungen#

Wir kündigen Preiserhöhungen und Ausmusterungen im Voraus an: mindestens 14 Tage vor einer Preiserhöhung (bei abweichenden Vertragsbedingungen mit längerer Frist) und 14–30 Tage vor der Ausmusterung eines Modells. Betroffene Kunden, die es in den letzten 90 Tagen genutzt haben, informieren wir per E-Mail und im Änderungsprotokoll (RSS). Dieselben Informationen stehen in der API, damit Code und Agenten darauf reagieren können:

deprecationobject | null
Am Modelle auflisten und Modell abrufen. Solange die Ausmusterung geplant ist, werden gesetzt: sunset_at (ISO 8601; ab dann geben Anfragen 410 model_delisted zurück, ohne Berechnung), replacement (empfohlene Modell-IDs, beste zuerst), reason, announced_at und info_url. Andernfalls null.
upcoming_price_changesarray
Geplante, noch nicht wirksame Preisänderungen von Tarifstufen: tier, effective_at, current_price_usd und der neue Preis price_usd pro unit. Anfragen vor effective_at werden zum heutigen Preis abgerechnet. Nach dem Absenden wird eine Generierung nie neu bepreist. Leer, wenn keine Änderung geplant ist.
warningsarray
Am Generierung starten und Preis abfragen, nur wenn es etwas mitzuteilen gibt: model_deprecated (mit sunset_at und replacement) oder price_change_scheduled für die Tarifstufe der Anfrage (mit effective_at und dem neuen price_usd). Jedes Element enthält eine verständliche message und einen info_url.
Anfrage
curl https://cheapergen.com/api/v1/models/bytedance/seedance-2.0-fast
Antwort · 200 OK
{
  "id": "bytedance/seedance-2.0-fast",
  "object": "model",
  "…": "…",
  "deprecation": {
    "sunset_at": "2026-11-20T00:00:00.000Z",
    "replacement": [
      "bytedance/seedance-2.0-fast"
    ],
    "reason": "Der Entwickler stellt dieses Modell ein.",
    "announced_at": "2026-10-21T09:30:00.000Z",
    "info_url": "https://cheapergen.com/changelog#cm2x7k9"
  },
  "upcoming_price_changes": [
    {
      "tier": "720p",
      "effective_at": "2026-11-04T00:00:00.000Z",
      "unit": "second",
      "current_price_usd": 0.08,
      "price_usd": 0.092,
      "change_pct": 15,
      "info_url": "https://cheapergen.com/changelog#cm2x8a1"
    }
  ]
}

Deprecation- und Sunset-Header#

Solange die Ausmusterung eines Modells geplant ist, enthalten Antworten dazu – POST /run, POST /quote und GET /models/{vendor}/{model} – die Standard-Header. HTTP-Clients und API-Gateways können sie protokollieren oder einen Alarm auslösen:

Antwort-Header
Deprecation: @1792575000
Sunset: Fri, 20 Nov 2026 00:00:00 GMT
Link: <https://cheapergen.com/changelog#cm2x7k9>; rel="deprecation"; type="text/html", <https://cheapergen.com/changelog#cm2x7k9>; rel="sunset"; type="text/html"

Deprecation (RFC 9745) gibt den Zeitpunkt der Ankündigung als Unix-Zeitstempel an; Sunset (RFC 8594) gibt an, ab wann Anfragen nicht mehr bedient werden. Zum Wechsel genügt es, dieselbe Anfrage an den Endpunkt des Ersatzmodells zu senden (prüfen Sie Eingabeschema auf abweichende Optionen).

Über MCP enthalten list_models und get_model dieselben deprecation- und upcoming_price_changes-Felder sowie eine einzeilige notice. So können Agenten Nutzer informieren, bevor sie sich auf ein ausgemustertes Modell verlassen.

Preis abfragen#

POST/api/v1/quote/{endpoint}Öffentlich · keine Authentifizierung

Bepreist eine Eingabe, ohne sie auszuführen. Es werden nur preisrelevante Felder (Auflösung, Dauer, Größe, Bildanzahl usw.) gelesen. Inhaltsfelder wie prompt und Referenz-URLs werden ignoriert; fehlende Felder erhalten ihre Standardwerte. Wenn das Modell vorübergehend keine Generierungen annimmt, ist available auf false gesetzt.

Referenzvideos erhöhen die abgerechneten Sekunden. Um sie einzubeziehen, übergeben Sie reference_video_durations (Sekunden, ein Wert pro Clip) als Schätzwert. /run misst die tatsächlichen Dateien und reserviert den entsprechenden Preis. Siehe Abrechnung.

Anfrage
curl -X POST https://cheapergen.com/api/v1/quote/bytedance/seedance-2.0-fast/text-to-video \
  -H "Content-Type: application/json" \
  -d '{"aspect_ratio":"16:9","resolution":"720p","duration":5}'
Antwort · 200 OK
{
  "amount_usd": 0.4494,
  "list_usd": 0.6048,
  "list_price_source": "official",
  "list_price_label": "Official",
  "discount_pct": 26,
  "available": true,
  "currency": "usd"
}

Senden Sie Ihren API-Schlüssel, um Ihre individuellen Preise abzurufen. Falls Ihr Konto einen eigenen Preis hat – einen Vertragspreis oder einen Pro- oder Max-Tarif –, enthält das Angebot auch custom_price: true und standard_amount_usd (den üblichen Preis) sowie volume_level (1 oder 2), wenn der Pro-Tarif (1) oder Max-Tarif (2) ihn festgelegt hat.

Konto abrufen#

GET/api/v1/accountAPI-Schlüssel erforderlich

Gibt Ihr Guthaben und Ihre Einstellungen für automatische Aufladungen zurück. balance_usd ist sofort verfügbar; image_credit_usd ist ein Bildguthaben (z. B. ein Willkommensguthaben), das zuerst für Bildmodelle verwendet wird, niemals für Videos; reserved_usd ist der Betrag, der von Ihrem Guthaben für laufende Generierungen reserviert ist. Siehe Abrechnung & Guthaben.

Anfrage
curl https://cheapergen.com/api/v1/account \
  -H "Authorization: Bearer $CHEAPERGEN_API_KEY"
Antwort · 200 OK
{
  "object": "account",
  "email": "you@company.com",
  "balance_usd": 42.5,
  "image_credit_usd": 0,
  "reserved_usd": 1.2,
  "auto_topup": {
    "enabled": true,
    "threshold_usd": 10,
    "amount_usd": 50
  },
  "limits": {
    "unlimited": false,
    "concurrent_generations": 20,
    "in_flight": 3,
    "requests_per_second": 10,
    "burst": 20,
    "tier": null
  }
}

limits enthält die API-Limits Ihres Kontos und wie viele seiner Generierungen gerade laufen; hat das Konto keine Limits, sind sie null, mit unlimited: true. Siehe Ratenbegrenzungen.

Ihre Preise abrufen#

GET/api/v1/account/pricingAPI-Schlüssel erforderlich

Gibt Ihren Monatstarif, das enthaltene Mengenlimit und Ihre individuellen Preise pro Stufe neben dem Standardpreis zurück. Ergänzen Sie ?model={vendor}/{model} für ein Modell. Pay as you go benötigt keinen Tarif: In diesem Fall ist plan gleich null und custom gleich false. Siehe Monatstarife.

customboolean
true, wenn ein Pro- oder Max-Tarif oder ein Vertragspreis einen Ihrer Preise senkt.
planobject | null
Ihr Monatstarif: { "id", "status" }, z. B. pro und active (starter, pro oder max). null ohne Tarif.
volumeobject
level: 1, wenn Pro aktiv ist, 2, wenn Max aktiv ist, andernfalls null.
rulesarray
Ihre Vertragspreise, aktuell und geplant: scope, status, discount_pct oder unit_price_usd, starts_at, ends_at sowie ein lesbares description.
modelsarray
Jedes Modell, das Ihr Tarif oder eine Regel abdeckt: id, name, unit und tiers – jeweils mit price_usd (Ihrem Preis), standard_price_usd, custom, volume_level (wenn der Tarif den Preis festlegt) und available.
Anfrage
curl "https://cheapergen.com/api/v1/account/pricing?model=bytedance/seedance-2.0-fast" \
  -H "Authorization: Bearer $CHEAPERGEN_API_KEY"
Antwort · 200 OK
{
  "object": "customer_pricing",
  "custom": true,
  "plan": {
    "id": "pro",
    "status": "active"
  },
  "volume": {
    "level": 1
  },
  "rules": [],
  "models": [
    {
      "id": "bytedance/seedance-2.0-fast",
      "name": "Seedance 2.0 Fast",
      "unit": "second",
      "tiers": [
        "…"
      ]
    }
  ]
}

Datei hochladen#

POST/api/v1/uploadsAPI-Schlüssel erforderlich

Lädt eine Datei hoch, die Sie als Eingabe-URL verwenden können – ein erstes Einzelbild, ein Referenzbild, ein Referenzvideo oder einen Referenz-Audioclip. Stattdessen können Sie auch eine beliebige öffentliche HTTPS-URL direkt übergeben.

ArtDateitypenMax. Größe
BildPNG, JPEG, WebP, GIF20 MB
VideoMP4, MOV50 MB
AudioMP3, WAV, M4A (Modelle akzeptieren derzeit MP3 oder WAV)15 MB

Direkt-Upload (empfohlen)#

Senden Sie JSON mit filename, content_type und size der Datei in Byte. Sie erhalten eine kurzlebige upload_url. Senden Sie die Rohdaten genau an die zurückgegebene headers über PUT und verwenden Sie anschließend url als Eingabe. Die Datei wird direkt gespeichert; zusätzlich zu den oben genannten Größenbeschränkungen gibt es kein Anfragelimit. Die Upload-URL läuft nach 15 Minuten ab. size muss die genaue Dateigröße in Byte sein: Senden Sie per PUT genau so viele Byte mit Content-Length (kein chunked oder gestreamter Body). Alles andere beantwortet der Speicher mit 403.

Anfrage
curl -X POST https://cheapergen.com/api/v1/uploads \
  -H "Authorization: Bearer $CHEAPERGEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"filename":"choreo.mp4","content_type":"video/mp4","size":8421903}'
Antwort · 201 Created
{
  "object": "upload",
  "method": "PUT",
  "upload_url": "https://storage.example.com/media/uploads/7f3k2m9q/0b8d2c5e1a7f4h6j9k3m.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&…",
  "headers": {
    "Content-Type": "video/mp4"
  },
  "url": "https://cdn.cheapergen.com/uploads/7f3k2m9q/0b8d2c5e1a7f4h6j9k3m.mp4",
  "kind": "video",
  "content_type": "video/mp4",
  "bytes": 8421903,
  "expires_at": "2026-10-15T09:36:04.000Z"
}
Laden Sie anschließend die Bytes hoch
curl -X PUT "$UPLOAD_URL" \
  -H "Content-Type: video/mp4" \
  --data-binary @choreo.mp4

Multipart-Upload#

Alternativ senden Sie multipart/form-data mit einem Feld file; wir speichern die Datei für Sie (201 Created mit url). Dabei werden die Daten über unsere API weitergeleitet, deren Anfragen auf etwa 4.5 MB begrenzt sind. Für größere Dateien verwenden Sie den Direkt-Upload. Ist dieser bei einer Bereitstellung nicht verfügbar, gibt die JSON-Anfrage 501 direct_upload_unavailable zurück; verwenden Sie dann Multipart-Upload.

Anfrage
curl -X POST https://cheapergen.com/api/v1/uploads \
  -H "Authorization: Bearer $CHEAPERGEN_API_KEY" \
  -F "file=@first-frame.png"
Antwort · 201 Created
{
  "object": "upload",
  "url": "https://cdn.cheapergen.com/uploads/7f3k2m9q/0b8d2c5e1a7f4h6j9k3m.png",
  "kind": "image",
  "content_type": "image/png",
  "bytes": 1834221
}

Ein hochgeladenes Bild verwenden#

Übergeben Sie die zurückgegebene URL im Bildfeld eines Endpunkts zur Umwandlung von Bild zu Video oder zur Bildbearbeitung:

curl -X POST https://cheapergen.com/api/v1/run/bytedance/seedance-2.0-fast/image-to-video \
  -H "Authorization: Bearer $CHEAPERGEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "prompt": "Die Kamera fährt näher heran, während sie sich umdreht und lächelt; ihr Haar bewegt sich im Wind",
  "image_url": "https://cdn.cheapergen.com/uploads/7f3k2m9q/0b8d2c5e1a7f4h6j9k3m.png",
  "aspect_ratio": "16:9",
  "resolution": "720p",
  "duration": 5
}'

Modellbezogene Referenzen

Jedes Modell hat eine eigene API-Seite mit Typ, Standardwert und zulässigen Werten für jedes Feld sowie Beispielen zum Kopieren. Beginnen Sie mit Modellliste.

Ist etwas unklar oder fehlt etwas? Schreiben Sie an support@cheapergen.com – wir lesen jede Nachricht.