# GET /v4/reallocations/report/{campaignId}

_Merkl API_

> Retrace a campaign's reallocations (BETA)

**Reallocation Report**
<p>Retraces every reallocation ever applied to a campaign, from its latest merkle tree — the newest root whose tree the tree service holds, named in <code>atRoot</code>. The distribution chain is <strong>inferred from the campaign ID</strong>.</p>
<p>A reallocation is a two-step protocol recorded in the tree, and it never changes a campaign's total. Step 1 shrinks the original recipient's leaves to what it had already claimed and stages a marker at the zero address (<code>tmp_reallocation_{from}_{to}</code>). Step 2 drains that marker and either credits the destination (<code>reallocation</code> for a creator request, <code>unclaimedRewards</code> for a wipe sweep) or returns the reward to the original recipient (<code>fail_reallocation</code> / <code>fail_wipe</code>) when it claimed in between.</p>
<p>Drained markers survive at amount zero, so the <code>senders</code> roster and the <code>inFlight</code>, <code>returned</code> and per-destination <code>settled</code> amounts are exact.</p>
<p><strong>Not available here:</strong> per-sender <code>settled</code> and <code>stagedAt</code> (<code>walk</code> is <code>null</code>). A destination's leaf aggregates every sender and a drained marker has no amount left, so recovering those means one tree read per root — see <code>POST /v4/reallocations/report/{campaignId}/walk</code>.</p>
<p><strong>Authentication:</strong> Requires either a valid <code>x-api-key</code> header or the back-office bearer secret.</p>
<p>⚠️ <strong>Beta:</strong> this endpoint is in beta. The behavior, response shape and data format may change at any time without notice.</p>

### Path parameters

- `campaignId` (string) _(required)_

## Responses

- **200** Response for status 200

## Example request

```bash
curl -X GET "https://api.merkl.xyz//v4/reallocations/report/{campaignId}" \
  -H "x-api-key: YOUR_API_KEY"
```