Créditos e uso
Como as chamadas da Direct API são cobradas, acertadas e reembolsadas, como orçar um trabalho antes e como ler o gasto e o extrato da sua chave.
A Direct API cobra créditos do Morphic do saldo da sua organização, o mesmo saldo que o Studio usa, e toda resposta informa quantos.
- As chamadas da Direct API são cobradas pelas tarifas de API da sua organização, que podem ser diferentes do custo do mesmo trabalho no Studio. Todos os números que a API fornece já as refletem: orçamentos de
plan_media,estimated_credits, o blocobilling, leituras de gerações, webhooks e/usage. - As tarifas são definidas por organização e não são publicadas. O seu contato comercial pode compartilhar a sua tabela de tarifas da API.
- Uma mudança de tarifa vale para as gerações iniciadas depois dela; uma geração em andamento é acertada pela tarifa com que começou.
- No Studio, em Configurações > Créditos, o gasto da API aparece em uma linha própria, API, ao lado dos seus membros, e Detalhar a API por chave mostra o gasto por chave. Ele sai dos créditos da organização, mas nunca da cota de um membro, e os limites de créditos de cada chave o limitam.
Como uma geração é cobrada
- No início, a geração é cobrada pelo preço orçado. A resposta de início o informa em
billing.credits_chargederesult.estimated_credits. - Alguns resultados têm preço pelo que é efetivamente produzido: fala e música pela duração produzida, renderizações de linha do tempo pelo tempo de processamento. Eles trazem
credits_settle_on_output_duration: true; a cobrança inicial é um piso, e o valor final é acertado quando a geração termina. - Uma geração que termina em
failedoucancelledé reembolsada integralmente, ebilling.credits_refundedinforma os créditos devolvidos. Uma geração concluída com sucesso também pode ter um reembolso parcial, por exemplo quando um resultado acertado saiu mais curto do que a cobrança inicial cobria. - Quando uma geração é final,
billing.credits_chargedé o total líquido no extrato (cobrança inicial, mais ou menos o acerto, menoscredits_refunded) ecredits_are_finalétrue. Uma geração com falha ou cancelada termina comcredits_charged: 0ecredits_refundedigual ao que foi cobrado.
| Campo | Significado |
|---|---|
estimated_credits | o preço orçado e cobrado no início |
credits_charged | os créditos líquidos registrados para esta geração até agora, após acerto e reembolsos |
credits_refunded | todos os créditos devolvidos para esta geração: a cobrança inteira em failed ou cancelled, qualquer reembolso parcial em uma concluída com sucesso; 0 quando não há, nunca negativo |
credits_are_final | false enquanto a geração está em andamento ou um acerto ou reembolso ainda está pendente; true quando nada mais vai alterá-lo |
credits_settle_on_output_duration | true quando a cobrança inicial é um piso acertado a partir do resultado produzido |
Enquanto uma geração está em andamento, credits_charged é igual à cobrança inicial. Leia-a de novo quando a geração for final para obter o valor acertado; um webhook só é enviado quando ela já é final.
Cobrança em cada resposta
O bloco billing na resposta de uma chamada informa o que a chamada cobrou no momento em que respondeu; Chamar uma ferramenta o detalha por tipo de chamada. Os reembolsos acontecem depois, então aparecem na geração (GET /generations/{id} e /usage), nunca na resposta original.
- Uma ferramenta paga que responde dentro da chamada e cujo trabalho falha, como
analyze_video, responde comcredits_charged: 0ecredits_refundedpreenchido com o reembolso. - O cabeçalho
Morphic-Credits-Charged: <integer>traz o mesmo número quebilling.credits_charged, exceto em uma repetição idempotente, que não cobra nada a mais e envia0, enquanto o corpo repete a cobrança original.
Orce antes de gastar
POST /v1/direct/tools/plan_media valida um plano de até 20 etapas e orça as etapas que conseguir, sem iniciar nem cobrar nada.
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"] }
]
}
}'- Omita os campos de recurso cujos resultados ainda não existem e indique em
depends_ona etapa de onde eles vêm. - Cada etapa recebe a sua
validation, o seuquote_statuse os seusestimated_credits. - O resultado também traz
execution_order,known_estimated_credits,unquoted_step_idsecomplete_estimate. Quandocomplete_estimateéfalse, a soma é um limite inferior, não um orçamento.
Chave e saldo
GET /v1/direct/me retorna a chave que fez a chamada, seus limites e gastos, e o saldo da organização. Qualquer chave pode chamá-lo.
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
}
}Extrato de uso
GET /v1/direct/usage (escopo assets:read) retorna todos os lançamentos do extrato causados pela chave, para conciliar com os seus próprios registros.
| Parâmetro | Significado |
|---|---|
from, to | limites ISO 8601 sobre created_at; por padrão os últimos 30 dias, no máximo 92 dias |
generation_id | apenas os lançamentos de uma geração |
limit | de 1 a 200, padrão 50 |
cursor | o next_cursor da página anterior |
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
}kindé um decharge,settlementourefund; umcreditsnegativo devolve créditos.totalscobre todo o intervalo filtrado, não apenas a página.- Uma ferramenta que responde dentro da chamada (
analyze_video,analyze_audio,filmlab_edit) não inicia nenhuma geração, então os lançamentos dela trazemgeneration_id: nulle se distinguem portool.
Se você tiver algum problema ou alguma dúvida, entre em contato. Teremos prazer em ajudar. Escreva para nós em support@morphic.com.