Pricing
How credit consumption works - format costs, ingest billing, plans, trials, and credit packs.
Every paid operation on the API integration debits a single credit wallet on your Layers organization. Ingest is free today; generation costs credits; credit packs are the only way to top up.
New accounts start at 0 credits. The card-required first week costs $9 today, adds 1,000 credits, and converts to Pro monthly after 7 days unless canceled, with the $9 credited toward the first month. Pro is monthly only at $49/month with 5,000 credits. Ultra is $199/month with 25,000 credits.
One-time credit packs add credits to the same wallet: Crawl, 1,000 credits, $9; Walk, 4,000 credits, $29; Run, 10,000 credits, $69; Scale, 20,000 credits, $129. Plans and packs are available in the Layers dashboard. Auto-reload buys one of those same packs, at the same price, whenever the balance falls below a threshold the organization sets; it charges the saved card and needs an active subscription. Variable-amount top-ups are retired. Enterprise pricing is negotiated; contact sales@layers.com.
For the programmatic wallet check used before a generate call, see GET /v1/credits.
Format cost table (in credits)
Credits per operation are the same on every plan - what varies is the $/credit your plan charges. The numbers below match estimatedCreditsPerFormat returned by GET /v1/credits.
| Format | Credits | Status |
|---|---|---|
slideshow-builder | 85 | Available. |
ugc-remix | 200 | Available (gated on media:write for the required app-demo upload). |
video-remix | 200 | Reserved; not partner-callable. Returns UNSUPPORTED_FORMAT. |
slideshow-remix | 85 | Reserved; not partner-callable. Returns UNSUPPORTED_FORMAT. |
Multi-variant fan-out (variantCount > 1) charges N × per-format credits — the request is gated by your wallet balance pre-flight; if the multiplied cost exceeds the balance the call returns 402 BILLING_EXHAUSTED before any container is created.
Ingest costs
Ingest calls are free today. The GET /v1/credits response reflects this on the ingestCostsBilled object - all three flags are false.
| Ingest | Billed today? |
|---|---|
POST /v1/projects/:id/ingest/github | No (false) |
POST /v1/projects/:id/ingest/website | No (false) |
POST /v1/projects/:id/ingest/appstore | No (false) |
If Layers ever flips one of these to billed, we commit to 30-day advance notice via partner notice and an update in this page's change history below listing the exact per-call credit deduction. The ingestCostsBilled flag on /v1/credits will flip to true on the same date, so partners who gate programmatically will see it before a single bill posts.
Credit packs and exhaustion
At balance zero, every credit-spending call returns 402 BILLING_EXHAUSTED:
{
"error": {
"code": "BILLING_EXHAUSTED",
"message": "Credit balance exhausted. Top up to resume.",
"requestId": "req_8a1f2c3d4e5f6a7b",
"details": { "reason": "insufficient" }
}
}details.reason is "insufficient" when the wallet can't cover the call, or "cap" when a sub-org child hit its monthlyCreditCap.
Calls that do not spend credits (reads, whoami, job polling, webhook receipt) continue to work - the plan gate only blocks credit-spending operations.
Credit packs are the only top-up mechanism. Purchase them manually in the Layers dashboard:
- Crawl, 1,000 credits, $9.
- Walk, 4,000 credits, $29.
- Run, 10,000 credits, $69.
- Scale, 20,000 credits, $129.
Layers does not automatically charge for a top-up or replenish a wallet. The sub-organization auto-refill described below only transfers credits already held by the parent; it does not purchase credits.
Sub-organization billing
When you run customers as sub-organizations, the parent stays the billing principal — only the parent has a card on file, and only the parent is ever charged. Moving credits to a child is never a new charge:
- Allocation (
POST /:orgId/credits/allocate) is an internal transfer of already-purchased prepaid credits from the parent wallet to the child. No Stripe event, no markup — the same credits, now spendable by the child. Reclaim on archive runs the same transfer in reverse. - Per-child monthly cap is a budget control, not a price: it bounds how many credits a child may spend per period. Set it with
PATCH /:orgId/credit-config(monthlyCreditCap, in credits). At the cap, the child's next generation returns402 BILLING_EXHAUSTEDwithdetails.reason: "cap"— it doesn't change the cost of anything. - Auto-refill is an automated parent→child transfer (no Stripe charge) that tops a child up when it runs low. Set
refillThreshold+refillAmountvia credit-config. It draws from the parent's existing balance; if the parent is itself exhausted, the refill is a no-op and the child gets402. See the Credits concept.
Format costs (the table above) are identical for a child and a top-level org — a slideshow costs the same number of credits wherever it's generated.
Forecasting spend
Use estimatedCreditsPerFormat from GET /v1/credits as the pre-flight check before firing a generate call. The response also carries usedThisPeriod and includedRemaining - everything you need to render a "you've used X of Y this period" bar in your own dashboard.
const wallet = await fetch("https://api.layers.com/v1/credits", {
headers: { "Authorization": `Bearer ${process.env.LAYERS_API_KEY}` },
}).then((r) => r.json());
const cost = wallet.estimatedCreditsPerFormat["slideshow_builder"];
if (wallet.balance < cost) {
// 402 will fire if we proceed; warn the user and link to top-up.
throw new Error(`Low balance: ${wallet.balance} < ${cost}`);
}Change history
Material changes to credit-per-operation rates or ingest billing land here with a date. Non-material changes (copy edits, clarifications) are not logged. Subscription-tier $/credit changes are plan-level and do not appear here.
| Date | Change |
|---|---|
| 2026-08-27 | Updated slideshow formats to 85 credits and video formats to 200 credits. Replaced automatic top-up instructions with the current trial, plans, and one-time credit packs. |
| 2026-05-08 | Replaced legacy `video_remix |
| 2026-04-20 | Initial publication of the credit-cost table and ingest-billing policy. No changes to credits-per-operation vs prior implicit defaults. |
See also
GET /v1/credits- programmatic wallet check- Errors -
BILLING_EXHAUSTED(402) semantics - Rate limits - per-tier rate ceilings