Créditos y uso

Cómo se cobran, liquidan y reembolsan las llamadas de la Direct API, cómo presupuestar un trabajo de antemano y cómo leer el gasto y el registro de su clave.

La Direct API cobra créditos de Morphic del saldo de su organización, el mismo fondo que usa Studio, y cada respuesta indica cuántos.

  • Las llamadas de la Direct API se cobran según las tarifas de API de su organización, que pueden diferir de lo que cuesta el mismo trabajo en Studio. Todas las cifras que le da la API ya las reflejan: los presupuestos de plan_media, estimated_credits, el bloque billing, las lecturas de generaciones, los webhooks y /usage.
  • Las tarifas se fijan por organización y no se publican. Su contacto de cuenta puede compartir con usted su hoja de tarifas de API.
  • Un cambio de tarifa se aplica a las generaciones iniciadas después de él; una generación en curso se liquida con la tarifa con la que se inició.
  • En Studio, en 'Configuración' > 'Créditos', el gasto de la API aparece como una fila propia, 'API', junto a sus miembros, y 'Desglosar la API por clave' lo detalla por clave. Se descuenta de los créditos de la organización pero nunca de la asignación de un miembro, y los límites de créditos de cada clave lo acotan.

Cómo se cobra una generación

  1. Al iniciarse, a la generación se le cobra su precio presupuestado. La respuesta de inicio lo indica en billing.credits_charged y result.estimated_credits.
  2. Algunas salidas se cobran según lo que realmente se produce: la voz y la música según la duración producida, los renderizados de línea de tiempo según el tiempo de cómputo. Llevan credits_settle_on_output_duration: true; el cobro inicial es un mínimo, y el importe final se liquida cuando termina la generación.
  3. Una generación que termina en failed o cancelled se reembolsa por completo, y billing.credits_refunded indica los créditos devueltos. Una generación correcta también puede llevar un reembolso parcial, por ejemplo cuando una salida liquidada resultó más corta de lo que cubría el cobro inicial.
  4. Una vez que una generación es final, billing.credits_charged es el total neto en el registro (cobro inicial, más o menos la liquidación, menos credits_refunded) y credits_are_final es true. Una generación fallida o cancelada termina con credits_charged: 0 y credits_refunded igual a lo que se le cobró.
CampoSignificado
estimated_creditsel precio presupuestado y cobrado al inicio
credits_chargedlos créditos netos registrados hasta ahora para esta generación, tras la liquidación y los reembolsos
credits_refundedtodos los créditos devueltos por esta generación: el cobro completo en failed o cancelled, cualquier reembolso parcial en una correcta; 0 si no hay ninguno, nunca negativo
credits_are_finalfalse mientras la generación está en curso o queda pendiente una liquidación o un reembolso; true cuando ya nada lo va a cambiar
credits_settle_on_output_durationtrue cuando el cobro inicial es un mínimo que se liquida a partir de la salida producida

Mientras una generación está en curso, credits_charged es igual al cobro inicial. Vuelva a leerla cuando sea final para obtener el importe liquidado; solo se envía un webhook cuando ya lo es.

Facturación en cada respuesta

El bloque billing de la respuesta de una llamada indica lo que cobró la llamada en el momento de responder; Llamar a una herramienta lo detalla por tipo de llamada. Los reembolsos se producen después, así que aparecen en la generación (GET /generations/{id} y /usage), nunca en la respuesta original.

  • Una herramienta de pago que responde dentro de la llamada y cuyo trabajo falla, como analyze_video, responde con credits_charged: 0 y credits_refunded con el importe reembolsado.
  • El encabezado Morphic-Credits-Charged: <integer> lleva la misma cifra que billing.credits_charged, salvo en una repetición idempotente, que no cobra nada más y envía 0 mientras su cuerpo repite el cobro original.

Presupueste antes de gastar

POST /v1/direct/tools/plan_media valida un plan de hasta 20 pasos y pone precio a los pasos que puede, sin iniciar ni 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 los campos de recursos cuyas salidas todavía no existen e indique en depends_on el paso del que proceden.
  • Cada paso recibe su validation, su quote_status y sus estimated_credits.
  • El resultado también da el execution_order, known_estimated_credits, unquoted_step_ids y complete_estimate. Cuando complete_estimate es false, la suma es un límite inferior, no un presupuesto.

Clave y saldo

GET /v1/direct/me devuelve la clave que hace la llamada, sus límites y su gasto, y el saldo de la organización. Cualquier clave puede llamarlo.

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
  }
}

Registro de uso

GET /v1/direct/usage (permiso assets:read) devuelve cada entrada del registro que causó la clave, para conciliarla con sus propios registros.

Parámetro de consultaSignificado
from, tolímites ISO 8601 sobre created_at; por defecto, los últimos 30 días, como máximo 92 días
generation_idsolo las entradas de una generación
limitde 1 a 200, por defecto 50
cursorel next_cursor de la 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 es charge, settlement o refund; un valor negativo de credits devuelve créditos.
  • totals abarca todo el intervalo filtrado, no solo la página.
  • Una herramienta que responde dentro de la llamada (analyze_video, analyze_audio, filmlab_edit) no inicia ninguna generación, así que sus entradas llevan generation_id: null y se distinguen por tool.

Si tiene algún problema o alguna pregunta, no dude en ponerse en contacto con nosotros. Estaremos encantados de ayudarle. Escríbanos a support@morphic.com.

En esta página