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

# Get key metrics

> List the key-metric values booked per user and month.

Key metrics belong to an [internal project](/product/organizations-and-projects#internal-projects). On a revenue-linked project, use the [Revenue API](/api/management/set-revenue) instead.

## Parameters

Passed in the query string.

<ParamField query="user_names" type="list[string]">
  Specify the names of the users whose key metrics should be fetched. Not setting it means "all users".
</ParamField>

<ParamField query="limit" type="integer" default="100">
  Numbers of rows to fetch. Max `1000`.
</ParamField>

<ParamField query="cursor" type="string">
  The route is paginated: pass the previous page's `next_cursor` to fetch the next page. PS: `has_more` from the output says whether another page exists.
</ParamField>

<RequestExample>
  ```python Python theme={null}
  import weflayr

  client = weflayr.client()  # reads WEFLAYR_API_KEY

  client.get_key_metrics(user_names=["u_123", "u_456"])
  ```

  ```js Node.js theme={null}
  const weflayr = require('weflayr');

  const client = weflayr.client(); // reads WEFLAYR_API_KEY

  await weflayr.api.getKeyMetrics({
    client,
    throwOnError: true,
    query: { userNames: ['u_123', 'u_456'] },
  });
  ```

  ```bash cURL theme={null}
  curl "https://app.weflayr.com/api/key-metrics/?user_names=u_123&user_names=u_456" \
    -H "Authorization: Bearer $WEFLAYR_API_KEY"
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "rows": [
      {"metric_id": "b3f2b160-6e12-4f1a-9c3d-0a2e7c9b5d41", "user_name": "u_123", "metric_name": "Meetings booked", "month": "2026-06", "amount": 3.0, "source": "api"}
    ],
    "next_cursor": null,
    "has_more": false
  }
  ```
</ResponseExample>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.