---
title: "Aggregates sum over all campaigns; `claims` is paged by `limit` / `offset`."
method: GET
path: "/api/v1/campaigns/account"
tags: ["Campaigns"]
---

# Aggregates sum over all campaigns; `claims` is paged by `limit` / `offset`.

`GET /api/v1/campaigns/account`

## Query parameters

- `account` string, required
- `pagination` object, required
  - `limit` integer — Maximum number of items to return per page (capped at 1000)
  - `offset` integer — Number of items to skip before returning results (capped at 10000)
- `limit` integer
- `offset` integer

## Response `200`

Per-user campaign state

- UserCampaigns — `ready_to_claim` excludes claims outside their claim window at fetch time.
  - `breakdown_by_type` TypeBreakdown[], required
    - `campaign_type` 'fee_rebate' | 'maker_incentive' | 'liquidation_rebate' | 'volume_milestone', required — u8 mapping mirrors `campaign_manager.move::campaign_type_to_u8`.
    - `lifetime_earned` integer, required
    - `ready_to_claim` integer, required
    - `total_claimed` integer, required
  - `claims` UserClaim[], required
    - `campaign_id` integer, required
    - `campaign_type` 'fee_rebate' | 'maker_incentive' | 'liquidation_rebate' | 'volume_milestone', required — u8 mapping mirrors `campaign_manager.move::campaign_type_to_u8`.
    - `claim_end_ts_sec` integer, required
    - `claim_start_ts_sec` integer, required
    - `claim_tx_hash` string, nullable — Tx hash from the same argMax row as `claimed_at_ts_sec`.
    - `claimable_amount` integer, required
    - `claimed_amount` integer, required
    - `claimed_at_ts_sec` integer, nullable — Latest claim's timestamp (argMax by event_uid).
    - `description` string, nullable
    - `end_ts_sec` integer, required
    - `has_allocation` boolean, required
    - `ready_to_claim` integer, required
    - `reward_asset` string, required
    - `start_ts_sec` integer, required
    - `status` 'draft' | 'funded' | 'active' | 'expired' | 'reclaimed' | 'cancelled', required — Wire form: lowercase string in `campaign_status_updates.new_status`. Empty row → `Draft` (synthesized read-side, never written).
    - `title` string, required
    - `total_funded` integer, required
  - `lifetime_earned` integer, required
  - `ready_to_claim` integer, required
  - `total_claimed` integer, required
  - `total_claims` integer, required — Pre-pagination count of `claims`.
  - `weekly_breakdown` WeeklyEarning[], required
    - `reward_amount` integer, required — Units follow the campaign's `reward_asset`.
    - `week_start_ts_sec` integer, required
  - `weekly_wow_bps` integer, required — Cumulative WoW: this_week_claims / (total_claimed − this_week_claims), in bps. Saturates at u32::MAX. 0 when prior cumulative is zero.
  - `year_to_date` integer, required

## Other responses

- `400` — Invalid address
- `500` — Database error

---

[API](https://skmtc.net/decibel/apis/decibel-trading-api.md) · [All operations](https://skmtc.net/decibel/apis/decibel-trading-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/decibel/decibel-trading-api/revisions/37a02083ff59/schema)
