---
title: "List the fund movements of a budget"
method: GET
path: "/v1/budgets/{id}/fund_movements"
tags: ["Budget"]
---

# List the fund movements of a budget

`GET /v1/budgets/{id}/fund_movements`

## Request

- Base URL: `https://api.cardda.com`
- URL: `https://api.cardda.com/v1/budgets/{id}/fund_movements`
- Auth: HTTP bearer

The budget's funds history: who moved its funds in or out, how much, from or to where
and why. Newest first (`created_at` desc, then `id` desc). Closed budgets still return
their history.

## Access
- Admin / `budgets_manage` users and Cardda staff.
- Members of the budget: its manager ("Encargado"), a co-manager or a participant,
  explicit or by holding one of its non-canceled cards.

Someone who sees the budget only because it's open to the company
(`access: company`) gets `401`. A budget outside the caller's scope returns
`404 Not Found`.

## Pagination
`_start`/`_end` paginate (25 rows by default), with `Content-Range` and
`X-Total-Count` in the response. There is no `_field`/`_order` sorting.

## What it holds
The history starts when this endpoint was released; older movements are not
backfilled. Assigning or unassigning loaded prepaid cards, period renewals and the
budget's creation are not recorded, so the rows don't add up to
`allocated_amount_cents`.

## Path parameters

- `id` string, uuid, required

## Parameters

- `#/paths/~1v1~1bills/get/parameters/0` (unresolved $ref)
- `#/paths/~1v1~1bills/get/parameters/1` (unresolved $ref)
- `#/paths/~1v1~1bills/get/parameters/2` (unresolved $ref)

## Response `200`

The budget's fund movements, newest first.

- BudgetFundMovement[]
  - `id` string, uuid, required
  - `created_at` string, date-time, required
  - `kind` 'top_up' | 'withdraw' | 'transfer' | 'amount_edit', required: - `top_up`: from the company's general balance into the budget. - `withdraw`: from the budget back to the general balance. - `transfer`: between two budgets. It is a single movement that appears in both budgets' history, with opposite `direction`. - `amount_edit`: an edit of a `tracking` ("Solo control") budget's planned amount; `amount_cents` is the difference.
  - `direction` 'in' | 'out', required: Whether the funds came into or went out of the budget queried.
  - `amount_cents` integer, required: Always greater than 0; `direction` gives the sign.
  - `counterpart` object, nullable, required: Where the funds came from or went to. `null` for the general balance (`top_up`, `withdraw`) and for an `amount_edit`. For a `transfer`, the other budget; both fields are `null` when the caller can't see that budget.
    - `id` string, uuid, nullable, required
    - `name` string, nullable, required
  - `reason` string, nullable, required: Why it was made. `null` only for an `amount_edit` without a reason. When `from_request` is `true`, it is the requester's text.
  - `from_request` boolean, required: The movement came from approving a budget request (`/v1/budget_requests`). Then `reason` is the requester's text and `author` is who approved it.
  - `author` object, required: Who made the movement.
    - `id` string, required
    - `name` string, required

## Other responses

- `401`: Unauthorized - missing or invalid authentication token, or a caller who sees the budget only because it's open to the company (not an admin nor a member of it).
- `404`: Budget not found (or outside the caller's scope).

---

[API](https://skmtc.dev/cardda/apis/finance-api.md) - [All operations](https://skmtc.dev/cardda/apis/finance-api/llms.txt) - [OpenAPI document](https://skmtc.dev/cardda/apis/finance-api/revisions/59752c65ea74?raw)
