---
title: "Credit balance, quota, capabilities, and the credit price list"
method: GET
path: "/credits"
tags: ["Account"]
---

# Credit balance, quota, capabilities, and the credit price list

`GET /credits`

## Request

- Base URL: `https://api.domscout.io`
- URL: `https://api.domscout.io/credits`
- Auth: API key in header `x-api-key`

Everything needed to budget a run, without spending anything. This request is NOT billed: it consumes no credits and no quota, and is subject only to the per-second rate limit.

Returns the current credit balance, month-to-date quota usage, the overage ceiling, the per-second rate limit, and the full credit weight table so a client can price a request before sending it.

The quota resets on the first of each calendar month (UTC). This is true on an annual subscription as well: an annual plan buys the same monthly allowance twelve times over, not twelve months of allowance to spend at once.

It also reports which gated capabilities this key can actually use, and why not when it cannot. The normal DOM product is plan-based, but provider-backed routes depend on what this deployment has configured, the product group can be paused globally for rollback, and trusted browser-side JavaScript has its own account entitlement. Read `capabilities` before spending a billed request on /extract, /search, /index, /semantic-search, /batch, /crawl, or a gated capture option.

## Response `200`

Current balance, quota, capability availability, and price list.

- CreditSummary: Balance, quota, and the price list. Returned by GET /credits, which is never billed.
  - `credits` object
    - `balance` integer: Prepaid credits available. Never expires, and survives a cancelled subscription.
    - `spentThisMonth` integer: Credits spent since the start of the current calendar month (UTC).
  - `quota` object
    - `planId` 'hobby' | 'pro' | 'business' | 'enterprise'
    - `included` integer: Capture units included per calendar month by the plan.
    - `used` integer
    - `remaining` integer
    - `periodStart` string, date-time
    - `resets` string: Always "calendar-month (UTC)", including on an annual subscription.
  - `overage` object
    - `enabled` boolean: Whether this account may accrue postpaid overage. Hobby is always false for metered overage; prepaid credits may still fund work. Paid accounts can change the stored preference from the dashboard.
    - `ceiling` integer: Total monthly units the subscription may reach including metered overage.
    - `used` integer
  - `rateLimit` object
    - `perSecond` integer: Requests per second. A credit balance never raises this.
  - `pricing` object: What a request costs. Requests are weighted by what they make the browser do.
    - `base` integer: Every capture costs at least this.
    - `max` integer: No single request can cost more than this, whatever it combines.
    - `surcharges` object: Added to the base when the named option is used. Not listed means free.
    - `routeSurcharges` object: Added to the base for provider-backed non-browser routes.
    - `chargeOrder` string[]: Buckets are spent in this order: included quota, then prepaid credits, then metered overage.
    - `free` string[]: Requests that are never billed. This is a PRICE, not an entitlement: POST /batch and POST /crawl appear here and require the Business plan or higher. A global product emergency pause can still temporarily hold them; read `capabilities.routes` to learn what this key may call.
  - `capabilities` object: What this key can actually use right now, and why not when it cannot. Reported so a client never has to discover a global product pause, trusted-JavaScript account gate, or unconfigured provider by spending a billed request on it. Normal DOM product access is plan-based; providers are configured per deployment.
    - `routes` object: Gated routes, keyed by path. POST /screenshot appears because two platform controls can close browser capture for every key. A route that is absent — every GET and DELETE route, POST /feedback — is available on every plan.
    - `captureOptions` object: Fields of a POST /screenshot body that carry their own gate, keyed by field name. Each rides on a capture, so a platform hold on POST /screenshot is reported here too.

## Other responses

- `403`: Missing, invalid, or revoked API key.
- `429`: Rate limit exceeded. Quota and credits are never a reason for this endpoint to refuse.
- `503`: A dependency this request needs is unavailable or not configured for this deployment. Codes: SUPABASE_TIMEOUT and SUPABASE_INVALID_RESPONSE (a storage operation did not answer, or answered unreadably — the write may have committed, so any retry must be idempotent), CAPTURE_ARTIFACT_UNAVAILABLE and CAPTURE_ARTIFACT_CORRUPT (a stored artifact could not be read or parsed), ASYNC_JOBS_NOT_CONFIGURED and CAPTURE_RETRIEVAL_NOT_CONFIGURED (the capability is not configured here, on any plan). Retryable unless the code names a deployment configuration.

---

[API](https://skmtc.dev/domscout/apis/domscout-api.md) · [All operations](https://skmtc.dev/domscout/apis/domscout-api/llms.txt) · [OpenAPI document](https://skmtc.dev/domscout/apis/domscout-api/revisions/20562d5b5d94?raw)
