Optionalcode: numberReadonlybulkWhether this buyer's bulk acquisitions are exempt from the cap. When true,
spentCents and remainingCents describe ordinary spend only — an authorized
bulk acquisition does not consume them.
ReadonlycapThe buyer's daily spend cap in cents.
ReadonlycodeMachine-readable error code from the API error body, if present.
ReadonlydetailsExtra top-level fields from the API error response body, excluding
error itself. For example, a selection_too_large refusal from POST /v1/acquisitions (422) carries maximum and submitted alongside
error. undefined when the body carried no other top-level fields,
which is the common case.
ReadonlyremainingCap minus spend so far, floored at zero — what the buyer may still spend in this window.
ReadonlyresetsISO 8601 timestamp (UTC) of the instant the current spend window rolls.
ReadonlyretrySeconds to wait before retrying, from the response's Retry-After header.
undefined when the response carried no usable header. Present on rate-limit
(429) and busy (503) refusals, so a caller can back off without guessing.
ReadonlyspentTotal spent so far in the current spend window.
ReadonlystatusHTTP status code returned by the API (e.g. 400, 401, 404, 422).
ReadonlytypeMachine-readable reason from the API error body's error.type, if present.
See ErrorType for the documented values and how to branch on them —
the API may emit other values it hasn't documented yet, which still land
here as a plain string rather than being dropped.
Static ReadonlybrandClass-identity brand used for cross-bundle instanceof (see [Symbol.hasInstance]). Hardcoded per class — never derived
from constructor.name or this.name, either of which a minifier can
rewrite, silently breaking the brand match.
Static[hasMakes err instanceof LedewireError (and every subclass below) true even
when err was constructed by a different bundled copy of this module.
Each published package (@ledewire/node, @ledewire/browser,
@ledewire/x402-client) bundles its own copy of @ledewire/core via
tsup, so the classes are distinct objects with unrelated prototypes —
the plain prototype-chain check instanceof normally does would fail.
Falls back to the brand list every instance carries under a
Symbol.for('@ledewire/error-brands') key (collected from the brand
static along the constructing class's prototype chain): true when the
ordinary check passes, OR the instance's brand list includes this
class's own brand.
Thrown when the buyer's daily spend cap has been reached. Returned as HTTP
402byPOST /v1/purchases,GET /v1/x402/contents/{id}, and acquisition authorization, whenever the API error body'serror.typeis'daily_spend_cap_reached'.Funding the wallet does not clear this. Unlike a plain
insufficient_funds402 — where adding money to the wallet is enough to retry — a spend cap refusal is a daily policy limit on the buyer's account (every new buyer starts with a default cap). It clears only when the spend window rolls over at SpendCapReachedError.resetsAt, or when the buyer raises the cap viauser.spendCap.update().Example