X3DStudios

Credits

Credits pay for AI generation on X3D — what a run costs, how many you start with, where more come from, and why they never pay for a physical print.

Credits buy AI generation: turning a prompt or a photo into a 3D model, re-texturing one you already made, and generating or editing images. A new account starts with 5. This page lists what every operation costs, where more credits come from, what happens when you run out, and whether they expire.

Credits are for generation, not for printing
A physical print is a separate purchase in dollars. It is quoted from the weight of the part at an all-in per-gram rate — PLA and PETG and ABS at $0.12/g, TPU at $0.13/g, ASA at $0.14/g, with 0.1mm premium layers at 1.75x and a $1.00 minimum per part — and charged to a card. Ordering a print never spends a credit, and a zero balance never blocks an order. See /docs/pricing for the full rate card.

What a credit buys#

OperationCreditsNotes
3D generation, fast draft1 + add-onsThe default mode. See the add-ons below.
3D generation, hi-fi2 + add-onsPrompt enhancement and engine routing are model-written rather than local.
Re-texture an existing model1Flat. Mesh quality and texture settings do not change it.
Image generation1 per image2 per image at 4K. 1 to 4 images per request, so 1 to 8 credits.
Image edit12 at 4K. Charged once per request, however many source images you send.
Printability check0Free, and it works without an account.
Model import from a URL0Free.
Price quote0Free and public.

3D generation add-ons#

The base cost is 1 for fast draft, 2 for hi-fi. Everything below is added on top of it:

OptionAdded
Input is an image, image plus text, or multiview+1
Mesh quality high+1
Mesh quality ultra+2
Texture resolution 4k+1
Texture resolution 8k+2
Refinement pass+2
The texture surcharge is not always charged
A 4k or 8k surcharge is only added when the run will actually reach an engine that can return a textured mesh. One combination cannot: a text-only fast draft on anything but a Tripo engine, which includes the default auto setting. Any hi-fi run, any image or multiview input, and any draft pinned to a Tripo engine can texture, and are charged. A refinement pass is a genuine second generation task, which is why it costs a full 2 rather than a surcharge.
  • Text prompt, fast draft, standard mesh, 2k texture: 1 credit.
  • Photo, fast draft, standard mesh: 2 credits.
  • Text prompt, hi-fi, ultra mesh: 4 credits.
  • Photo, hi-fi, ultra mesh, 8k texture, refinement pass: 9 credits.

Where credits come from#

SourceCreditsPriceCadence
Signup grant5FreeOnce, when your account's credit record is created at email verification
Maker plan100$19 / monthAdded on every paid invoice
Pro Studio plan400$49 / monthAdded on every paid invoice
Small pack60$10 ($0.17 each)One-time
Medium pack150$22 ($0.15 each)One-time
Large pack400$50 ($0.13 each)One-time
Packs are one-time purchases and need no subscription. The Enterprise tier on /pricing is a conversation rather than a checkout — it has no fixed allowance in the system.

Both plans also carry a monthly dollar print credit — $5 on Maker, $10 on Pro. That is a separate balance in cents, applied to a print order, and it is not interchangeable with generation credits in either direction.

POST/api/checkoutSigned in

Create a Stripe Checkout session for a credit pack or a plan. This is what the buttons on /pricing call.

Body
typestringrequired
Use credits for a top-up pack, subscription for a plan.creditssubscriptionproduct
packstringoptional
Required when type is credits. Anything else returns 400 'Invalid credit pack'.smallmediumlarge
planstringoptional
Required when type is subscription. Anything else returns 400 'Invalid plan'.makerpro

The response is { url, sessionId }; send the customer to url. Signed-out callers get 401 'Authentication required', and 503 'Stripe not configured' means billing is switched off in that environment. POST /api/billing/checkout is the equivalent route on the billing surface: it takes the same three packs under type credit_topup and the same two plans under type subscription, and it refuses print orders outright because a print has to be priced from the stored model rather than from a number the browser sent.

Credits land on the webhook, not on the redirect
The balance moves when Stripe confirms payment, not when the browser comes back from checkout. Each grant is written once against a key built from the Stripe checkout session id for a pack, or the invoice event id for a plan, so a redelivered webhook cannot credit you twice — and a slow webhook means the balance appears a moment after the redirect.

Do they expire?#

No. Generation credits are a plain running balance with no expiry date and no monthly reset. A plan's allowance is added to whatever you already hold each time an invoice is paid, so an unused month carries forward. Cancelling a plan clears the plan flag and zeroes the dollar print credit, but the generation balance you have already accumulated is left alone and stays spendable.

BalanceOn a paid invoiceOn cancellation
Generation creditsAllowance is added to the balanceUntouched
Print credit (dollars)Set to the plan's amount for the cycleSet to $0
The print credit is refreshed, not accrued, so unspent print credit does not roll over.

Running out#

Credits are checked and deducted before the engine is called, so an underfunded request is refused rather than half-run. The refusal is machine-readable and tells you exactly how short you are.

403 from POST /api/generate
{
  "error": "no_credits",
  "message": "This generation costs 4 credits but you only have 2. Add credits to continue.",
  "needsPayment": true,
  "creditsRequired": 4,
  "creditsAvailable": 2
}
EndpointStatus when out of credits
POST /api/generate403
POST /api/retexture403
POST /api/images/generate402
POST /api/images/edit402
The status differs by surface. Branch on the error string no_credits rather than on the status code.

needsPayment is true until you have paid us for credits at least once — buying any pack or paying any plan invoice flips it. It is a hint for the interface about which prompt to show, not a permission.

Refunds#

Because the charge happens first, a failure has to give the credits back. Three things do that:

  • A generation that returns a non-2xx response or throws is refunded on the spot and its history row is marked failed.
  • A generation still unfinished after 60 minutes is expired by a sweep, marked failed, and refunded.
  • A re-texture that fails after the credit was taken is refunded the same way.

Every refund is written against an idempotency key derived from the generation id, so the live request and the sweep can race without paying out twice. A refund restores generation credits only — it never changes your plan or your paid-account state.

The chat assistant has its own counter
Asking the support assistant a question does not touch these credits. It runs on a separate monthly allowance: 5 free a month, plus one more for every $2 you have spent with us in the trailing 30 days, capped at 500 a month. Only a real answer is metered — a failed or offline reply is free, and messaging a human is never metered.

Checking your balance#

Your balance is attached to your session and re-read on every request, so it is current on any signed-in page without a refresh. The generation API also returns creditsCharged on every successful run, which is the cheapest way for an integration to reconcile what it spent. There is one balance per account, keyed on your email address: a generation started from the Chrome extension spends the same credits as one started on the site.