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

# Get User Custom Attributes

> Get a list of custom user attributes

Retrieve all custom attributes configured for users on your platform.

## Request Headers

<ParamField header="X-API-KEY" type="string" required>
  API Key. Go to your Konstantly site > Settings > API and copy the value from there.
</ParamField>

## Response

Array of custom attribute objects with the following properties:

<ResponseField name="id" type="integer" required>
  Attribute ID
</ResponseField>

<ResponseField name="name" type="string" required>
  Attribute name
</ResponseField>

<ResponseField name="type" type="integer" required>
  Attribute type:

  * 1: text
  * 2: date
  * 3: single choice
  * 4: multiple choice
  * 5: user choice
  * 6: yes/no
  * 7: external link
  * 8: number
</ResponseField>

<ResponseField name="apiId" type="string" required>
  Attribute API identifier
</ResponseField>

<ResponseField name="position" type="integer" required>
  Display position order
</ResponseField>

<ResponseField name="isRequired" type="boolean" required>
  Whether the attribute is mandatory
</ResponseField>

<ResponseField name="extraData" type="array">
  Additional data for choice-type attributes

  <Expandable title="Extra data item properties">
    <ResponseField name="id" type="integer" required>Item ID</ResponseField>
    <ResponseField name="position" type="integer" required>Item position</ResponseField>
    <ResponseField name="value" type="string" required>Item value</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="isEditable" type="boolean" required>
  Whether the attribute can be modified
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
  --url 'https://YOURSITE.konstant.ly/openapi/v1/custom/attributes/users' \
  --header 'X-API-KEY: 1qaz2wsx3edc4rfv1qaz2wsx3edc4rfv'
  ```

  ```python Python theme={null}
  import requests
  from typing import List, Dict, Any

  def get_user_attributes(api_key: str) -> List[Dict[str, Any]]:
  url = "https://YOURSITE.konstant.ly/openapi/v1/custom/attributes/users"
  headers = {"X-API-KEY": api_key}

  response = requests.get(url, headers=headers)
  response.raise_for_status()
  return response.json()

  # Example usage
  try:
  attributes = get_user_attributes("1qaz2wsx3edc4rfv1qaz2wsx3edc4rfv")
  for attr in attributes:
  print(f"Attribute: {attr['name']}")
  print(f"Type: {attr['type']}")
  print(f"Required: {attr['isRequired']}")
  if attr['extraData']:
  print("Options:")
  for option in attr['extraData']:
  print(f"  - {option['value']}")
  print("---")
  except Exception as e:
  print(f"Error fetching user attributes: {str(e)}")
  ```

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

  async function getUserAttributes(apiKey) {
  try {
  const response = await axios.get(
  'https://YOURSITE.konstant.ly/openapi/v1/custom/attributes/users',
  {
  headers: {
  'X-API-KEY': apiKey
  }
  }
  );
  return response.data;
  } catch (error) {
  console.error('Error fetching user attributes:', error.message);
  throw error;
  }
  }

  // Example usage
  getUserAttributes('1qaz2wsx3edc4rfv1qaz2wsx3edc4rfv')
  .then(attributes => {
  attributes.forEach(attr => {
      console.log(`Attribute: ${attr.name}`);
      console.log(`Type: ${attr.type}`);
      console.log(`Required: ${attr.isRequired}`);
      if (attr.extraData?.length) {
          console.log('Options:');
          attr.extraData.forEach(option => {
              console.log(`  - ${option.value}`);
          });
      }
      console.log('---');
  });
  })
  .catch(error => console.error('Error:', error.message));
  ```
</RequestExample>

<ResponseExample>
  ```json Response theme={null}
  [
  {
      "id": 1,
      "name": "Department",
      "type": 3,
      "apiId": "department",
      "position": 1,
      "isRequired": true,
      "extraData": [
  {
      "id": 1,
      "position": 1,
      "value": "Sales"
  },
  {
      "id": 2,
      "position": 2,
      "value": "Marketing"
  },
  {
      "id": 3,
      "position": 3,
      "value": "Engineering"
  }
      ],
      "isEditable": true
  },
  {
      "id": 2,
      "name": "Employee ID",
      "type": 1,
      "apiId": "employee_id",
      "position": 2,
      "isRequired": true,
      "extraData": null,
      "isEditable": true
  }
  ]
  ```
</ResponseExample>
