---
title: "Withdraw a budget request"
method: POST
path: "/v1/budget_requests/{id}/withdraw"
tags: ["Budget request"]
---

# Withdraw a budget request

`POST /v1/budget_requests/{id}/withdraw`

## Request

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

Whoever asked takes back their pending request. Nobody is notified.

## Path parameters

- `id` string, uuid, required

## Parameters

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

## Response `200`

The request, `withdrawn`.

- BudgetRequest: A budget request ("solicitud de presupuesto"): a company member asks an admin for more funds for a budget they belong to (`more_funds`, "Más fondos") or for a new budget (`new_budget`, "Presupuesto nuevo"). An admin approves it (optionally changing the amount) or rejects it with a note; whoever asked can withdraw it while it's pending. Amounts are in the smallest currency unit (v1 is CLP-only, so cents == pesos).
  - `id` string, uuid, required
  - `company_id` string, uuid, required
  - `kind` 'more_funds' | 'new_budget', required: - `more_funds` ("Más fondos"): more money for an existing budget (`budget_id`). - `new_budget` ("Presupuesto nuevo"): a budget that doesn't exist yet; approving it creates the budget and `budget_id` points to it from then on.
  - `status` 'pending' | 'approved' | 'rejected' | 'withdrawn' | 'canceled', required: - `pending`: waiting for an admin. - `approved`: an admin approved it; the money moved (or the budget was created). - `rejected`: an admin rejected it; `resolution_note` says why. - `withdrawn`: whoever asked withdrew it. - `canceled`: the budget closed while it was pending (`resolution_note` is `budget_closed`).
  - `budget_id` string, uuid, nullable: The budget asked about (`more_funds`), or the one created on approval (`new_budget`). `null` for a `new_budget` request not approved.
  - `requested_amount_cents` integer, required: What was asked for.
  - `approved_amount_cents` integer, nullable: What the admin approved (the amount asked for unless changed). `null` until approved.
  - `currency` string, required
  - `period_scope` 'current_period' | 'next_periods' | 'null', nullable: Only for `more_funds` on a recurring budget (`null` otherwise): - `current_period`: the money is for the period in progress. - `next_periods`: raises what each period starts with (`base_amount_cents`) from the next renewal on.
  - `reason` string: Why the requester needs it.
  - `resolution_note` string, nullable: The admin's note when rejecting it. `budget_closed` when it was canceled because its budget closed.
  - `name` string, nullable: Name of the budget asked for (`new_budget` only).
  - `recurrence_unit` 'week' | 'month' | 'year' | 'null', nullable: How often the budget asked for should renew (`new_budget` only). `null` if it shouldn't.
  - `recurrence_every` integer, nullable: How many `recurrence_unit` each period of the budget asked for spans (`new_budget` only).
  - `participant_ids` string[]: Users the requester wants in the new budget (`new_budget` only; empty otherwise).
  - `origin_channel` 'web' | 'whatsapp', required: Where it was asked from.
  - `resolved_at` string, date-time, nullable: When it was approved, rejected, withdrawn or canceled.
  - `created_at` string, date-time, required
  - `requested_by` object, required: Who asked.
    - `id` string
    - `name` string, nullable
    - `email` string
  - `resolved_by` object, nullable: Who approved, rejected or withdrew it. `null` while pending or when canceled.
    - `id` string
    - `name` string, nullable
    - `email` string
  - `budget` object, nullable: The budget it's about (`budget_id`), `null` if there's none.
    - `id` string, uuid
    - `name` string
    - `mode` 'funded' | 'tracking'
    - `recurring` boolean: Whether it renews (`recurrence_unit` set).
    - `closing` boolean: Whether its closing date came.
    - `dissolved` boolean: Whether it's closed.
    - `period_ends_on` string, date, nullable: Scheduled renewal boundary of its period in progress. `null` if it doesn't renew.
    - `base_amount_cents` integer, nullable
    - `allocated_amount_cents` integer
  - `next_period_check` object, nullable: Only for users with `budgets_manage` (`null` for anyone else), on a pending `next_periods` request for a `funded` ("Con saldo") budget: the figures to warn that the company's free balance wouldn't renew the budget with the higher base today. `null` otherwise.
    - `current_base_cents` integer: What each period starts with today.
    - `available_for_base_cents` integer: The most the company's free balance could renew it with today.

## Other responses

- `401`: Unauthorized - missing or invalid authentication token, a caller who isn't the requester, or a request that isn't `pending` anymore.
- `403`: `budget_requests/not_requester`: only whoever asked can withdraw it.
- `404`: Request not found (or outside the caller's scope).
- `409`: `budget_requests/already_resolved`: the request was resolved meanwhile.

---

[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)
