Building blocks
Pricing & billing
Subscription tiers, the single extraction meter, flat overage, pay-on-200 and rollover — what counts as a billable extraction, and what never costs anything.
ARCNM is a subscription API with a single meter — extractions. You pick a tier, get a monthly (or annual) included quota, and any usage beyond it bills at a flat per-extraction overage rate. There are no credit packs and no per-call price to budget: one meter, one rate. The same meter and the same rate apply whichever side of the quote you are on — a buyer asking what a part should cost and a shop pricing the RFQ it answers make the identical engine call. The rules:
- One meter. 1 part in 1 environment = 1 extraction. A
single-component file (3D CAD or 2D drawing, ≤ 10 MB) costs exactly
one extraction. No multipliers, no file-size brackets. A
multi-environment run meters one extraction per
(part × environment) cell — 7 parts compared across 4 environments
is 28 extractions, and the Run button / batch response tells you the
cell count before anything is charged. A grid the remaining quota
can't cover never runs in part:
/calculations/batchrejects it whole (402 quota_exceededwithcells_requested/cells_available), while/quoteand/upload-and-quotesave the grid's cells parkedblockedfirst — their 402'sdetailsalso carrybatch_idandparked_cells, so after a top-up you resume that batch (/calculations/bulk-retryor per-cell/run) instead of paying to submit it again. - Billed on success. Failed runs,
4xx/5xxresponses, and idempotent cache hits cost nothing — they never draw down your included quota or trigger overage. - Flat overage, no surprise upgrades. Run past your included quota and the extras bill at your tier's flat per-extraction rate. You're never force-upgraded mid-cycle. That rate is drawn from your prepaid balance on every plan, so the balance is the ceiling and there is no surprise invoice. An Enterprise agreement can contract invoice terms in arrears instead.
- Rollover. Unused included extractions roll one month forward, then expire. Rollover applies only while the subscription is active — rolled extractions are forfeited on cancellation (and the cancel flow tells you so before you confirm).
- No double billing (dedup). Re-running the identical part in
the same environment with the same configuration within the same
billing month is served from the first succeeded result —
instant, and never billed again — whichever upload route stored the
file. A different environment, a changed configuration, a rate/fleet
edit to the environment, or a correction saved to the part makes it a
genuinely new (billable) calculation. This applies per cell in a
multi-environment run: re-submitting an identical grid answers every
unchanged, already-succeeded cell from cache for free
(
served_from_cachein the batch response), and a fully cached grid is served even when you're over quota — cached answers never need allowance. Cells still running aren't cached yet, so retry an in-flight grid with anIdempotency-Key, not by re-submitting it.
For current rates, see arcnm.io/pricing. The tiers below are the canonical summary (EUR).
| Tier | Base | Included | Overage / extraction | Seats | Environments / fleets | Calibration runs | Storage | Rate limit | Audience |
|---|---|---|---|---|---|---|---|---|---|
| Free | €0/mo | 10 / mo | €1.49 (prepaid) | 1 | 2 / 2 | 1 / mo | 1 GB | 60 / min | evaluating, on your own parts |
| Pro | €199/mo | 300 / mo | €0.99 | unlimited | 5 / 5 | unlimited | 50 GB | 300 / min | one buying or quoting team |
| Scale | €1,199/mo | 2,500 / mo | €0.79 | unlimited | 30 / 30 | unlimited | 250 GB | 600 / min | procurement groups, quoting desks, platforms |
| Enterprise | custom terms¹ | custom¹ | custom¹ | unlimited | custom¹ | unlimited | unlimited | ~1,200 / min | procurement organisations and their supply base |
API keys are unlimited on every plan, so they are not a column: key count was never a cost driver — usage is, and the extraction meter and the rate limits already gate that.
¹ Enterprise is a per-tenant contract — volume, overage rate, base
price, limits and payment terms are negotiated, annual and prepaid.
There is no list price: talk to sales for a
quote. Once your agreement is active, your in-app billing page and
GET /billing/v3/overview (contract) always show your contracted
numbers (volume, overage rate, base price, PO) — the public catalogue
never carries them.
- Free is pay-as-you-go. The 10 monthly extractions are free and need no card. Past them, extractions are saved but paused until you add a payment method and top up a balance; they then run at €1.49 each — each one only starts once its price is on the balance — and pause again when the balance is spent. Nothing is ever lost, and a Free balance never goes below zero: you are never billed beyond what you have paid in.
- Overage is prepaid. Every plan draws overage from your prepaid balance, so there is no surprise invoice — a calculation past your included volume reserves its price before it starts and is charged only when it succeeds. An Enterprise agreement can contract invoice terms in arrears instead; your billing page shows which applies.
- Annual billing saves ~10%. Pro is €2,149.20/yr and Scale is €12,949.20/yr on annual. Enterprise is annual/prepaid by default and sales-led.
- Every paid plan has unlimited seats and unlimited calibration runs. A seat costs us nothing and every seat feeds the meter, so charging for one taxed the thing that makes the product work; and rationing the action that improves your accuracy worked against the whole point. Free keeps 1 seat and 1 calibration run a month as its evaluation scope.
New accounts start free. Every new organisation lands on the Free tier — 10 extractions per month, no card required. Free obeys the same rules below: a failed run never burns one. Once the included 10 are used, further extractions are saved and park as
blockeduntil you add a card and top up; thecoverageblock on the response says which, and where to fix it.
The single meter, and what's free
Every extraction request hits one meter. What counts, and what's free:
| Outcome | Counts against quota / overage? |
|---|---|
Extraction succeeds (200 OK, valid result) |
Yes — 1 extraction |
| Extraction fails / cancelled / timed out | No |
4xx (bad input, auth, rate-limit) |
No |
5xx (our fault) |
No |
| Idempotent cache hit (identical content within the cache window) | No |
This is pay-on-200: you're only metered when we return a valid
extraction. A leaked parts:read key can never spend — only
parts:write runs an extraction. Behind the meter, the engine selects
the right analysis for each input automatically; it never changes what
you're charged.
Add-on packs
One pack, à-la-carte on any paid plan (Free is card-free by definition, so pack checkout points it at an upgrade instead):
| Pack | Price | Adds |
|---|---|---|
| Environments+ | €29/mo | Unlimited costing environments and machine fleets, above your plan's included allowance |
Every other capability a pack used to gate — seats, calibration runs, RBAC, the audit log, API keys — is now a plan default, so there is nothing else to buy.
Plan limits
Beyond the extraction meter, each tier carries resource limits — seats, costing environments, machine fleets, calibration runs per month, and total upload storage (see the tier table above). Limits gate creation only: hitting one blocks creating more of that resource; everything you already created keeps working, and nothing is ever deleted — including after a downgrade.
A creation request over the limit returns 402 Payment Required
with the code entitlement_exceeded and a machine-readable payload:
{
"error": {
"code": "entitlement_exceeded",
"message": "Seat limit reached (1/1). Upgrade your plan to invite more teammates — every paid plan has unlimited seats.",
"details": {
"feature": "seats",
"used": 1,
"limit": 1,
"upgrade_url": "/settings/billing"
}
}
}
details.feature is one of seats, environments, fleets,
calibration_runs, api_keys, storage. details.limit is your
plan's effective ceiling (tier + Environments+ + any enterprise
agreement); upgrade_url
is a same-origin path to the billing page. The dashboard renders these
as an upgrade prompt; API clients should surface the message and treat
the condition as permanent until the plan changes (or, for
calibration_runs, until the monthly window resets).
Current usage against every limit is available in the billing overview
(GET /billing/v3/overview, limits[]) and on Settings → Billing.
Quota, overage, and rollover in practice
A Pro account includes 300 extractions/month at €199. Run 350 and the extra 50 bill at €0.99 each — €49.50 drawn from the prepaid balance as they run. No upgrade prompt, and no work blocked while the balance covers it.
Unused extractions roll one month forward. A Pro account that uses 240 of 300 in March carries 60 into April (on top of April's 300), then anything still unused after April expires. Cancel mid-cycle and any rolled balance is forfeited — the cancellation flow states this before you confirm.
Raw uploaded files are stored free — never metered — and count only against your plan's storage limit. They are kept until you delete the part or the organisation (deleting an organisation purges its stored objects); the small derived cost labels are kept for the life of the account. To have data removed sooner, delete it in the dashboard or through the API.
Reading your usage
Read your plan, included quota, current-window usage and overage budget
with any parts:read key: GET /api/v1/calculations/entitlement. It
also tells you whether your prepaid balance can fund more runs
(wallet_funded_calculations, wallet_overdrawn). The balance itself,
invoices and receipts are in the dashboard (Settings → Billing) only:
billing data is not on the API.
Invoices, receipts, tax
Subscriptions, overage, invoices, and the Customer Portal are handled through our billing provider. The org owner sees invoices and receipts in the dashboard (Settings → Billing). Sales tax / VAT is collected per the customer's billing country where applicable.
See also
- Errors —
quota_exceeded, and the pay-on-200 status codes. - Calculations — where the extraction meter is incremented.
- Rate limits — request limits (separate from billing).