remotion-dev/remotion · error · Error

{json.error}

Error message

{json.error}

What it means

getUsage() POSTs to the Remotion licensing server (remotion.pro) and expects a JSON body with success:true. If the server returns success:false it surfaces the server's error string verbatim. Typical server errors are invalid/expired license key, malformed request, or rate limiting.

Source

Thrown at packages/licensing/src/get-usage.ts:60

		body: JSON.stringify({
			apiKey: licenseKey ?? apiKey,
			since: since ?? null,
		}),
		headers: {
			'Content-Type': 'application/json',
		},
	});
	const json = (await res.json()) as GetUsageApiResponse;

	if (json.success) {
		return {
			cloudRenders: json.cloudRenders,
			webRenders: json.webcodecConversions,
			webcodecConversions: json.webcodecConversions,
		};
	}

	throw new Error(json.error);
};

View on GitHub (pinned to 78fe4bb3fd)

Solutions

  1. Read json.error verbatim — the server message states the precise problem (invalid key, quota, etc.).
  2. Verify the license key in the Remotion license dashboard and re-paste it.
  3. Use the correct credential field for your version (licenseKey on v5; apiKey or licenseKey on v4).
  4. Retry after confirming the key, since some failures are transient backend issues.

Example fix

// before
const usage = await getUsage({apiKey: 'old-or-typoed-key'});
// after
const usage = await getUsage({licenseKey: process.env.REMOTION_LICENSE_KEY});
Defensive patterns

Strategy: try-catch

Validate before calling

function looksLikeLicenseKey(k: string | null): boolean {
  return typeof k === 'string' && k.length > 10 && /^[A-Za-z0-9_-]+$/.test(k);
}
if (!looksLikeLicenseKey(process.env.REMOTION_LICENSE_KEY ?? null)) {
  console.warn('License key looks invalid; getUsage may fail.');
}

Type guard

const isValidLicenseKey = (k: unknown): k is string =>
  typeof k === 'string' && k.trim().length > 10;

Try / catch

try {
  const usage = await getUsage({licenseKey});
} catch (e) {
  console.error('Licensing server error:', (e as Error).message);
  // surface to user, do not block render
}

Prevention

When it happens

Trigger: Calling getUsage() with a wrong/expired license key; passing apiKey instead of licenseKey on v5 (or vice versa on v4); network proxies mangling the response; the licensing backend returning a temporary error.

Common situations: Renewed but not re-installed license keys; copy-paste errors in the license key; pointing to the wrong account; license revoked.

Related errors


AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12). Data as JSON: /api/errors/a0690e5a86242e7c. Report an issue: GitHub.