Plans and billing
Free costs nothing and has daily caps. Pro is $49 a month with a monthly allowance of runs, steps, CPU time and outbound requests, then overage up to a spending limit you set.
Free and Pro
Every workspace starts on Free. Upgrades to Pro open soon. Then an admin upgrades in Settings → Plan and billing.
| Limit | Free | Pro |
|---|---|---|
| Price | $0 | $49 a month |
| Runs | 1,000 per 24 hours | 250,000 a month, then $0.10 per 1,000 |
| Outbound requests | 3,000 per 24 hours | 1,000,000 a month, then $0.02 per 1,000 |
| Steps | 5,000 per 24 hours | 1,000,000 a month, then $0.02 per 1,000 |
| CPU time | 300 seconds per 24 hours | 50,000 seconds a month, then $0.05 per 1,000 seconds |
| CPU time per run | 10 seconds | 60 seconds |
| Runs at once | 10 | 100 |
| Runs waiting per workflow, past its concurrency | 1,000 | 10,000 |
| Workflows · active triggers | 10 · 20 | 50 · 100 |
| Secrets · connections | 25 · 10 | 250 · 100 |
| Agents the helper isn't counted | 3 | 25 |
| Model allowance agents and the helper | 50,000 tokens per 24 hours, $1 a month | 5,000,000 tokens per 24 hours, $10 a month |
| Models | the small models | every model |
| Member invitations per 24 hours | 20 | 200 |
| Alert emails per day | 50 | 500 |
- Both plans deploy up to 100 new versions per 24 hours, and share the run limits under Limits. Pricing lists every limit, and
GET /v1/mereturns your workspace's. - On Pro, runs, steps, CPU time and outbound requests per 24 hours stop at the month's included amounts: 250,000, 1,000,000, 50,000 seconds and 1,000,000.
- Model use has no overage. Past the allowance, agent messages wait until it frees up. See Agents.
What counts
On Pro, a run counts toward the month's runs once it ends, if your code ran.
- Counts
A run that completed, or that failed after your code ran: an error it threw, a step out of retries, or a limit it reached. A re-run is a run of its own, and so is a run an agent's tool call starts.
- Doesn't count
Runs refused at a limit, runs that never started, and runs that failed on our side, were stopped by a suspension or ended with a deleted workspace.
- Outbound requests
Every request your workflows send counts, including requests the gateway refuses.
- Steps and CPU time
Each
step.runyour code runs counts once. Retries and sleeps don't count. CPU time is the time your code runs on a CPU. Both count in the hour they're used, whether the run then completes or fails. - Agent messages
Not runs. Their model use counts toward the model allowance, and their code tools' CPU time toward CPU time.
On Free, a run counts toward runs per 24 hours from when it is queued, however it ends. Steps and CPU time count toward their caps as they are used, and runs already started continue past them. GET /v1/usage shows runsLast24h, stepsLast24h and cpuSecondsLast24h, and on Pro, GET /v1/billing shows the month's usage.
Overage and the spending limit
Past the month's included runs, steps, CPU time and outbound requests, Pro bills overage: $0.10 per 1,000 runs, $0.02 per 1,000 steps, $0.05 per 1,000 CPU-seconds and $0.02 per 1,000 outbound requests. The spending limit caps it.
# $250 a month (admin key). Answers {"spendingLimitCents", "capped", "cappedBy", "overageCents"}.
curl -X PATCH https://api.shiftlabs.org/v1/billing \
-H "authorization: Bearer $SHIFTLABS_API_KEY" -H "content-type: application/json" \
-d '{"spendingLimitCents": 25000}'
- The limit is $100 a month until an admin changes it, in Settings → Plan and billing or with
PATCH /v1/billing, from $0 to $10,000. At $0, Pro stops at the included runs, steps, CPU time and outbound requests. - The billing contact, the email given at checkout, gets an email at 80% of the limit and another at 100%.
- At the limit, new runs and agent messages return
429 {"error": "spending limit reached", "detail"}withRetry-After: 3600, webhook deliveries included. Runs already started finish. An agent's workflow tool calls fail. - Usage is checked every hour. A workspace can pass its limit by up to an hour of use.
- Raising the limit, or a new billing month, starts new runs again at once.
When a payment fails
A workspace whose payment failed stays on Pro for 7 days. Without a payment by then, it moves to Free.
- While a payment is failing there is no overage. New runs and agent messages stop once the month's included runs, steps, CPU time or outbound requests are used, with
429 {"error": "payment failed", "detail"}. Raising the spending limit doesn't lift this. - Our payment processor retries a failed payment and emails the billing contact when it fails. When new runs stop, the billing contact also gets one email:
New runs paused for <workspace>: payment failed. - An admin updates the payment method from Settings → Plan and billing. New runs start again once the payment goes through.
GET /v1/billingshows"status": "past_due",graceUntiland, once runs stop,"cappedBy": "payment".
Upgrade and manage billing
Upgrades to Pro open soon. Then an admin upgrades from Settings → Plan and billing, which opens a checkout page. Pro starts when the payment goes through.
- When billing is unavailable,
GET /v1/billingreturns"available": false, and checkout and the billing portal return503 {"error": "billing is not available yet"}. - On Pro, Manage billing opens the billing portal: invoices, the payment method, the tax ID and cancelling. Cancelling keeps Pro until the end of the billing month.
- Everyone in the workspace can read the plan, usage and spending limit. Admins set the spending limit and the PO number, see the tax ID and manage billing.
- See Refunds for refunds.
PO number and tax ID
Invoices show your PO number and your business tax ID.
# Upgrade with a PO number (admin key). Answers {"url"} of the checkout page.
curl -X POST https://api.shiftlabs.org/v1/billing/checkout \
-H "authorization: Bearer $SHIFTLABS_API_KEY" -H "content-type: application/json" \
-d '{"poNumber": "PO-4471"}'
# Change it later. Answers {"poNumber"}. "poNumber": null removes it.
curl -X PATCH https://api.shiftlabs.org/v1/billing/invoice \
-H "authorization: Bearer $SHIFTLABS_API_KEY" -H "content-type: application/json" \
-d '{"poNumber": "PO-4472"}'
- Enter the PO number when you upgrade in Settings → Plan and billing, or send it with
POST /v1/billing/checkout. Every invoice carries it, the first one included. - Admins change or remove it in Settings → Plan and billing on Pro, or with
PATCH /v1/billing/invoiceon either plan, up to 140 characters. Invoices already issued keep the PO number they show. - At checkout, tick "I'm purchasing as a business" to add a tax ID. Add or change it later in the billing portal.
API
Read billing and set the spending limit and the PO number with the /v1 API.
| Route | Method | Minimum role |
|---|---|---|
/v1/billing {available, plan, status, periodStart, periodEnd, cancelAtPeriodEnd, graceUntil, hasBillingAccount, spendingLimitCents, capped, cappedBy, usage}; usage on Pro | GET | viewer |
/v1/billing {"spendingLimitCents"}, 0 to 1,000,000 | PATCH | admin |
/v1/billing/checkout optional {"poNumber"}, as on PATCH /v1/billing/invoice; {url} of a checkout page for Pro; 409 when already subscribed, or when the billing account has 4 other invoice fields | POST | admin |
/v1/billing/portal {url} of the billing portal; 409 before there's a billing account | POST | admin |
/v1/billing/invoice {poNumber, taxIds}; PATCH {"poNumber"}, up to 140 characters, or null to remove it | GET · PATCH | admin |