---
title: "Credit balance, per-Bundle burn, add-on packs, projected exhaustion"
method: GET
path: "/api/me/credits/summary"
tags: ["me"]
---

# Credit balance, per-Bundle burn, add-on packs, projected exhaustion

`GET /api/me/credits/summary`

## Request

- Base URL: `https://api.signalraven.ai`
- URL: `https://api.signalraven.ai/api/me/credits/summary`
- Auth: none declared

Customer-facing credit dashboard data. 5-min Redis cache + 5-min Cache-Control (private). Bundle breakdown sums credits charged per Bundle 1-4 for the current period (or last 30d for Trial without a period). Projected-exhaustion is null when no burn yet OR forecast date is past period_end.

## Response `200`

Credit summary

- CreditSummary
  - `credits` object, required
    - `allotted` integer, required: Monthly bucket size per plan (whole-number grant)
    - `remaining` number, required: Monthly bucket balance (numeric to scale 4; can go negative under enforcement-OFF soft mode)
    - `used` number, required: allotted - remaining, clamped at 0 (numeric to scale 4)
    - `periodStart` string, date-time, nullable, required
    - `periodEnd` string, date-time, nullable, required: When monthly bucket resets. NULL for Trial customers per design §4.4a
  - `bundleBreakdown` object, required: Credits burned per Bundle for the current period (numeric to scale 4; sums to monthly+pack consumption)
    - `post_intake` number, required
    - `engagement_capture` number, required
    - `engager_evaluation` number, required
    - `signal_delivery` number, required
    - `account_intelligence` number, required
    - `person_evaluation` number, required
    - `monitoring_check` number, required
    - `monitoring_item` number, required
    - `monitoring_signal` number, required
  - `bundleWeights` object, required: Live per-bundle credit weights from system_settings.credit.bundleWeights. The portal uses these to render accurate "Each X = N credits" labels instead of stale hardcoded values.
    - `post_intake` number, required
    - `engagement_capture` number, required
    - `engager_evaluation` number, required
    - `signal_delivery` number, required
    - `account_intelligence` number, required
    - `person_evaluation` number, required
    - `monitoring_check` number, required
    - `monitoring_item` number, required
    - `monitoring_signal` number, required
  - `addOnPacks` object[], required: Active (non-empty, not expired) PAYG packs ordered FIFO by expiresAt ASC
    - `id` string, uuid, required
    - `credits` integer, required: Credits granted at purchase (whole number — packs are bought as whole units)
    - `creditsRemaining` number, required: Credits still available from this pack (numeric to scale 4 since migration 0038)
    - `purchasedAt` string, date-time, required
    - `expiresAt` string, date-time, required: 12 months after purchase for PAYG packs
    - `source` 'purchased' | 'granted', required: How this pack came into being. `purchased` = customer paid via Stripe PAYG Checkout (stripe_payment_intent_id is set). `granted` = SignalRaven admin granted as a bonus / make-good / trial extension via the admin SPA (stripe_payment_intent_id is null). Drives portal labeling so customers can distinguish receipts they owe from gifts.
    - `planSlugAtPurchase` string, required: Plan slug at purchase time — determines the $/credit rate that was charged
  - `totalBalance` number, required: monthly remaining + sum(active pack credits remaining) — numeric to scale 4 since migration 0038
  - `paygBalance` number, required: Sum of active pack credits remaining — numeric to scale 4 since migration 0038
  - `projectedExhaustion` string, date-time, nullable, required: When monthly bucket is forecast to hit zero at current burn rate; null when no burn yet OR projected past period_end
  - `cached` boolean, required: true = served from 5-min Redis cache; false = fresh compute

## Other responses

- `401`: Not authenticated
- `403`: Customer not active

---

[API](https://skmtc.dev/signalraven/apis/zygnal-api.md) · [All operations](https://skmtc.dev/signalraven/apis/zygnal-api/llms.txt) · [OpenAPI document](https://skmtc.dev/signalraven/apis/zygnal-api/revisions/36e1d9b9d604?raw)
