# 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.

Source: https://x3dstudios.com/docs/studio/credits  ·  Updated: 2026-10-18

Credits buy AI generation: turning a prompt or a photo into a 3D model, re-texturing one you already made, rebuilding one from a described change, and generating or editing images. Once your free monthly questions to the site assistant run out, they can also pay for its answers, one per answer, if you choose. 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, ASA at $0.14/g, TPU at $0.25/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

| Operation | Credits | Notes |
| --- | --- | --- |
| 3D generation, fast draft | 1 + add-ons | The default mode. See the add-ons below. |
| 3D generation, hi-fi | 2 + add-ons | Prompt enhancement and engine routing are model-written rather than local. |
| Re-texture an existing model | 1 | Flat. Mesh quality and texture settings do not change it. Through POST /api/retexture; the studio has no button for it. |
| Edit model, exact change | 0 | Flatten the base, resize, drill a hole or cut in half. See /docs/studio/design. |
| Edit model, anything else | 1 + the 3D run | 1 to redraw a picture of the model with the change, then an image-to-3D run at its usual price, 2 as a Fast Draft. |
| Image generation | 1 per image | 2 per image at 4K. 1 to 4 images per request, so 1 to 8 credits. The design page's image studio makes one picture at a time, at 1 credit. |
| Image edit | 1 | 2 at 4K. Charged once per request, however many source images you send. Apply in the image studio is 1. |
| Site assistant answer | 0, then 1 | Free within the monthly allowance below; after that 1 per answer, only if you choose to spend it. |
| Printability check | 0 | Free, and it works without an account. |
| Model import from a URL | 0 | Free. |
| Price quote | 0 | Free 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:

| Option | Added |
| --- | --- |
| 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 second Meshy task, which is why it costs a full 2 rather than a surcharge, but only Meshy runs it: on Hunyuan, Tripo and TRELLIS.2 the 2 is charged and nothing changes. The High and Ultra quality presets switch it on, so untick it there unless you are generating on Meshy.

- 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

| Source | Credits | Price | Cadence |
| --- | --- | --- | --- |
| Signup grant | 5 | Free | Once, when your account's credit record is created at email verification |
| Maker plan | 100 | $19 / month | Added on every paid invoice |
| Pro Studio plan | 400 | $49 / month | Added on every paid invoice |
| Small pack | 60 | $10 ($0.17 each) | One-time |
| Medium pack | 150 | $22 ($0.15 each) | One-time |
| Large pack | 400 | $50 ($0.13 each) | One-time |
| Sharing to the community gallery | 1 per 10 shares | Free | Every tenth design you share |

*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/checkout`

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

Auth: session

**Body**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `type` | string (credits \\| subscription \\| product) | yes | Use credits for a top-up pack, subscription for a plan. |
| `pack` | string (small \\| medium \\| large) | no | Required when type is credits. Anything else returns 400 'Invalid credit pack'. |
| `plan` | string (maker \\| pro) | no | Required when type is subscription. Anything else returns 400 'Invalid plan'. |

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.

| Balance | On a paid invoice | On cancellation |
| --- | --- | --- |
| Generation credits | Allowance is added to the balance | Untouched |
| Print credit (dollars) | Set to the plan's amount for the cycle | Set to $0 |

*The print credit is refreshed, not accrued, so unspent print credit does not roll over.*

## Running out

The studio warns you first. On an account without a paid plan, an amber N credits remaining appears once the balance is down to 2. When a run costs more than you hold, the button area reads Insufficient credits — you have X but need Y and Generate is disabled. Signed out, the studio offers Sign up for 5 free credits instead.

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

```json
{
  "error": "no_credits",
  "message": "This generation costs 4 credits but you only have 2. Add credits to continue.",
  "needsPayment": true,
  "creditsRequired": 4,
  "creditsAvailable": 2
}
```

| Endpoint | Status when out of credits |
| --- | --- |
| POST /api/generate | 403 |
| POST /api/retexture | 403 |
| POST /api/images/generate | 402 |
| POST /api/images/edit | 402 |

*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. These do:

- A generation that returns a non-2xx response or throws is refunded on the spot and its history row is marked failed, and History says failed — credit refunded.
- A generation whose model was made but could not be saved is cancelled and refunded, rather than handing you a link that expires.
- 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.
- An image job that fails, or finishes with no picture, gives its credit back.
- A site assistant answer paid with a credit that fails to arrive gives the credit back.

Some requests are refused before they would cost anything: a prompt the moderation check rejects, a photo of a flat picture, and an image file that cannot be read. None of them spends a credit.

Limits per account: 20 generations an hour, 40 image generations and 40 image edits an hour, 30 re-textures an hour, and 120 exact model edits an hour.

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** — Within its monthly allowance, asking the support assistant a question does not touch these credits. The allowance is 5 free questions a month, plus one more for every $2 you have spent with us in the trailing 30 days, capped at 500 a month. Once the month's questions run out, a signed-in account holding credits can keep asking at 1 credit per answer, but only when you choose to: the button then reads Ask · 1 credit, and nothing is taken until you send a question with it showing. A credit spent on an answer that fails to arrive is given back. 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.

- [Pricing](https://x3dstudios.com/docs/pricing) — The per-gram print rate card, plans and packs in one place.
- [Designing a model](https://x3dstudios.com/docs/studio/design) — Modes, engines and options, and what each one changes.
- [Generate API](https://x3dstudios.com/docs/api/generate) — Request fields, response shape and every error code.

[Buy credits](https://x3dstudios.com/pricing)

## Frequently asked

**Do X3D credits expire?**

No. Generation credits are a running balance. A plan adds its allowance to that balance every time an invoice is paid rather than resetting it, so unused credits carry over month to month, and cancelling a plan leaves the balance you already have untouched. The separate dollar print credit that comes with a plan does not roll over.

**Do credits pay for a 3D print?**

No. Printing is priced in dollars from the weight of the part and charged to a card or a gift card. Ordering a print never spends a credit, and having zero credits does not stop you ordering one.

**What does one generation cost?**

A fast-draft generation from a text prompt costs 1 credit. Hi-fi costs 2. Add 1 for an image, image-plus-text or multiview input, 1 for high mesh quality or 2 for ultra, 1 for a 4k texture or 2 for 8k, and 2 for a refinement pass, which only changes the result on Meshy. Changing a model with an exact edit is free.

**What happens if a generation fails after my credits are taken?**

They come back. Credits are deducted before the engine is called, so any non-2xx response or thrown error triggers an automatic refund, and a generation still unfinished after 60 minutes is marked failed and refunded by a sweep. Refunds are keyed per generation, so a retry and the sweep cannot both pay out.
