shiftlabs Start free
Menu Plans and billing

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.

Plans
LimitFreePro
Price$0$49 a month
Runs1,000 per 24 hours250,000 a month, then $0.10 per 1,000
Outbound requests3,000 per 24 hours1,000,000 a month, then $0.02 per 1,000
Steps5,000 per 24 hours1,000,000 a month, then $0.02 per 1,000
CPU time300 seconds per 24 hours50,000 seconds a month, then $0.05 per 1,000 seconds
CPU time per run10 seconds60 seconds
Runs at once10100
Runs waiting per workflow, past its concurrency1,00010,000
Workflows · active triggers10 · 2050 · 100
Secrets · connections25 · 10250 · 100
Agents the helper isn't counted325
Model allowance agents and the helper50,000 tokens per 24 hours, $1 a month5,000,000 tokens per 24 hours, $10 a month
Modelsthe small modelsevery model
Member invitations per 24 hours20200
Alert emails per day50500
  • 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/me returns 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.run your 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.

shellcurl
# $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"} with Retry-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/billing shows "status": "past_due", graceUntil and, 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/billing returns "available": false, and checkout and the billing portal return 503 {"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.

shellcurl
# 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/invoice on 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.

Routes
RouteMethodMinimum role
/v1/billing {available, plan, status, periodStart, periodEnd, cancelAtPeriodEnd, graceUntil, hasBillingAccount, spendingLimitCents, capped, cappedBy, usage}; usage on ProGETviewer
/v1/billing {"spendingLimitCents"}, 0 to 1,000,000PATCHadmin
/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 fieldsPOSTadmin
/v1/billing/portal {url} of the billing portal; 409 before there's a billing accountPOSTadmin
/v1/billing/invoice {poNumber, taxIds}; PATCH {"poNumber"}, up to 140 characters, or null to remove itGET · PATCHadmin