EasyDown API Docs

Créditos y facturación de la API

Consulta tarifas por plataforma, cargos por restricciones confirmadas, errores gratuitos, cabeceras de saldo y facturación de caché.

Los análisis correctos se cobran según la plataforma. La mayoría de las demás plataformas compatibles: 1 crédito; YouTube: 3 créditos; Threads: 2 créditos; Kuaishou / Kwai: 2 créditos; RedNote / Xiaohongshu: 10 créditos. Un error, una respuesta vacía o contenido no disponible no bastan para cobrar. Sin archivos, solo se cobra si se confirman tanto el coste de procesamiento como una restricción clara del contenido. Esta excepción se aplica actualmente solo a Douyin y Toutiao. Las URL no compatibles, los errores de validación, los tokens inválidos o sin permiso de plataforma, los fallos temporales, los tiempos de espera agotados y los resultados vacíos sin explicación cuestan 0 créditos. El contenido no disponible sin coste confirmado también es gratuito.

PlataformaCréditos por solicitud cobrada
La mayoría de las demás plataformas compatibles1 crédito
YouTube3 créditos
Threads2 créditos
Kuaishou / Kwai2 créditos
RedNote / Xiaohongshu10 créditos

Fuente de verdad: GET /api/v1/capabilities → data.billing.

Cuándo se consumen créditos

Resultado de la solicitudCréditos cobrados
Archivos descargables devueltos, incluida la cachéTarifa de la plataforma, una vez
Coste de procesamiento Y restricción clara confirmados (Douyin / Toutiao)Tarifa de la plataforma, una vez
Token inválido, caducado, revocado o sin permiso de plataforma0
URL no compatible o error de validación0
Fallo temporal, tiempo de espera agotado o resultado vacío sin explicación0
Contenido no disponible sin coste de procesamiento confirmado0

La falta de permisos del token de API no es una restricción del contenido y no se cobra. Cobrar el procesamiento no significa que EasyDown pueda obtener contenido privado, eliminado o restringido.

Cada solicitud se cobra una vez a la tarifa de la plataforma, sin multiplicar por archivos, calidades o intentos internos. La caché que devuelve archivos usa la misma tarifa. Un nuevo envío es una nueva solicitud, no un reintento gratuito.

Respuesta

Las respuestas comerciales cobradas incluyen el cargo real y el saldo, incluso si el contenido no está disponible:

  • X-Credits-Charged: {actual_credits_charged}
  • X-Credits-Remaining: {balance}
  • X-EasyDown-Cache: HIT | MISS | SUPABASE | BYPASS

X-Credits-Charged indica el cargo real, incluidos los fallos cobrados; X-Credits-Remaining indica el saldo devuelto. Los fallos de contenido no disponible cobrados incluyen X-Credits-Charge-Reason: content_unavailable.

REST y MCP usan las mismas tarifas y la misma excepción por restricción confirmada. MCP devuelve el cargo real en billing.creditsCharged, también cuando el resultado falla.

No deduzcas un cargo cero a partir del estado HTTP, data: null o content_unavailable. Si falta la cabecera de cobro o se interrumpe la conexión, el cargo es desconocido: consulta el historial de uso antes de reenviar.

Para dudas de facturación, escribe a [email protected] con la plataforma, fecha y hora, código de error y registro de uso. Nunca envíes el token de API. Los cargos históricos se revisan con sus registros originales; esta aclaración no modifica transacciones pasadas.

Ejemplos ilustrativos de errores

Estos ejemplos muestran el formato, no son nuevas llamadas de pago reales. Corresponden a /api/v1/platforms/douyin/parse y usan saldos ilustrativos. Los estados del endpoint común pueden ser distintos.

Contenido no disponible tras un coste confirmado: 1 crédito cobrado

HTTP/1.1 404
Content-Type: application/json
X-Credits-Charged: 1
X-Credits-Remaining: 9
X-Credits-Charge-Reason: content_unavailable

{
  "status": 404,
  "data": null,
  "msg": "Content unavailable after processing",
  "code": "content_unavailable"
}

Créditos insuficientes: 0 créditos cobrados

HTTP/1.1 402
Content-Type: application/json
X-Credits-Charged: 0
X-Credits-Remaining: 0

{
  "status": 402,
  "data": null,
  "msg": "Insufficient credits",
  "code": "insufficient_credits"
}

Comprueba el cobro antes de gestionar el error

Lee las cabeceras de cobro antes de gestionar el error. No reintentes automáticamente un fallo de contenido restringido ya cobrado; otro envío puede generar otro cargo.

const response = await fetch('https://api.easydown.org/api/v1/platforms/douyin/parse', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.EASYDOWN_API_TOKEN}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ url: "https://v.douyin.com/f-QpBB_oD9Y/" }),
});
const chargedHeader = response.headers.get('X-Credits-Charged');
const creditsCharged = chargedHeader === null ? null : Number(chargedHeader);
const chargeReason = response.headers.get('X-Credits-Charge-Reason');
const payload = await response.json();
console.log({ httpStatus: response.status, creditsCharged, chargeReason });
if (!response.ok || payload.status !== 200) {
  if (creditsCharged === null || !Number.isFinite(creditsCharged)) {
    console.warn('Charge unknown: check dashboard usage before resubmitting.');
  }
  // No automatic retry: another submission is a new request.
  throw new Error(payload.code || 'parse_failed');
}