> For AI agents: the documentation index is at https://docs.gethandup.dev/llms.txt. Append .md to any page URL (without the trailing slash) for Markdown, for example https://docs.gethandup.dev/cli.md.

# usage

`GET /v1/storage`

Disk usage by category (request history, audit log, files, free database pages, other), request counts, the history retention policy and the running or most recent cleanup. Local, and view scope on paired devices.

## Responses

### 200

Media type: `application/json`

`object`

`GET /v1/storage`: usage by category, the retention policy, and the
running or most recent cleanup.

- **usage** (required): `object`

  Disk space the daemon uses, by category. Categories add up to `total_bytes`.

  - **total_bytes** (required): `integer` format: int64, >= 0

    Database file, write-ahead log, and stored files on disk.

  - **history_bytes** (required): `integer` format: int64, >= 0

    Request rows (with their inline previews) and their indexes.

  - **audit_bytes** (required): `integer` format: int64, >= 0

    Audit events.

  - **files_bytes** (required): `integer` format: int64, >= 0

    Stored files (preview blobs) plus their metadata rows.

  - **free_bytes** (required): `integer` format: int64, >= 0

    Free database pages; new requests reuse them before the file grows.

  - **other_bytes** (required): `integer` format: int64, >= 0

    Everything else: devices, tokens, schema, and the write-ahead log.

  - **files** (required): `integer` format: int64, >= 0

    Stored files on disk.

  - **pending** (required): `integer` format: int64, >= 0
  - **resolved** (required): `integer` format: int64, >= 0
  - **oldest_resolved_at**: `integer | null` format: int64, >= 0

    Unix milliseconds of the oldest resolution still kept.

  - **compacts** (required): `boolean`

    The database returns freed pages to the filesystem after a history
    cleanup (`auto_vacuum=incremental`, set on databases created by this
    version). Otherwise freed pages stay in the file as `free_bytes` and
    are reused.

- **retention** (required): `object`

  Retention for resolved requests (decision history). The daemon prunes at
  start and hourly; 0 disables a cap. Pending requests are never pruned.

  - **keep_days**: `integer` format: int32, default: `90`, >= 0

    Delete resolved requests older than this many days (0 = no age cap).

  - **max_requests**: `integer` format: int32, default: `2000`, >= 0

    Keep at most this many resolved requests (0 = no count cap).

  - **max_bytes**: `integer` format: int64, default: `0`, >= 0

    Best-effort live database/WAL/blob byte cap, excluding free database pages (0 = unlimited).

  - **files_keep_days**: `integer` format: int32, default: `0`, >= 0

    Remove files belonging only to resolutions older than N days (0 = request lifetime).

- **job**: `object | null`

  A background cleanup. The daemon runs one at a time in small batches, so
  requests and decisions keep working while it runs.

  - **id** (required): `string`
  - **target** (required): `string`

    What a cleanup removes.

    Allowed values: `history` `files`

  - **older_than_days** (required): `integer` format: int32, >= 0

    0 = every resolved request.

  - **keep_newest**: `integer` format: int32, >= 0

    Newest resolved requests kept; 0 = no count limit.

  - **state** (required): `string`

    Allowed values: `running` `done` `cancelled` `failed`

  - **total** (required): `integer` format: int64, >= 0

    Items to process, counted at the start: requests (history) or files (files).

  - **done** (required): `integer` format: int64, >= 0

    Items processed so far.

  - **requests_deleted** (required): `integer` format: int64, >= 0
  - **files_deleted** (required): `integer` format: int64, >= 0
  - **bytes_freed** (required): `integer` format: int64, >= 0

    Bytes freed: removed files plus database pages released by deleted rows.

  - **compacting** (required): `boolean`

    Returning freed database pages to the filesystem (incremental vacuum).

  - **started_at** (required): `integer` format: int64, >= 0

    Unix milliseconds.

  - **finished_at**: `integer | null` format: int64, >= 0
  - **error**: `string | null`

    Set when `state` is `failed`.


