---
title: "Move budget between pools"
method: POST
path: "/wallets/reallocate"
---

# Move budget between pools

`POST /wallets/reallocate`

## Request

- Base URL: `https://getsanction.com/api/v1`
- URL: `https://getsanction.com/api/v1/wallets/reallocate`
- Auth: API key in header `x-mgmt-key`

Owner-only: move subtree daily cap between two pools in your wallet subtree — the hook a learning layer or a human uses to shift budget toward the efficient channel. Both cap changes are policy-revisioned; the move is recorded as one auditable reallocation event.

## Request body

- object
  - `wallet_id` string, required: Your wallet (authorization root)
  - `from_wallet_id` string, required
  - `to_wallet_id` string, required
  - `amount_usd` number, required
  - `reason` string

## Response `200`

Budget moved; response carries both pools' new caps and the reallocation id

## Other responses

- `401`: Invalid management key
- `403`: A pool is outside your wallet subtree
- `422`: Source pool has no cap or insufficient cap

---

[API](https://skmtc.dev/getsanction/apis/sanction-agent-governance-api.md) · [All operations](https://skmtc.dev/getsanction/apis/sanction-agent-governance-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getsanction/apis/sanction-agent-governance-api/revisions/c645a9e4b72d?raw)
