# List distinct tag keys

> Returns the distinct provider tag keys present in the tenant's per-tag cost data and every virtual tag key, so the dashboard can offer both as choices. A provider key that a virtual key of the same name replaces is left out.

Source: https://docs.levelfour.ai/api-reference/costs/get-costs-by-tag-keys


## GET /api/v1/costs/by-tag/keys

Returns the distinct provider tag keys present in the tenant's per-tag cost data and every virtual tag key, so the dashboard can offer both as choices. A provider key that a virtual key of the same name replaces is left out.

### Authentication

Send `Authorization: Bearer <token>`.

### Parameters

- `provider` (query, string, default `aws`)

### Responses

#### 200: Successful Response

- `success` (boolean, default `true`)
- `timestamp` (date-time string)
- `data` (object, required)
  - `tag_keys` (array of string): Distinct provider tag keys present in the tenant's tag-cost data, less any a virtual key of the same name replaces
  - `tag_key_details` (array of object): Where each provider key was set: user, project, kubernetes or system
    - `key` (string, required)
    - `sources` (array of string, required)
  - `virtual_tag_keys` (array of object): Every virtual tag key
    - `id` (string, required): Virtual tag key id
    - `name` (string, required): Virtual tag key name

#### Errors

- `400`: Bad Request
- `401`: Authentication Error
- `403`: Authorization Error
- `404`: Not Found
- `409`: Conflict
- `422`: Validation Error
- `429`: Rate Limit Exceeded
- `500`: Internal Server Error

Body of `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`:

- `success` (`false`, required)
- `error` (object, required)
  - `code` (string, required)
  - `message` (string, required)
  - `details` (any)
- `timestamp` (date-time string, required)
