Crédits et consommation
Comment les appels de la Direct API sont facturés, régularisés et remboursés, comment obtenir un devis avant de lancer un travail, et comment lire les dépenses et le registre de votre clé.
La Direct API facture des crédits Morphic sur le solde de votre organisation, la même réserve que celle utilisée par Studio, et chaque réponse en indique le nombre.
- Les appels de la Direct API sont facturés aux tarifs API de votre organisation, qui peuvent différer du coût du même travail dans Studio. Tous les chiffres que l’API vous fournit en tiennent déjà compte : les devis
plan_media,estimated_credits, le blocbilling, les lectures de génération, les webhooks et/usage. - Les tarifs sont fixés par organisation et ne sont pas publiés. Votre contact Morphic peut vous transmettre votre grille tarifaire API.
- Un changement de tarif s’applique aux générations lancées après celui-ci ; une génération en cours est régularisée au tarif en vigueur à son lancement.
- Dans Studio, sous « Paramètres » > « Crédits », les dépenses API apparaissent sur leur propre ligne, « API », à côté de vos membres, et « Répartir l’API par clé » les détaille clé par clé. Elles sont prélevées sur les crédits de l’organisation, jamais sur l’allocation d’un membre, et les limites de crédits de chaque clé les plafonnent.
Comment une génération est facturée
- Au lancement, la génération est facturée à son prix de devis. La réponse de lancement l’indique dans
billing.credits_chargedetresult.estimated_credits. - Certains résultats sont facturés selon ce qui est réellement produit : la voix et la musique selon la durée produite, les rendus de timeline selon le temps de calcul. Ils portent
credits_settle_on_output_duration: true; le montant facturé au lancement est un plancher, et le montant final est régularisé à la fin de la génération. - Une génération qui se termine en
failedoucancelledest intégralement remboursée, etbilling.credits_refundedindique les crédits rendus. Une génération réussie peut aussi faire l’objet d’un remboursement partiel, par exemple lorsqu’un résultat régularisé est plus court que ce que couvrait le montant facturé au lancement. - Une fois la génération finale,
billing.credits_chargedest le total net inscrit au registre (montant du lancement, plus ou moins la régularisation, moinscredits_refunded) etcredits_are_finalvauttrue. Une génération en échec ou annulée se termine aveccredits_charged: 0et uncredits_refundedégal à ce qui avait été facturé.
| Champ | Signification |
|---|---|
estimated_credits | le prix du devis, facturé au lancement |
credits_charged | les crédits nets enregistrés pour cette génération jusqu’ici, après régularisation et remboursements |
credits_refunded | tous les crédits rendus pour cette génération : la totalité du montant facturé en cas de failed ou cancelled, tout remboursement partiel sur une génération réussie ; 0 s’il n’y en a aucun, jamais négatif |
credits_are_final | false tant que la génération est en cours ou qu’une régularisation ou un remboursement reste à venir ; true une fois que plus rien ne le modifiera |
credits_settle_on_output_duration | true lorsque le montant facturé au lancement est un plancher régularisé d’après le résultat produit |
Pendant qu’une génération est en cours, credits_charged est égal au montant facturé au lancement. Relisez-la une fois finale pour obtenir le montant régularisé ; un webhook n’est envoyé qu’à ce moment-là.
Facturation dans chaque réponse
Le bloc billing de la réponse à un appel indique ce que l’appel a facturé au moment où il a répondu ; Appeler un outil le détaille par type d’appel. Les remboursements interviennent plus tard : ils apparaissent donc sur la génération (GET /generations/{id} et /usage), jamais dans la réponse d’origine.
- Un outil payant qui répond pendant l’appel et dont le travail échoue, comme
analyze_video, répond aveccredits_charged: 0etcredits_refundedégal au remboursement. - L’en-tête
Morphic-Credits-Charged: <integer>porte le même nombre quebilling.credits_charged, sauf lors d’une relecture idempotente, qui ne facture rien de plus et envoie0alors que son corps reprend le montant d’origine.
Obtenir un devis avant de dépenser
POST /v1/direct/tools/plan_media valide un plan de 20 étapes au plus et chiffre les étapes qu’il peut chiffrer, sans rien lancer ni facturer.
curl -s https://mcp.morphic.com/v1/direct/tools/plan_media \
-H "Authorization: Bearer $MORPHIC_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": {
"steps": [
{ "id": "still", "tool_name": "generate_image", "arguments_json": "{\"prompt\":\"A red vintage bicycle\",\"aspect_ratio\":\"16:9\"}" },
{ "id": "clip", "tool_name": "generate_video", "arguments_json": "{\"prompt\":\"The bicycle rolls away\",\"duration_seconds\":8}", "depends_on": ["still"] }
]
}
}'- Omettez les champs d’asset dont les résultats n’existent pas encore, et indiquez dans
depends_onl’étape dont ils proviennent. - Chaque étape reçoit sa
validation, sonquote_statuset sesestimated_credits. - Le résultat fournit aussi
execution_order,known_estimated_credits,unquoted_step_idsetcomplete_estimate. Lorsquecomplete_estimatevautfalse, la somme est un minimum, pas un budget.
Clé et solde
GET /v1/direct/me renvoie la clé appelante, ses limites et ses dépenses, ainsi que le solde de l’organisation. Toutes les clés peuvent l’appeler.
curl -s https://mcp.morphic.com/v1/direct/me \
-H "Authorization: Bearer $MORPHIC_API_KEY"{
"api_key": {
"id": "01928e00-…",
"name": "Order pipeline (prod)",
"scopes": ["assets:read", "assets:write", "generations:write", "projects:read"],
"expires_at": null,
"credit_limits": {
"total": { "limit": 500000, "used": 182340, "remaining": 317660 },
"monthly": { "limit": 100000, "used": 41200, "remaining": 58800, "resets_at": "2026-11-01T00:00:00.000Z" },
"daily": { "limit": null, "used": 2310, "remaining": null, "resets_at": "2026-10-26T00:00:00.000Z" }
}
},
"organization": {
"id": "01928d00-…",
"plan": "enterprise",
"remaining_credits": 1240000,
"unlimited": false
}
}Registre de consommation
GET /v1/direct/usage (autorisation assets:read) renvoie chaque écriture du registre causée par la clé, pour le rapprochement avec vos propres données.
| Paramètre | Signification |
|---|---|
from, to | bornes ISO 8601 sur created_at ; par défaut les 30 derniers jours, 92 jours au plus |
generation_id | uniquement les écritures d’une génération |
limit | de 1 à 200, 50 par défaut |
cursor | le next_cursor de la page précédente |
curl -s "https://mcp.morphic.com/v1/direct/usage?from=2026-10-01T00:00:00Z&limit=200" \
-H "Authorization: Bearer $MORPHIC_API_KEY"{
"usage": [
{ "id": "0192a7b3-…", "created_at": "2026-10-25T09:14:03.500Z", "kind": "charge", "credits": 120, "generation_id": "0192a7b3-a1c4-…", "tool": "generate_video", "model_id": "mdl_7rk2pq9vxa4m", "metadata": { "order_id": "4411" } },
{ "id": "0192a7b4-…", "created_at": "2026-10-25T09:15:41.950Z", "kind": "settlement", "credits": -24, "generation_id": "0192a7b3-a1c4-…", "tool": "generate_video", "model_id": "mdl_7rk2pq9vxa4m", "metadata": { "order_id": "4411" } }
],
"totals": { "charged": 120, "settled": -24, "refunded": 0, "net": 96 },
"next_cursor": null
}kindvautcharge,settlementourefund; une valeurcreditsnégative rend des crédits.totalscouvre toute la plage filtrée, pas seulement la page.- Un outil qui répond pendant l’appel (
analyze_video,analyze_audio,filmlab_edit) ne lance aucune génération : ses écritures portent doncgeneration_id: nullet se distinguent partool.
Si vous rencontrez le moindre problème ou si vous avez des questions, n’hésitez pas à nous contacter. Nous serons ravis de vous aider. Écrivez-nous à support@morphic.com.
Webhooks
Recevez une notification signée lorsqu’une génération de la Direct API se termine, vérifiez-la, puis lisez la génération pour en obtenir le détail.
Transmettre vos propres médias
Transmettez à Morphic vos propres images, vidéos, fichiers audio et documents par URL, dans n’importe quel champ qui accepte des médias.