> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cuprice.io/llms.txt
> Use this file to discover all available pages before exploring further.

# List Features

> Retrieve all features for a project

Returns all features defined in a project, including countable data for usage-based and limit-type features.

## Endpoint

```
GET /api/v1/projects/{slug}/features
```

## Authentication

<ParamField header="Authorization" type="string" required>
  Bearer token with your API key. Requires `read` or `read_write` permission.
</ParamField>

## Path Parameters

<ParamField path="slug" type="string" required>
  The project's URL-friendly slug identifier.
</ParamField>

## Response

<ResponseField name="features" type="array">
  List of feature objects.

  <Expandable title="Feature object">
    <ResponseField name="id" type="number">
      Unique feature ID
    </ResponseField>

    <ResponseField name="name" type="string">
      Feature display name
    </ResponseField>

    <ResponseField name="description" type="string">
      Feature description
    </ResponseField>

    <ResponseField name="basePrice" type="number">
      Base price for this feature
    </ResponseField>

    <ResponseField name="featureType" type="string">
      One of `"Standart"`, `"Limits"`, or `"Usage Based"`
    </ResponseField>

    <ResponseField name="isCountable" type="boolean">
      Whether this feature has countable/usage data
    </ResponseField>

    <ResponseField name="countableData" type="object">
      Usage-related configuration (present when `isCountable` is `true`)
    </ResponseField>

    <ResponseField name="countableData.usageCount" type="number">
      Default usage count or limit value
    </ResponseField>

    <ResponseField name="countableData.condition" type="string">
      Condition label (e.g. `"Up to"`, `"Unlimited"`)
    </ResponseField>

    <ResponseField name="countableData.countPrice" type="number">
      Price per unit of usage
    </ResponseField>

    <ResponseField name="countableData.eventAggregationMethod" type="string">
      How usage events are aggregated (e.g. `"count"`, `"sum"`)
    </ResponseField>

    <ResponseField name="createdAt" type="string">
      ISO 8601 creation timestamp
    </ResponseField>

    <ResponseField name="updatedAt" type="string">
      ISO 8601 last-updated timestamp
    </ResponseField>
  </Expandable>
</ResponseField>

## Example

```bash theme={null}
curl https://cuprice.io/api/v1/projects/my-saas-app/features \
  -H "Authorization: Bearer cpk_your_key_here"
```

```json theme={null}
{
  "features": [
    {
      "id": 101,
      "name": "AI Prompts",
      "description": "Monthly AI prompt allowance",
      "basePrice": 10,
      "featureType": "Limits",
      "isCountable": true,
      "countableData": {
        "usageCount": 500,
        "condition": "Up to",
        "countPrice": 0.02,
        "eventAggregationMethod": "count"
      },
      "createdAt": "2025-09-15T10:35:00.000Z",
      "updatedAt": "2025-09-15T10:35:00.000Z"
    },
    {
      "id": 102,
      "name": "Team Members",
      "description": "Number of team seats included",
      "basePrice": 5,
      "featureType": "Standart",
      "isCountable": false,
      "countableData": null,
      "createdAt": "2025-09-15T10:36:00.000Z",
      "updatedAt": "2025-09-15T10:36:00.000Z"
    },
    {
      "id": 103,
      "name": "API Calls",
      "description": "Monthly API request quota",
      "basePrice": 15,
      "featureType": "Usage Based",
      "isCountable": true,
      "countableData": {
        "usageCount": 10000,
        "condition": "Up to",
        "countPrice": 0.001,
        "eventAggregationMethod": "count"
      },
      "createdAt": "2025-09-15T10:37:00.000Z",
      "updatedAt": "2025-09-15T10:37:00.000Z"
    }
  ]
}
```

## Errors

| Status | Description                           |
| ------ | ------------------------------------- |
| `401`  | Invalid or missing API key            |
| `404`  | Project with the given slug not found |
