---
title: "Get project usage"
method: GET
path: "/projects/v1/admin/{project_id}/usage"
tags: ["Admin"]
---

# Get project usage

`GET /projects/v1/admin/{project_id}/usage`

## Request

- Base URL: `https://api.run402.com`
- URL: `https://api.run402.com/projects/v1/admin/{project_id}/usage`
- Auth: HTTP bearer

## Path parameters

- `project_id` string, required: Run402 project ID. Public IDs are not UUIDs.

## Response `200`

Usage stats

- object
  - `project_id` string: Run402 project ID. Public IDs are not UUIDs.
  - `tier` string
  - `api_calls` integer
  - `api_calls_limit` integer
  - `storage_bytes` integer
  - `storage_limit_bytes` integer
  - `storage_limit` string: storage_limit_bytes as a human string, derived from the tier constant.
  - `lease_expires_at` string, date-time, nullable: ISO timestamp of the owning organization's tier lease expiry; null when the lease is perpetual (lease_perpetual: true) or the project has no organization.
  - `lease_perpetual` boolean: True when the owning organization's lease never expires (lease_expires_at is then null); false otherwise, including a project with no organization.
  - `status` string

## Other responses

- `401`: Missing or invalid authentication. Run402-originated JSON bodies use the canonical ErrorEnvelope.

---

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