---
title: "Set the monthly budget for a client project"
method: PUT
path: "/clients/{id}/budget"
tags: ["Agencies"]
---

# Set the monthly budget for a client project

`PUT /clients/{id}/budget`

## Request

- Base URL: `https://api.hypamoon.com/api/v1`
- URL: `https://api.hypamoon.com/api/v1/clients/{id}/budget`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://app.hypamoon.com/oauth/authorize`, token URL `https://api.hypamoon.com/oauth/token`, scopes: `clients:write`)

The most your agency pays for this client project per calendar month, in euros excluding VAT, or null for no budget of its own (your project's spending cap still applies). When it is reached, new paid usage in the project gets a 402 billing_blocked and your agency gets one email that month.

## Path parameters

- `id` string, uuid, required

## Request body

- object
  - `monthly_budget_eur` number, nullable, required

## Response `200`

The relation with the budget.

- object
  - `object` 'client_relation', required
  - `id` string, uuid, required
  - `agency` object, required
    - `project_id` string, uuid, required
    - `name` string, required
  - `client` object, required
    - `project_id` string, uuid, required
    - `name` string, required
  - `status` 'pending' | 'active' | 'declined' | 'ended', required
  - `stage` 'building' | 'client_owned', required
  - `role` 'viewer' | 'builder' | 'admin', required
  - `max_mode` 'test' | 'live', required
  - `four_eyes` boolean, required
  - `payer` 'client' | 'agency', required
  - `budget_eur` number, nullable, required
  - `payer_change` object, nullable, required
    - `to` 'client' | 'agency', required
    - `proposed_by` 'client' | 'agency', required
    - `proposed_at` string, nullable, required
  - `owner_invite` object, nullable, required
    - `email` string, required
    - `expires_at` string, nullable, required
    - `agency_keeps_access` boolean, required
  - `confirmed_at` string, nullable, required
  - `ended_at` string, nullable, required
  - `created_at` string, required
  - `transfer` object
    - `direction` 'incoming' | 'outgoing', required
    - `agency` object, required
      - `project_id` string, uuid, required
      - `name` string, required
    - `relation_id` string, uuid, required
    - `expires_at` string, nullable, required
  - `ended_via` 'client' | 'agency' | 'admin' | 'handover' | 'expired' | 'cleanup'
  - `cleanup` object
    - `phase` 'notified' | 'trash' | 'deleted', required
    - `trash_on` string, required
    - `delete_on` string, required

## Other responses

- `400`: Bad Request: invalid_json.
- `401`: Unauthorized: unauthorized, missing_api_key, invalid_api_key, api_key_revoked, project_deleted.
- `403`: Forbidden: project_not_enabled, key_mode_mismatch, missing_scope, verification_required, forbidden.
- `404`: Not Found: not_found.
- `422`: Unprocessable Content: validation_failed.
- `429`: Too Many Requests: rate_limited.
- `500`: Internal Server Error: internal_error.
- `503`: Service Unavailable: service_unavailable.

---

[API](https://skmtc.dev/hypamoon/apis/hypamoon-api.md) · [All operations](https://skmtc.dev/hypamoon/apis/hypamoon-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hypamoon/apis/hypamoon-api/revisions/9f0b90004c06?raw)
