### Grant quota directly

`POST /api/v1/users/{id}/add-traffic`

Adds bytes and/or seconds to the subscriber's remaining period quota without pricing or charging anything, and drops the hot-path quota cache so the grant applies on the next RADIUS request.

- Authentication: manager session (JWT) or API token
- Permission: `prm_users_add_traffic` (Add traffic)
- Risk: write
- Rate limit bucket: `t_mutate`

#### Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | integer | yes | Subscriber id. |
| `bytes` | body | integer | no | Bytes to add. At least one of bytes or seconds must be present and positive. |
| `seconds` | body | integer | no | Seconds to add. |

#### Request

```json
{
  "bytes": 10737418240,
  "request_id": "7c2a0e91-6d44-4f9b-a1b7-0c5d3e8f2a10"
}
```

#### Errors

| Code | Status | When |
| --- | --- | --- |
| `ERR_VALIDATION` | 400 | a negative value, or neither bytes nor seconds supplied |
| `ERR_NOT_FOUND` | 404 | no such subscriber |

#### Note

request_id is accepted here for your own tracing but is not enforced, because adding traffic is not naturally idempotent. Two calls add twice. Do not build a retry loop on this endpoint the way you would on deposit.

