---
title: "Lift a spend block"
method: POST
path: "/spend-blocks/{id}/lift"
tags: ["Gateway"]
---

# Lift a spend block

`POST /spend-blocks/{id}/lift`

## Request

- Base URL: `https://api.phaseo.app/v1`
- URL: `https://api.phaseo.app/v1/spend-blocks/{id}/lift`
- Auth: HTTP bearer

Lifts an active spend block so requests in its scope are accepted again within about a minute. The rule does not block again until its period resets, but it keeps sending alerts. Owners and admins only; the lift is recorded in the audit log and queues a spend_blocked event with state lifted. Returns 404 for an unknown block and 409 spend_block_not_active when it was already lifted.

## Response `200`

The lifted spend block

- SpendBlockResponse
  - `data` SpendBlock, required: A block a spend rule started once spend reached its block point. While it is active, requests in its scope get a 429 with code spend_rule_blocked and Retry-After set to resets_at. Free models are exempt unless block_free_models is true.
    - `id` string, uuid, required
    - `workspace_id` string, uuid, required
    - `rule_id` string, uuid, nullable, required: The rule that started the block; null once the rule was deleted outright.
    - `rule_name` string, nullable, required
    - `scope_type` 'workspace' | 'key' | 'member' | 'department' | 'model' | 'provider', required
    - `scope_id` string, nullable, required
    - `scope_label` string, required: Display name of the scope (key, department or model name, member email, or the id).
    - `block_free_models` boolean, required
    - `period_start` string, date-time, required
    - `resets_at` string, date-time, nullable, required: When the block lifts by itself (the end of the rule's period).
    - `spend_nanos` integer, required: Spend in the rule's scope when the block started, in nanodollars.
    - `spend_usd` number, required
    - `limit_nanos` integer, required: The block point, in nanodollars.
    - `limit_usd` number, required
    - `started_at` string, date-time, required
    - `lifted_at` string, date-time, nullable, required
    - `lifted_by` string, uuid, nullable, required: The owner or admin who lifted the block, for manual lifts.
    - `lift_reason` 'manual' | 'period_reset' | 'below_limit' | 'rule_changed' | 'rule_disabled' | 'rule_deleted', required: Why a spend block was lifted: manual (an owner or admin), period_reset, below_limit (spend is under the block point again, for example after a budget was raised), rule_changed, rule_disabled or rule_deleted.
    - `active` boolean, required: Not lifted, and its reset has not passed.

## Other responses

- `default`: Request failed

## Changes

- **2026-10-27** `f48fc6c1db25`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/phaseo/apis/phaseo-gateway-api/changes/spend-blocks/:id/lift/post.md)

---

[API](https://skmtc.dev/phaseo/apis/phaseo-gateway-api.md) - [All operations](https://skmtc.dev/phaseo/apis/phaseo-gateway-api/llms.txt) - [OpenAPI document](https://skmtc.dev/phaseo/apis/phaseo-gateway-api/revisions/5ca9bb220d25?raw)
