Skip to content

Plans and limits

The grid

PlanMonthly priceActive modelsPredictions per month
Free$01100
Build$24.993500
Pro$99.99102,500
Growth$399.992515,000
Enterpriseon requestcustomcustom

This grid is public and readable from the API, without authentication:

sh
curl "$SPAVIK_BASE_URL/v1/plans"

Read it rather than copying these numbers into your interface: they will change.

What "active models" counts

The cap applies to models across the whole account, all workspaces included, not per workspace. An archived model no longer counts, and a model whose training failed is deleted rather than kept.

Archiving is how you make room without losing anything: the model stops serving, its artefacts are kept, and restoring it later takes a slot again. Deleting a model for good is a separate, irreversible call.

python
model.archive()                                   # frees the slot
spavik.restore(model.id)                          # takes one again

Beyond it, the API answers:

QUOTA_MODELS_EXCEEDED
Model limit reached (1/1) on the free plan, counting every workspace of the
account. Archive a model you no longer serve, or upgrade to the build plan.

What "predictions per month" counts

A billed prediction is one scored row, or one horizon-times-series pair in forecasting. Training, folding outcomes in, and every read do not count.

When the monthly volume is used up, the credit balance takes over: you buy blocks of them, and the API keeps answering instead of stopping mid-month.

Tracking consumption

sh
curl "$SPAVIK_BASE_URL/v1/usage" -H "X-API-Key: $SPAVIK_API_KEY"

The response breaks consumption down by day, by call type and by key, with the balance and the credits_low flag. That flag is what fires the credits.low webhook event. predictions_remaining is what you can still spend, monthly allowance and balance together: the same number every billed response carries in its X-Spavik-Predictions-Remaining header.

GET /v1/billing/subscription gives the same picture from the subscription angle: plan, status, current period end, limits.

Rate limiting

The API can answer 429 TOO_MANY_REQUESTS. The threshold is not published in the contract and no Retry-After header is returned today: treat this code as an invitation to try again a little later, with a growing wait. The libraries already do.

Two limits that are not

Training costs nothing, whatever the number of rows. And an API key does not expire, unless you rotated it with a grace period.

Part of this documentation is generated from the OpenAPI contract.