---
title: List subject types
description: Datadog, the leading service for cloud-scale monitoring.
breadcrumbs: Docs > API Reference > Experiments
---

> For the complete documentation index, see [llms.txt](https://docs.datadoghq.com/llms.txt).

{% callout %}
# Important note for users on the following Datadog sites: app.ddog-gov.com, us2.ddog-gov.com

{% alert level="danger" %}
This product is not supported for your selected [Datadog site](https://docs.datadoghq.com/getting_started/site.md). ({% placeholder "user-datadog-site-name" /%}).
{% /alert %}

{% /callout %}

# List subject types{% #list-subject-types %}

{% tab title="v2" %}

| Datadog site      | API endpoint                                                       |
| ----------------- | ------------------------------------------------------------------ |
| ap1.datadoghq.com | GET https://api.ap1.datadoghq.com/api/v2/experiments/subject-types |
| ap2.datadoghq.com | GET https://api.ap2.datadoghq.com/api/v2/experiments/subject-types |
| app.datadoghq.eu  | GET https://api.datadoghq.eu/api/v2/experiments/subject-types      |
| app.ddog-gov.com  | GET https://api.ddog-gov.com/api/v2/experiments/subject-types      |
| us2.ddog-gov.com  | GET https://api.us2.ddog-gov.com/api/v2/experiments/subject-types  |
| uk1.datadoghq.com | GET https://api.uk1.datadoghq.com/api/v2/experiments/subject-types |
| app.datadoghq.com | GET https://api.datadoghq.com/api/v2/experiments/subject-types     |
| us3.datadoghq.com | GET https://api.us3.datadoghq.com/api/v2/experiments/subject-types |
| us5.datadoghq.com | GET https://api.us5.datadoghq.com/api/v2/experiments/subject-types |

### Overview

List subject types. Returns a paginated list of the subject types defined for the organization. This endpoint requires the `product_analytics_settings_read` permission.

OAuth apps require the `product_analytics_settings_read` authorization [scope](https://docs.datadoghq.com/api/latest/scopes.md#experiments) to access this endpoint.



### Arguments

#### Query Strings

| Name         | Type    | Description                                                                                                                                                                                             |
| ------------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| include      | string  | Set to `counts` to add experiment_count, exposure_source_count, metric_sql_model_count and protocol_count to each subject type. Each costs an extra query, so they are omitted unless asked for.        |
| page[limit]  | integer | Maximum number of results to return. Defaults to 25 when omitted, and is capped at 50 (larger values are clamped to 50). The response includes meta.page (with total) and pagination links.             |
| page[offset] | integer | Number of results to skip for pagination. Defaults to 0 when omitted.                                                                                                                                   |
| search       | string  | Find subject types whose names contain the search text, regardless of case.                                                                                                                             |
| sort         | string  | Sort fields: name, created_at, or updated_at. Use a comma-separated list in priority order, for example name,-created_at. Prefix each field with `-` for descending. Defaults to created_at descending. |

### Response

{% tab title="200" %}
OK
{% tab title="Model" %}
List of subject type resources with pagination information.

| Parent field | Field                       | Type      | Description                                                         |
| ------------ | --------------------------- | --------- | ------------------------------------------------------------------- |
|              | data [*required*]      | [object]  | Resources returned in this response.                                |
| data         | attributes                  | object    | Details of the subject type.                                        |
| attributes   | created_at                  | date-time | Time when this resource was created.                                |
| attributes   | experiment_count            | int64     | Number of experiments that reference this resource.                 |
| attributes   | exposure_source_count       | int64     | Number of exposure sources that reference this subject type.        |
| attributes   | is_default                  | boolean   | Whether this is the organization's default subject type.            |
| attributes   | metric_sql_model_count      | int64     | Number of metric SQL models that reference this subject type.       |
| attributes   | migration_metadata          |           | Metadata retained for resources imported from another system.       |
| attributes   | name                        | string    | Display name of the subject type.                                   |
| attributes   | product_analytics_attribute | string    | Product Analytics attribute used to identify subjects of this type. |
| attributes   | protocol_count              | int64     | Number of protocols that reference this subject type.               |
| attributes   | updated_at                  | date-time | Time when this resource was last updated.                           |
| attributes   | warehouse_column_names      | [string]  | Warehouse columns that identify subjects of this type.              |
| data         | id [*required*]        | uuid      | ID of the subject type.                                             |
| data         | type [*required*]      | enum      | Subject types resource type. Allowed enum values: `subject-types`   |
|              | links                       | object    | Links for navigating a paginated result set.                        |
| links        | first                       | string    | URL of the first page of results.                                   |
| links        | last                        | string    | URL of the last page of results.                                    |
| links        | next                        | string    | URL of the next page of results.                                    |
| links        | prev                        | string    | URL of the previous page of results.                                |
| links        | self                        | string    | URL of the current page of results.                                 |
|              | meta                        | object    | Pagination information for a list response.                         |
| meta         | page                        | object    | Result counts and offsets for a page of results.                    |
| page         | first_offset                | int64     | Offset of the first page of results.                                |
| page         | last_offset                 | int64     | Offset of the last page of results.                                 |
| page         | limit                       | int64     | Maximum number of results returned in one page.                     |
| page         | next_offset                 | int64     | Offset of the next page of results.                                 |
| page         | offset                      | int64     | Number of results skipped before this page.                         |
| page         | prev_offset                 | int64     | Offset of the previous page of results.                             |
| page         | total                       | int64     | Total number of matching results across all pages.                  |
| page         | type                        | string    | Pagination method used for this result set.                         |

{% /tab %}

{% tab title="Example" %}

```json
{
  "data": [
    {
      "attributes": {
        "created_at": "2024-01-01T12:00:00Z",
        "is_default": true,
        "name": "User",
        "product_analytics_attribute": "@usr.id",
        "updated_at": "2024-01-01T12:00:00Z",
        "warehouse_column_names": [
          "user_id",
          "customer_id"
        ]
      },
      "id": "550e8400-e29b-41d4-a716-446655440010",
      "type": "subject-types"
    }
  ]
}
```

{% /tab %}

{% /tab %}

{% tab title="400" %}
Invalid query parameter: bad page[offset]/page[limit], or unknown sort field.
{% tab title="Model" %}
API error response.

| Parent field | Field                    | Type     | Description                                                                     |
| ------------ | ------------------------ | -------- | ------------------------------------------------------------------------------- |
|              | errors [*required*] | [object] | A list of errors.                                                               |
| errors       | detail                   | string   | A human-readable explanation specific to this occurrence of the error.          |
| errors       | meta                     | object   | Non-standard meta-information about the error                                   |
| errors       | source                   | object   | References to the source of the error.                                          |
| source       | header                   | string   | A string indicating the name of a single request header which caused the error. |
| source       | parameter                | string   | A string indicating which URI query parameter caused the error.                 |
| source       | pointer                  | string   | A JSON pointer to the value in the request document that caused the error.      |
| errors       | status                   | string   | Status code of the response.                                                    |
| errors       | title                    | string   | Short human-readable summary of the error.                                      |

{% /tab %}

{% tab title="Example" %}

```json
{
  "errors": [
    {
      "detail": "Missing required attribute in body",
      "meta": {},
      "source": {
        "header": "Authorization",
        "parameter": "limit",
        "pointer": "/data/attributes/title"
      },
      "status": "400",
      "title": "Bad Request"
    }
  ]
}
```

{% /tab %}

{% /tab %}

{% tab title="401" %}
Missing or invalid authentication (dd-api-key + dd-application-key headers, or a valid user session).
{% tab title="Model" %}
API error response.

| Parent field | Field                    | Type     | Description                                                                     |
| ------------ | ------------------------ | -------- | ------------------------------------------------------------------------------- |
|              | errors [*required*] | [object] | A list of errors.                                                               |
| errors       | detail                   | string   | A human-readable explanation specific to this occurrence of the error.          |
| errors       | meta                     | object   | Non-standard meta-information about the error                                   |
| errors       | source                   | object   | References to the source of the error.                                          |
| source       | header                   | string   | A string indicating the name of a single request header which caused the error. |
| source       | parameter                | string   | A string indicating which URI query parameter caused the error.                 |
| source       | pointer                  | string   | A JSON pointer to the value in the request document that caused the error.      |
| errors       | status                   | string   | Status code of the response.                                                    |
| errors       | title                    | string   | Short human-readable summary of the error.                                      |

{% /tab %}

{% tab title="Example" %}

```json
{
  "errors": [
    {
      "detail": "Missing required attribute in body",
      "meta": {},
      "source": {
        "header": "Authorization",
        "parameter": "limit",
        "pointer": "/data/attributes/title"
      },
      "status": "400",
      "title": "Bad Request"
    }
  ]
}
```

{% /tab %}

{% /tab %}

{% tab title="403" %}
Authenticated caller lacks the product_analytics_settings_read permission.
{% tab title="Model" %}
API error response.

| Parent field | Field                    | Type     | Description                                                                     |
| ------------ | ------------------------ | -------- | ------------------------------------------------------------------------------- |
|              | errors [*required*] | [object] | A list of errors.                                                               |
| errors       | detail                   | string   | A human-readable explanation specific to this occurrence of the error.          |
| errors       | meta                     | object   | Non-standard meta-information about the error                                   |
| errors       | source                   | object   | References to the source of the error.                                          |
| source       | header                   | string   | A string indicating the name of a single request header which caused the error. |
| source       | parameter                | string   | A string indicating which URI query parameter caused the error.                 |
| source       | pointer                  | string   | A JSON pointer to the value in the request document that caused the error.      |
| errors       | status                   | string   | Status code of the response.                                                    |
| errors       | title                    | string   | Short human-readable summary of the error.                                      |

{% /tab %}

{% tab title="Example" %}

```json
{
  "errors": [
    {
      "detail": "Missing required attribute in body",
      "meta": {},
      "source": {
        "header": "Authorization",
        "parameter": "limit",
        "pointer": "/data/attributes/title"
      },
      "status": "400",
      "title": "Bad Request"
    }
  ]
}
```

{% /tab %}

{% /tab %}

{% tab title="429" %}
Too many requests
{% tab title="Model" %}
API error response.

| Field                    | Type     | Description       |
| ------------------------ | -------- | ----------------- |
| errors [*required*] | [string] | A list of errors. |

{% /tab %}

{% tab title="Example" %}

```json
{
  "errors": [
    "Bad Request"
  ]
}
```

{% /tab %}

{% /tab %}

### Code Example

##### 
                  \# Use a Personal Access Token or Service Access Token export DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>"  \# Curl command curl -X GET "https://api.datadoghq.com/api/v2/experiments/subject-types" \
-H "Accept: application/json" \
-H "Authorization: Bearer ${DD_BEARER_TOKEN}" 

                
##### 

```python
"""
List subject types returns "OK" response
"""

from os import environ
from datadog_api_client import ApiClient, Configuration
from datadog_api_client.v2.api.experiments_api import ExperimentsApi

configuration = Configuration()
configuration.access_token = environ["DD_BEARER_TOKEN"]
with ApiClient(configuration) as api_client:
    api_instance = ExperimentsApi(api_client)
    response = api_instance.list_subject_types()

    print(response)
```

#### Instructions

First [install the library and its dependencies](https://docs.datadoghq.com/api/latest.md?code-lang=python) and then save the example to `example.py` and run following commands:
    DD_SITE="datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" python3 "example.py"
##### 

```ruby
# List subject types returns "OK" response

require "datadog_api_client"
DatadogAPIClient.configure do |config|
  config.access_token = ENV["DD_BEARER_TOKEN"]
end
api_instance = DatadogAPIClient::V2::ExperimentsAPI.new
p api_instance.list_subject_types()
```

#### Instructions

First [install the library and its dependencies](https://docs.datadoghq.com/api/latest.md?code-lang=ruby) and then save the example to `example.rb` and run following commands:
    DD_SITE="datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" rb "example.rb"
##### 

```go
// List subject types returns "OK" response

package main

import (
	"context"
	"encoding/json"
	"fmt"
	"os"

	"github.com/DataDog/datadog-api-client-go/v2/api/datadog"
	"github.com/DataDog/datadog-api-client-go/v2/api/datadogV2"
)

func main() {
	ctx := datadog.NewDefaultContext(context.Background())
	ctx = context.WithValue(ctx, datadog.ContextAccessToken, os.Getenv("DD_BEARER_TOKEN"))
	configuration := datadog.NewConfiguration()
	apiClient := datadog.NewAPIClient(configuration)
	api := datadogV2.NewExperimentsApi(apiClient)
	resp, r, err := api.ListSubjectTypes(ctx, *datadogV2.NewListSubjectTypesOptionalParameters())

	if err != nil {
		fmt.Fprintf(os.Stderr, "Error when calling `ExperimentsApi.ListSubjectTypes`: %v\n", err)
		fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
	}

	responseContent, _ := json.MarshalIndent(resp, "", "  ")
	fmt.Fprintf(os.Stdout, "Response from `ExperimentsApi.ListSubjectTypes`:\n%s\n", responseContent)
}
```

#### Instructions

First [install the library and its dependencies](https://docs.datadoghq.com/api/latest.md?code-lang=go) and then save the example to `main.go` and run following commands:
    DD_SITE="datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" go run "main.go"
##### 

```java
// List subject types returns "OK" response

import com.datadog.api.client.ApiClient;
import com.datadog.api.client.ApiException;
import com.datadog.api.client.v2.api.ExperimentsApi;
import com.datadog.api.client.v2.model.ExperimentsSubjectTypeV2DTOArray;

public class Example {
  public static void main(String[] args) {
    ApiClient defaultClient = ApiClient.getDefaultApiClient();
    defaultClient.setAccessToken(System.getenv("DD_BEARER_TOKEN"));
    ExperimentsApi apiInstance = new ExperimentsApi(defaultClient);

    try {
      ExperimentsSubjectTypeV2DTOArray result = apiInstance.listSubjectTypes();
      System.out.println(result);
    } catch (ApiException e) {
      System.err.println("Exception when calling ExperimentsApi#listSubjectTypes");
      System.err.println("Status code: " + e.getCode());
      System.err.println("Reason: " + e.getResponseBody());
      System.err.println("Response headers: " + e.getResponseHeaders());
      e.printStackTrace();
    }
  }
}
```

#### Instructions

First [install the library and its dependencies](https://docs.datadoghq.com/api/latest.md?code-lang=java) and then save the example to `Example.java` and run following commands:
    DD_SITE="datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" java "Example.java"
##### 

```rust
// List subject types returns "OK" response
use datadog_api_client::datadog;
use datadog_api_client::datadogV2::api_experiments::ExperimentsAPI;
use datadog_api_client::datadogV2::api_experiments::ListSubjectTypesOptionalParams;

#[tokio::main]
async fn main() {
    let configuration = datadog::Configuration::new();
    let api = ExperimentsAPI::with_config(configuration);
    let resp = api
        .list_subject_types(ListSubjectTypesOptionalParams::default())
        .await;
    if let Ok(value) = resp {
        println!("{:#?}", value);
    } else {
        println!("{:#?}", resp.unwrap_err());
    }
}
```

#### Instructions

First [install the library and its dependencies](https://docs.datadoghq.com/api/latest.md?code-lang=rust) and then save the example to `src/main.rs` and run following commands:
    DD_SITE="datadoghq.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" cargo run
{% /tab %}
