Référence de l’API
Référence de l’API
Référence de l’API REST : envoyer, interroger et annuler des générations, lister les modèles et les prix, obtenir des devis, consulter votre solde et importer des images, vidéos et fichiers audio — avec exemples.
L’API s’articule autour de quelques ressources : generations (les tâches que vous lancez), modèles (les modèles disponibles et leur prix), quotes, votre account et vos uploads. Toutes les requêtes et réponses sont au format JSON sur HTTPS.
https://cheapergen.com/api/v1Authentifiez-vous avec Authorization: Bearer cg_live_… (voir Authentification). Les erreurs suivent le format décrit dans Erreurs. Tous les points de terminaison envoient des en-têtes CORS ; toutefois, n’exposez jamais votre clé dans un navigateur : seuls les points de terminaison publics sont destinés à être appelés côté client.
| Point de terminaison | Description |
|---|---|
| POST/run/{endpoint} | Envoyer une génération |
| GET/generations/{id} | Récupérer une génération |
| GET/generations | Lister les générations |
| POST/generations/{id}/cancel | Annuler une génération en attente |
| DELETE/generations/{id} | Supprimer une génération et ses médias |
| GET/models | Lister les modèles et leurs tarifs |
| GET/models/{vendor}/{model} | Récupérer un modèle et ses schémas d’entrée |
| POST/quote/{endpoint} | Estimer le prix d’une entrée |
| GET/account | Solde, crédit image et recharge automatique |
| GET/account/pricing | Votre forfait et vos tarifs personnalisés |
| POST/uploads | Téléverser un fichier image, vidéo ou audio en entrée |
| GET/webhooks/secret | Votre secret de signature des webhooks |
Envoyer une génération#
/api/v1/run/{endpoint}Clé API requiseLance une génération asynchrone et renvoie 202 Accepted avec un objet de génération à l’état queued. Le prix est alors réservé sur votre solde (voir Facturation).
endpointstringrequis- L’identifiant du point de terminaison du modèle,
{vendor}/{model}/{task}— par exemplebytedance/seedance-2.0-fast/text-to-video. Tous les identifiants figurent sur la page Modèles.
…model inputsobjectrequis- Champs d’entrée du point de terminaison, tels que
prompt,resolutionouimage_url. Les champs, types, valeurs par défaut et valeurs autorisées de chaque modèle sont documentés sur sa page API et renvoyés sous forme de schéma JSON par Récupérer un modèle. Les champs inconnus sont rejetés. webhook_urlstring (https URL)- Facultatif. Nous envoyons une requête POST à cette URL lorsque la génération est terminée. Voir Webhooks.
retentionstring- Facultatif. Durée de conservation du prompt, des entrées et des résultats de cette génération :
immediate,1h,1d,7dou30d. La valeur par défaut est celle de votre compte (1d). Tous les comptes peuvent réduire cette durée ;7det30dnécessitent un paramètre de conservation réservé aux entreprises. Voir Conservation des données. allow_fallback_priceboolean- Optionnel, par défaut
true. Si la capacité habituelle pour cette requête n’est pas disponible, elle peut être traitée sur une capacité plus coûteuse au tarif tarif d’urgence — au maximum au tarif officiel du modèle et sans jamais dépassermax_cost_usd. Cela s’applique à l’envoi de la requête (le prix figure dans la réponse et dans /quote) et, si la capacité tombe en panne après l’acceptation de la tâche, à un transfert ultérieur (le supplément est alors réservé ;pricing.fallbacket les webhooks le signalent). Définissezfalsepour ne jamais payer plus que le prix annoncé. Avec une formule Pro ou Max, une tâche acceptée peut sinon aussi passer à un prix supérieur, au plus le tarif standard : vous obtenez503 fallback_price_declinedplutôt qu’un tarif plus élevé, ou la tâche échoue et est remboursée. max_cost_usdnumber- Facultatif. Le montant maximal que vous acceptez de payer pour cette génération, prix d’urgence compris. Au-delà, vous recevez
400 max_cost_exceededet rien ne vous est facturé ; la tâche ne basculera jamais ensuite vers un tarif supérieur.
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": "Travelling avant lent sur un céramiste qui façonne un vase à l’heure dorée, poussière dans la lumière, faible profondeur de champ",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 5
}),
});
const generation = await resp.json();{
"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": "Travelling avant lent sur un céramiste qui façonne un vase à l’heure dorée, poussière dans la lumière, faible profondeur de champ",
"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"
}
}Erreurs : 400 invalid_request (validation), 401 unauthorized, 402 insufficient_balance, 404 not_found (point de terminaison inconnu), 429 rate_limited (débit des requêtes, ou votre file de générations en attente est pleine), 503 model_unavailable, 503 pricing_unavailable (réessayez dans quelques secondes ; rien n’a été facturé), 503 fallback_price_declined (seul le tarif d’urgence est disponible et vous avez envoyé allow_fallback_price: false), 400 max_cost_exceeded.
Récupérer une génération#
/api/v1/generations/{id}Clé API requiseRenvoie une génération par ID. Si une vérification de l’état est nécessaire, elle est effectuée avant la réponse : il suffit donc d’interroger ce point de terminaison pour suivre une tâche jusqu’à son terme. Renvoie 404 not_found si l’ID est inconnu ou si la génération appartient à un autre compte.
curl https://cheapergen.com/api/v1/generations/gen_8c2QmX1nq0k4Lw7Z \
-H "Authorization: Bearer $CHEAPERGEN_API_KEY"{
"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": "Travelling avant lent sur un céramiste qui façonne un vase à l’heure dorée, poussière dans la lumière, faible profondeur de champ",
"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
}Lister les générations#
/api/v1/generationsClé API requiseListe vos générations, de la plus récente à la plus ancienne. Inclut les tâches envoyées depuis Studio et les espaces de test.
limitinteger- Nombre de résultats par page, de 1 à 100. Valeur par défaut :
20. cursorstring- Le
next_cursorde la page précédente. statusstring- Ne renvoie que les générations ayant l’un de ces états :
queued,running,succeeded,failedoucanceled. modelstring- Ne renvoie que les générations associées à cet identifiant de modèle, par exemple
bytedance/seedance-2.0-fast. sourcestring- Ne renvoie que les générations créées depuis
playground(Studio et pages de modèles),apioumcp(agents IA).
curl "https://cheapergen.com/api/v1/generations?limit=2&status=succeeded" \
-H "Authorization: Bearer $CHEAPERGEN_API_KEY"{
"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": "Travelling avant lent sur un céramiste qui façonne un vase à l’heure dorée, poussière dans la lumière, faible profondeur de champ",
"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": "Photo éditoriale d’une machine à espresso noire mate sur du travertin, lumière douce de fenêtre, 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"
}La valeur de next_cursor est null sur la dernière page.
Annuler une génération#
/api/v1/generations/{id}/cancelClé API requiseAnnule une génération encore à l’état queued et rembourse intégralement le montant réservé. Renvoie la génération mise à jour avec status: "canceled". Renvoie 409 conflict si la génération est déjà en cours d’exécution ou terminée, ou si le modèle ne permet pas d’annuler les tâches en attente.
curl -X POST https://cheapergen.com/api/v1/generations/gen_8c2QmX1nq0k4Lw7Z/cancel \
-H "Authorization: Bearer $CHEAPERGEN_API_KEY"{
"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": "Travelling avant lent sur un céramiste qui façonne un vase à l’heure dorée, poussière dans la lumière, faible profondeur de champ",
"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
}Supprimer une génération#
/api/v1/generations/{id}Clé API requiseSupprime une génération : ses fichiers de résultat, les entrées importées qu’aucune autre génération n’utilise, le prompt et l’entrée sont supprimés immédiatement ; elle n’apparaît plus dans les listes et GET renvoie 404. Les données de facturation (débit du registre et totaux d’utilisation) sont conservées. Une génération encore queued est d’abord annulée et son montant réservé remboursé en totalité ; si elle ne peut plus être annulée (elle est en cours, ou son modèle ne permet pas d’annuler les tâches en attente), renvoie 409 conflict : attendez qu’elle se termine.
curl -X DELETE https://cheapergen.com/api/v1/generations/gen_8c2QmX1nq0k4Lw7Z \
-H "Authorization: Bearer $CHEAPERGEN_API_KEY"{
"id": "gen_8c2QmX1nq0k4Lw7Z",
"object": "generation",
"deleted": true
}L’objet de génération#
idstring- Identifiant unique préfixé par
gen_. objectstring- Toujours
"generation". modelstring- Identifiant du modèle, par exemple
bytedance/seedance-2.0-fast. endpointstring- Identifiant du point de terminaison auquel la tâche a été envoyée, par exemple
bytedance/seedance-2.0-fast/text-to-video. modestring- Tâche :
text-to-video,image-to-video,reference-to-video,text-to-imageouimage-edit. statusstringqueued→running→succeeded|failedoucanceled. Voir Générations.inputobject- The validated input, with defaults filled in.
outputobject | null- Défini en cas de réussite. Vidéo :
{ "video": { "url", "content_type" } }. Image :{ "images": [{ "url", "content_type" }] }. Une image remplacée par le filtre de sécurité (elle apparaît vide) possède aussi"safety_filtered": true; elle est facturée comme n’importe quel autre résultat. errorobject | null- Défini en cas d’échec :
{ "code", "message", "reason", "hint", "retryable", "refunded" }, ainsi queparam(champ à modifier) etdetail(formulation du fournisseur) si ces informations sont connues.reasonindique la raison — par exemplecontent_blocked,invalid_input,upstream_unavailable. Voir motifs d’échec. costobjectamount_usd,currency("usd") etestimated—truetant que le montant est réservé, puisfalseune fois le montant finalisé. Les générations échouées ou annulées ne coûtent0.pricingobjectcustom_price(votre tarif personnalisé : tarif contractuel ou tarif de votre forfait Pro ou Max),volume_level(1 = Pro, 2 = Max lorsque le forfait a fixé le tarif, sinonnull),standard_usd(le coût habituel de cette requête pour vous) etfallback:null, ou{ "active", "reason", "message", "standard_usd", "amount_usd" }si le tarif d’urgence a été appliqué — au maximum le prix officiel, défini parallow_fallback_priceet plafonné àmax_cost_usd.sourcestring"api"ou"playground"(Studio et pages de modèles).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- Générations API :
immediate,1h,1d,7dou30d.nullpour les générations Studio, conservées jusqu’à leur suppression. expires_atstring | null- Temps de conservation du contenu (prompt, entrées, résultats et médias), défini à la fin de la génération. Avec
immediate, le délai passe à 10 minutes après la première livraison du résultat. purged_atstring | null- À renseigner une fois le contenu supprimé.
outputvaut alorsnull,inputne conserve que les paramètres qui déterminent le prix etcontent_expireden indique la raison. Le coût et les horodatages sont conservés. urlsobject- Uniquement dans la réponse à l’envoi : les URL
getetcancelde cette génération.
Lister les modèles#
/api/v1/modelsPublic · sans authentificationRenvoie tous les modèles disponibles, leurs points de terminaison et leurs tarifs en direct. Les tarifs sont par unit (second de vidéo ou image) ; list_price_usd est le tarif public de référence et discount_pct l’économie en pourcentage.list_price_source indique le type de tarif : official (tarif public du développeur) ou reference (un autre tarif, nommé par list_price_label — par exemple fal API pour un modèle dont le développeur ne commercialise pas d’API internationale).
curl https://cheapergen.com/api/v1/models{
"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": []
}
]
}Limité à un seul modèle pour alléger l’exemple.
Récupérer un modèle#
/api/v1/models/{vendor}/{model}Public · sans authentificationRenvoie un modèle avec un schéma JSON pour les entrées de chacun de ses points de terminaison — utile pour créer des formulaires ou valider des requêtes avant envoi. Renvoie 404 not_found si le modèle est inconnu.
curl https://cheapergen.com/api/v1/models/bytedance/seedream-5.0-pro{
"id": "bytedance/seedream-5.0-pro",
"object": "model",
"name": "Seedream 5.0 Pro",
"vendor": "ByteDance",
"category": "image",
"available": true,
"description": "Seedream 5.0 Pro de ByteDance crée et retouche des images photoréalistes jusqu’en 2K, avec des retouches précises de plusieurs images et un rendu fidèle du texte.",
"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": "Texte en image",
"output": "image",
"input_schema": {
"type": "object",
"required": [
"prompt"
],
"properties": {
"prompt": {
"title": "Prompt",
"description": "Décrivez le plan : sujet, action, mouvement de caméra, éclairage et style.",
"type": "string",
"maxLength": 5000
},
"aspect_ratio": {
"title": "Format d’image",
"description": "Format de l’image de sortie.",
"type": "string",
"enum": [
"1:1",
"4:3",
"3:4",
"16:9",
"9:16",
"3:2",
"2:3",
"21:9"
],
"default": "1:1"
},
"size": {
"title": "Taille",
"description": "1K ≈ 1 mégapixel, 2K ≈ 4 mégapixels.",
"type": "string",
"enum": [
"1K",
"2K"
],
"default": "2K"
},
"seed": {
"title": "Seed",
"description": "Réutilisez le même seed et les mêmes paramètres pour reproduire un résultat. Laissez ce champ vide pour une valeur aléatoire.",
"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": []
}Limité à un seul point de terminaison pour alléger l’exemple.
Dépréciation et changements de tarifs#
Nous annonçons à l’avance les hausses de prix et le retrait des modèles : au moins 14 jours avant une hausse (davantage si votre contrat le prévoit) et 14 à 30 jours avant le retrait d’un modèle. Nous en informons par e-mail tous les clients qui l’ont utilisé au cours des 90 derniers jours et publions l’annonce sur journal des changements (flux RSS). L’API fournit les mêmes informations pour que votre code et vos agents puissent réagir :
deprecationobject | null- Sur Lister les modèles et Récupérer un modèle. Renseigné lorsque le retrait d’un modèle est programmé :
sunset_at(ISO 8601 ; à partir de cette date, les requêtes renvoient410 model_delistedet rien n’est facturé),replacement(identifiants des modèles de remplacement recommandés, du meilleur au moins adapté),reason,announced_atetinfo_url. Sinon,null. upcoming_price_changesarray- Changements de prix programmés par palier, pas encore appliqués :
tier,effective_at,current_price_usdet le nouveau tarifprice_usdparunit. Les requêtes envoyées avant leeffective_atsont facturées au tarif actuel ; le prix d’une génération ne change jamais après son envoi. Vide si aucun changement n’est programmé. warningsarray- Sur Envoyer une génération et Obtenir un devis, uniquement s’il y a une information à signaler :
model_deprecated(avecsunset_atetreplacement) ouprice_change_scheduledpour le palier de la requête (aveceffective_atet le nouveau tarifprice_usd). Chaque élément comprend un champmessageexplicite et un champinfo_url.
curl https://cheapergen.com/api/v1/models/bytedance/seedance-2.0-fast{
"id": "bytedance/seedance-2.0-fast",
"object": "model",
"…": "…",
"deprecation": {
"sunset_at": "2026-11-20T00:00:00.000Z",
"replacement": [
"bytedance/seedance-2.0-fast"
],
"reason": "Le développeur retire ce modèle.",
"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"
}
]
}En-têtes Deprecation et Sunset#
Pendant la période précédant le retrait d’un modèle, ses réponses — POST /run, POST /quote et GET /models/{vendor}/{model} — contiennent les en-têtes standards, que les clients HTTP et les passerelles API peuvent enregistrer ou utiliser pour déclencher une alerte :
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) correspond à la date d’annonce du retrait, sous forme d’horodatage Unix ; Sunset (RFC 8594) indique quand les requêtes cessent d’être traitées. Le changement se fait sur une seule ligne : envoyez la même requête au point de terminaison du modèle de remplacement (consultez son schéma d’entrée pour connaître les différences d’options).
list_models et get_model contiennent les mêmes champs deprecation et upcoming_price_changes, ainsi qu’un résumé notice en une ligne. Les agents peuvent ainsi prévenir l’utilisateur avant de s’appuyer sur un modèle en cours de retrait.Obtenir un devis#
/api/v1/quote/{endpoint}Public · sans authentificationÉvalue le prix d’une entrée sans lancer de génération. Seuls les champs qui déterminent le prix (résolution, durée, taille, nombre d’images, etc.) sont pris en compte ; les champs de contenu tels que prompt et les URL de référence sont ignorés, et les valeurs omises prennent leur valeur par défaut. available vaut false si le modèle n’accepte temporairement pas de générations.
Les vidéos de référence ajoutent des secondes facturées. Pour les inclure, transmettez reference_video_durations (durée en secondes, une valeur par clip) à titre indicatif ; /run mesure les fichiers réels et réserve le montant correspondant. Voir Facturation.
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}'{
"amount_usd": 0.4494,
"list_usd": 0.6048,
"list_price_source": "official",
"list_price_label": "Official",
"discount_pct": 26,
"available": true,
"currency": "usd"
}Envoyez votre clé API pour obtenir votre tarif personnalisé. Si votre compte en possède un — un tarif contractuel ou un forfait Pro ou Max — le devis inclut aussi custom_price: true et standard_amount_usd (le tarif habituel), ainsi que volume_level (1 ou 2) si le forfait Pro (1) ou Max (2) l’a fixé.
Récupérer les informations du compte#
/api/v1/accountClé API requiseRenvoie votre solde et vos paramètres de recharge automatique. balance_usd correspond au montant disponible ; image_credit_usd est un crédit réservé aux images (par exemple, un crédit de bienvenue), utilisé pour payer les modèles d’image avant votre solde, jamais les vidéos ; reserved_usd est le montant réservé sur votre solde pour les générations en cours. Voir Facturation et crédits.
curl https://cheapergen.com/api/v1/account \
-H "Authorization: Bearer $CHEAPERGEN_API_KEY"{
"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 indique les limites d'API de votre compte et le nombre de ses générations en cours ; si le compte n'a aucune limite, elles valent null, avec unlimited: true. Voir Limites de débit.
Obtenir vos tarifs#
/api/v1/account/pricingClé API requiseRenvoie votre forfait mensuel, le niveau de volume auquel il donne accès et votre tarif personnalisé par palier, à côté du tarif standard. Ajoutez ?model={vendor}/{model} pour un modèle. Le paiement à l’usage ne nécessite aucun forfait : dans ce cas, plan vaut null et custom vaut false. Voir Forfaits mensuels.
custombooleantruesi un forfait Pro ou Max, ou un tarif contractuel, réduit l’un de vos tarifs.planobject | null- Votre forfait mensuel :
{ "id", "status" }, par ex.proetactive(starter,prooumax).nullsans forfait. volumeobjectlevel: 1 si Pro est actif, 2 si Max est actif, sinonnull.rulesarray- Vos tarifs contractuels, actifs et programmés :
scope,status,discount_pctouunit_price_usd,starts_at,ends_atet undescriptionlisible. modelsarray- Tous les modèles couverts par votre forfait ou une règle :
id,name,unitettiers— chacun avecprice_usd(votre tarif),standard_price_usd,custom,volume_level(si le forfait l’a défini) etavailable.
curl "https://cheapergen.com/api/v1/account/pricing?model=bytedance/seedance-2.0-fast" \
-H "Authorization: Bearer $CHEAPERGEN_API_KEY"{
"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": [
"…"
]
}
]
}Téléverser un fichier#
/api/v1/uploadsClé API requiseTéléverse un fichier que vous pouvez transmettre comme URL d’entrée : première image, image de référence, vidéo de référence ou extrait audio de référence. Vous pouvez aussi transmettre directement n’importe quelle URL HTTPS publique au lieu de téléverser le fichier.
| Type | Formats | Taille max. |
|---|---|---|
| Image | PNG, JPEG, WebP, GIF | 20 Mo |
| Vidéo | MP4, MOV | 50 Mo |
| Audio | MP3, WAV, M4A (les modèles acceptent actuellement MP3 ou WAV) | 15 Mo |
Téléversement direct (recommandé)#
Envoyez un JSON contenant le filename, le content_type et le size du fichier, en octets. Vous recevez une URL upload_url à durée de vie limitée ; envoyez les octets bruts vers cette URL en utilisant la méthode HTTP PUT, avec exactement la valeur renvoyée pour le champ headers, puis utilisez url comme entrée. Le fichier est envoyé directement vers le stockage : aucune limite de taille de requête ne s’applique en dehors des limites indiquées ci-dessus. L’URL d’envoi expire au bout de 15 minutes. size doit être la taille exacte du fichier en octets : envoyez en PUT exactement ce nombre d’octets avec un Content-Length (pas de corps chunked ni en streaming). Le stockage répond 403 à tout le reste.
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}'{
"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"
}curl -X PUT "$UPLOAD_URL" \
-H "Content-Type: video/mp4" \
--data-binary @choreo.mp4Téléversement multipart#
Vous pouvez aussi envoyer multipart/form-data avec un champ file ; nous stockons alors le fichier pour vous et renvoyons 201 Created avec le champ url. Les octets transitent par notre API, dont le corps des requêtes est limité à environ 4.5 Mo : pour les fichiers plus volumineux, utilisez l’envoi direct. Si l’envoi direct n’est pas disponible sur un déploiement, la requête JSON renvoie 501 direct_upload_unavailable ; utilisez alors l’envoi multipart.
curl -X POST https://cheapergen.com/api/v1/uploads \
-H "Authorization: Bearer $CHEAPERGEN_API_KEY" \
-F "file=@first-frame.png"{
"object": "upload",
"url": "https://cdn.cheapergen.com/uploads/7f3k2m9q/0b8d2c5e1a7f4h6j9k3m.png",
"kind": "image",
"content_type": "image/png",
"bytes": 1834221
}Utiliser une image téléversée#
Transmettez l’URL renvoyée dans le champ image d’un point de terminaison de conversion d’image en vidéo ou de retouche :
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": "La caméra avance tandis qu’elle se retourne et sourit ; ses cheveux bougent dans le vent",
"image_url": "https://cdn.cheapergen.com/uploads/7f3k2m9q/0b8d2c5e1a7f4h6j9k3m.png",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 5
}'Références par modèle
Chaque modèle possède sa propre page API, qui indique pour chaque champ son type, sa valeur par défaut et les valeurs autorisées, avec des exemples à copier-coller — consultez la page liste des modèles pour commencer.Quelque chose n’est pas clair ou manque ? Écrivez à support@cheapergen.com : nous lisons tous les messages.