Skip to main content
Some operations consume credits — the unit Brew meters AI generation and media rendering with. Each credit is worth $0.01 of underlying spend. Every credit-metered operation charges only on success. There are two metering modes:
  • Usage-metered — email generation, email import, AI email edits, semantic brand-image search, and image generation charge the actual model usage (token input/output for the email agent; embedding/image-gateway cost for search + image generation). The cost scales with the work, so there is no fixed number and no X-Credit-Cost header. The call still gates: an empty balance is rejected up front.
  • Fixed — every other media/render operation charges a flat, published per-operation cost, reported via the X-Credit-Cost response header.

Which operations cost credits

OperationRouteMetering
Generate an emailPOST /v1/emailsUsage (tokens)
Import an email (HTML / MJML / JSX → editable design)POST /v1/emails/importUsage (tokens)
Edit an email (AI prompt edit)PATCH /v1/emails/{emailId}Usage (tokens)
Semantic brand-image searchGET /v1/brand/images?q=…Usage (embedding)
Generate an imagePOST /v1/content/generate-imageUsage (image)
Generate / animate a GIFPOST /v1/content/gif (from: "prompt" | "image" | "video")Fixed
Optimize / resize an imagePOST /v1/content/transform (operation: "optimize" | "resize")Fixed
Render HTML to a PNGPOST /v1/content/html-to-pngFixed
Add an image (saves to the brand image library)POST /v1/content/add-imageFixed
Everything else is free: all reads (including the no-q browse of GET /v1/brand/images), the deterministic JSX save branch of PATCH /v1/emails/{emailId} (a body with jsx instead of prompt), the accessibility audit (GET /v1/emails/{emailId}/accessibility-audit), and contact validation (POST /v1/contacts/validate). For fixed operations the cost is published and does not vary with output size — the authoritative number for a call is its X-Credit-Cost response header. For usage-metered operations the charge equals the real token/image cost the work incurred (no header). The full per-operation metering table is available machine-readably at GET /v1/helpcredits.operations.

Check your balance — GET /v1/usage

There is no dry-run cost preview. Credit-metered calls just charge on success; if you want to know what you can afford before you call, read your balance from the billing surface:
curl "https://brew.new/api/v1/usage" \
  -H "Authorization: Bearer brew_…"
{
  "plan": "pro",
  "credits":    { "limit": 500, "used": 260, "remaining": 240 },
  "emailSends": { "limit": 50000, "used": 1200, "remaining": 48800 },
  "period":     { "start": "2026-06-01T00:00:00.000Z", "end": "2026-07-01T00:00:00.000Z" }
}
A null limit / remaining means unlimited. credits is the AI/media balance; emailSends is your monthly delivery allowance. Both reset at the period.end boundary. GET /v1/usage requires the emails scope.

What a real (charged) call reports

A successful fixed-cost call charges the published cost exactly once and returns two headers:
HeaderMeaning
X-Credit-CostCredits charged for this call.
X-Credits-RemainingBalance after the charge.
Usage-metered calls (email generate/edit, image generation) bill the actual model usage to your account and do not return these headers — read your balance from GET /v1/usage before and after to see the delta. Charging is idempotent: a retry with the same Idempotency-Key replays the original response and is not charged again.

Errors

CodeStatusWhen
INSUFFICIENT_CREDITS402Your balance is too low — below the fixed cost (fixed ops) or empty (usage-metered ops). details carries { cost, remaining, planKey }. Top up / upgrade — there’s no Retry-After because credits reset at the billing-period boundary (read it from GET /v1/usage’s period.end).
SERVICE_UNAVAILABLE503The credit balance could not be verified (a transient billing-backend outage). The gate fails closed — it refuses rather than do paid work it can’t meter. Retryable: a Retry-After header tells you when.
402 is a confirmed empty balance; 503 is “can’t check right now, try again shortly” — branch on the code, never on the message.

Need Help?

Our team is ready to support you at every step of your journey with Brew. Choose the option that works best for you:

Search Documentation

Type in the “Ask any question” search bar at the top left to instantly find relevant documentation pages.

ChatGPT/Claude Integration

Click “Open in ChatGPT” at the top right of any page to analyze documentation with ChatGPT or Claude for deeper insights.