Skip to content
← butverify.dev

Error codes

Every error from bv ... --json and from the HTTP API is shaped:

{
"ok": false,
"error": {
"code": "string",
"message": "human-readable message",
"...": "code-specific fields"
}
}

Codes are stable across versions; messages may be tweaked.

Auth

auth_required

The CLI has no token, or the token has expired. Recover: grab a fresh installation token from app.butverify.dev and re-run bv init.

auth_refused

The token is valid but the principal is not allowed to perform the action — typically a billing-portal request from a non-owner. Recover: surface to a human; the resource is access-controlled.

account_suspended

The tenant is suspended for non-payment or admin action. Recover: surface upgrade_url from the response.

Quotas

quota_exceeded

Tier limit hit. Body includes limit, current, and upgrade_url. Recover: surface to the human, or delete sites with bv rm.

payload_too_large

The tarball exceeds the 1 GB hard cap. Recover: trim the directory; we don’t paginate uploads in v1.

Inputs

invalid_argument

A flag value or path failed validation. The field key in the body says which. Recover: re-issue the request with corrected input.

site_not_found

The site_id doesn’t resolve to a site in this tenant. Recover: bv ls --json to see the real site_ids.

Transport

rate_limited

You’re hitting the API too fast. Body includes retry_after (seconds). Recover: sleep retry_after, retry.

network

TLS / DNS / connection-level failure. Recover: retry up to 3 times with exponential backoff.

internal

Server-side bug. Includes a request_id that you can include in support emails. Recover: retry once; if it persists, surface to the human with the request_id.

Webhook-only

These appear in audit logs / Stripe webhook deliveries and aren’t returned to the CLI.

webhook_signature_mismatch

The Stripe webhook signature failed verification. The event was discarded.

webhook_replay

Duplicate event.id within the 7-day dedup window.

Migration & lifecycle

tenant_grace

Action attempted on a tenant in payment_failed grace period — read-only operations succeed, writes fail. Recover: pay the open invoice via the dashboard.

site_expired

Read of a non-pinned site whose retention window has elapsed. Recover: re-push, or upgrade and pin.