Driftstack DRIFTSTACK docs
Docs

Operational cost estimate

Driftstack browser subscriptions are fixed-price and enforced by concurrent-session capacity. Session hours, API calls, and page navigations do not create browser-usage overages.

GET /v1/account/cost exposes a UTC-calendar-month estimate of Driftstack’s operational cost to serve the calling account. It is not the amount charged to you, a Stripe invoice, or a NowPayments receipt.

The response keeps five stable component fields:

  • Compute — populated from lifecycle-derived session minutes and Driftstack’s internal fleet-cost rate. Session minutes remain analytics/unit-economics input; quotas.session_minute is null on every tier.
  • Storage, egress, email, and LLM — reserved fields that currently return zero because production has no per-account meters feeding them.

Bundled LLM has a separate settings/status endpoint. Its 10-cent-per-turn value is an included-service monthly budget guardrail today; it is not included in this estimate or separately itemized by Stripe.

Read the estimate

GET /v1/account/cost?billing_cycle=YYYY-MM

// Call the endpoint with the same base URL + API key as the SDK client:
const res = await fetch(`${baseUrl}/v1/account/cost?billing_cycle=2026-05`, {
  headers: { authorization: `Bearer ${apiKey}` },
});
const estimate = await res.json();

billing_cycle is optional; omitted requests use the current UTC calendar month.

Returns:

{
  "account_id": "acc_a1b2c3d4-...",
  "billing_cycle": "2026-05",
  "tier": "api_builder",
  "breakdown": {
    "computeCents": 4720,
    "storageCents": 0,
    "egressCents": 0,
    "emailCents": 0,
    "llmCents": 0,
    "totalCents": 4720,
    "thresholdState": "between-soft-and-hard"
  }
}

account_id carries the canonical acc_ prefix, matching the id returned by GET /v1/account/me.

All amounts are integer accounting cents. totalCents is the sum of the five response fields; because only compute is populated today, it currently equals computeCents. Do not use it as an invoice total. Use billing state and Stripe-issued invoices, or the relevant NowPayments receipt, for payment truth. Read the separate bundled-LLM status for its included-service budget.

Operator threshold state

breakdown.thresholdState compares the operational estimate with operator-tuned unit-economics thresholds:

State Meaning
under-soft Estimate is below the operator warning threshold.
between-soft-and-hard Estimate crossed the operator warning threshold.
over-hard Estimate crossed the higher operator attention threshold.

This state is not a customer spending cap. Crossing it does not add an invoice item, email a customer billing warning, rate-limit a new session, or stop work already running. The platform records an operator alert and can publish an in-app account notification. Numeric threshold values remain operator-only and are not included in this response.

Empty-state response

For a fresh account with no lifecycle-derived session minutes in the selected month, the endpoint returns 200 with a zero breakdown rather than 404:

{
  "account_id": "acc_<uuid>",
  "billing_cycle": "2026-05",
  "tier": "solo_manual",
  "breakdown": {
    "computeCents": 0,
    "storageCents": 0,
    "egressCents": 0,
    "emailCents": 0,
    "llmCents": 0,
    "totalCents": 0,
    "thresholdState": "under-soft"
  }
}

Rate limits

Standard global bucket. Polling every minute is sufficient; polling faster than every 10 seconds on the free tier may hit the bucket.