> ## 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 metadata

> Get the project's identity, and the distinct dimensions (models, providers, features, tags, customers) it has seen.

The reference values used to configure dashboards, filters, and other API calls.

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

  client = weflayr.client(api_key="wf-...")
  ```

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

  const client = weflayr.client({ apiKey: 'wf-...' });
  ```

  ```bash cURL theme={null}
  # Passed as a Bearer token on every request
  export WEFLAYR_API_KEY="wf-..."
  ```
</CodeGroup>

## Get project

<CodeGroup>
  ```python Python theme={null}
  client.get_project()
  ```

  ```js Node.js theme={null}
  await weflayr.api.getProject({
    client,
    throwOnError: true,
  });
  ```

  ```bash cURL theme={null}
  curl "https://app.weflayr.com/api/project/" \
    -H "Authorization: Bearer $WEFLAYR_API_KEY"
  ```
</CodeGroup>

**Output:**

```json theme={null}
{
  "name": "My Project",
  "project_type": "revenue",
  "key_metric_names": [],
  "environment": "prod",
  "created_at": "2026-01-15T09:30:00Z"
}
```

**Input params:** none.

## Get tags

Get the `{key: list[string]}` facets of every tag dimension seen on the project. It concerns both run tags (the metadata you attach to your LLM calls) and [customer tags](/configure/customer-tags).

<CodeGroup>
  ```python Python theme={null}
  client.get_tags(include_run_tags=True, include_customer_tags=True)
  ```

  ```js Node.js theme={null}
  await weflayr.api.getTags({
    client,
    throwOnError: true,
    query: { includeRunTags: true, includeCustomerTags: true },
  });
  ```

  ```bash cURL theme={null}
  curl "https://app.weflayr.com/api/tags/" \
    -H "Authorization: Bearer $WEFLAYR_API_KEY"
  ```
</CodeGroup>

**Output:**

```json theme={null}
{
  "run_tags": {"environment": ["production", "staging"]},
  "customer_tags": {"plan": ["enterprise", "free"], "region": ["EU", "US"]}
}
```

**Input params:**

<ParamField query="include_run_tags" type="boolean" default="true">
  Include run-tag facets. When `false`, `run_tags` is an empty object.
</ParamField>

<ParamField query="include_customer_tags" type="boolean" default="true">
  Include customer-tag facets. When `false`, `customer_tags` is an empty object.
</ParamField>

## Get models

<CodeGroup>
  ```python Python theme={null}
  client.get_models()
  ```

  ```js Node.js theme={null}
  await weflayr.api.getModels({
    client,
    throwOnError: true,
  });
  ```

  ```bash cURL theme={null}
  curl "https://app.weflayr.com/api/models/" \
    -H "Authorization: Bearer $WEFLAYR_API_KEY"
  ```
</CodeGroup>

**Output:**

```json theme={null}
{"models": ["gpt-4o", "gpt-4o-mini", "claude-sonnet-5"]}
```

**Input params:** none.

## Get providers

<CodeGroup>
  ```python Python theme={null}
  client.get_providers()
  ```

  ```js Node.js theme={null}
  await weflayr.api.getProviders({
    client,
    throwOnError: true,
  });
  ```

  ```bash cURL theme={null}
  curl "https://app.weflayr.com/api/providers/" \
    -H "Authorization: Bearer $WEFLAYR_API_KEY"
  ```
</CodeGroup>

**Output:**

```json theme={null}
{"providers": ["openai", "anthropic"]}
```

**Input params:** none.

## Get customers

Get every known customer of the project, with its [customer tags](/configure/customer-tags).

<CodeGroup>
  ```python Python theme={null}
  client.get_customers(include_customer_tags=True)
  ```

  ```js Node.js theme={null}
  await weflayr.api.getCustomers({
    client,
    throwOnError: true,
    query: { includeCustomerTags: true },
  });
  ```

  ```bash cURL theme={null}
  curl "https://app.weflayr.com/api/customers/" \
    -H "Authorization: Bearer $WEFLAYR_API_KEY"
  ```
</CodeGroup>

**Output:**

```json theme={null}
{
  "customers": [
    {"customer_name": "c_123", "customer_tags": {"plan": "enterprise", "region": "EU"}},
    {"customer_name": "c_456", "customer_tags": {}}
  ],
  "next_cursor": null,
  "has_more": false
}
```

**Input params:**

<ParamField query="include_customer_tags" type="boolean" default="true">
  Include each customer's tags. When `false`, `customer_tags` is an empty object.
</ParamField>

<ParamField query="limit" type="integer" default="100">
  Numbers of customers 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>

## Get features

<CodeGroup>
  ```python Python theme={null}
  client.get_features()
  ```

  ```js Node.js theme={null}
  await weflayr.api.getFeatures({
    client,
    throwOnError: true,
  });
  ```

  ```bash cURL theme={null}
  curl "https://app.weflayr.com/api/features/" \
    -H "Authorization: Bearer $WEFLAYR_API_KEY"
  ```
</CodeGroup>

**Output:**

```json theme={null}
{"features": ["chatbot", "summarization"]}
```

**Input params:** none.
