# 撤销加油包

`POST` `/api/tokenBudget/revokeTopup`

撤销指定身份主体某个配额账户名下的加油包，该加油包剩余额度立即作废且不退还，已消耗部分不受影响。不传 scopeAgentId 在全局账户下查找加油包；传入共享配额的一组智能体中任意一个智能体的ID时，在该组账户下查找，须与充值时定位到同一账户。加油包ID可通过「查询加油包列表」接口获取；系统会校验该加油包确实属于该账户，不属于时拒绝操作；同时要求该账户所绑策略已分配给当前应用，否则返回 403 错误。本接口仅支持通过API调用。

## 请求参数

### 请求头参数

| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| X-Principal-Id | integer | 否 | 身份主体ID（Long类型）。通过API访问时必须传递以标识操作主体；通过页面访问时无需传递。可通过「身份主体」模块的创建接口获取。 |

### 请求体（JSON）

| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| scopeAgentId | integer | 否 | 共享配额的一组智能体中任意一个智能体的ID，选填。不传或 0 表示加油包属于主体的全局账户；传入时按该智能体所属智能体组定位到对应账户并在该账户下查找加油包，须与充值时定位到同一账户，否则会因归属校验不通过而拒绝 |
| topupId | integer | 是 | 加油包ID，可通过「查询加油包列表」接口获取 |

## 响应

### 200

| 参数名 | 类型 | 说明 |
|--------|------|------|
| httpStatusCode | integer | HTTP状态码 |
| message | string | 响应消息 |
| data | object | 响应数据 |
| success | boolean | 是否成功 |
| requestId | string | 上游请求ID，用于跨系统链路追踪排查问题 |
| errCode | string | 上游错误码，前端可据此做特殊UI处理 |

### 400

| 参数名 | 类型 | 说明 |
|--------|------|------|
| httpStatusCode | integer | HTTP状态码 |
| message | string | 响应消息 |
| data | object | 响应数据 |
| success | boolean | 是否成功 |
| requestId | string | 上游请求ID，用于跨系统链路追踪排查问题 |
| errCode | string | 上游错误码，前端可据此做特殊UI处理 |

### 500

| 参数名 | 类型 | 说明 |
|--------|------|------|
| httpStatusCode | integer | HTTP状态码 |
| message | string | 响应消息 |
| data | object | 响应数据 |
| success | boolean | 是否成功 |
| requestId | string | 上游请求ID，用于跨系统链路追踪排查问题 |
| errCode | string | 上游错误码，前端可据此做特殊UI处理 |

