For AI agents: A markdown version of this page is available at https://docs.datadoghq.com/api/latest/forms/get-a-form.md. A documentation index is available at /llms.txt.

Note: This endpoint is in preview and is subject to change. If you have any feedback, contact Datadog support.

GET https://api.ap1.datadoghq.com/api/v2/forms/{form_id}https://api.ap2.datadoghq.com/api/v2/forms/{form_id}https://api.datadoghq.eu/api/v2/forms/{form_id}https://api.ddog-gov.com/api/v2/forms/{form_id}https://api.us2.ddog-gov.com/api/v2/forms/{form_id}https://api.uk1.datadoghq.com/api/v2/forms/{form_id}https://api.datadoghq.com/api/v2/forms/{form_id}https://api.us3.datadoghq.com/api/v2/forms/{form_id}https://api.us5.datadoghq.com/api/v2/forms/{form_id}

Overview

Get a form definition by its ID.

Arguments

Path Parameters

Name

Type

Description

form_id [required]

string

The ID of the form.

Query Strings

Name

Type

Description

version

string

The version of the form to retrieve. Use ’latest’ for the most recent draft, ‘published’ for the last published version, or a specific version number.

Response

OK

A response containing a single form.

Expand All

Field

Type

Description

data [required]

object

A form resource object.

attributes [required]

object

The attributes of a form.

active [required]

boolean

Whether the form is currently active.

anonymous [required]

boolean

Whether the form accepts anonymous submissions.

created_at [required]

date-time

The time at which the form was created.

datastore_config [required]

object

The datastore configuration for a form.

datastore_id [required]

uuid

The ID of the datastore.

primary_column_name [required]

string

The name of the primary column in the datastore.

primary_key_generation_strategy [required]

string

The strategy used to generate primary keys in the datastore.

description [required]

string

The description of the form.

end_date

date-time

The date and time at which the form stops accepting responses.

has_submitted

boolean

Whether the current user has already submitted this form. Only present for forms with single_response set to true.

idp_survey [required]

boolean

Whether the form is an IDP survey.

modified_at [required]

date-time

The time at which the form was last modified.

name [required]

string

The name of the form.

org_id [required]

int64

The ID of the organization that owns this form.

publication

object

The attributes of a form publication.

created_at [required]

date-time

The time at which the publication was created.

form_id [required]

uuid

The ID of the form.

form_version [required]

int64

The version number that was published.

id

string

The ID of the form publication.

modified_at [required]

date-time

The time at which the publication was last modified.

org_id [required]

int64

The ID of the organization that owns this publication.

publish_seq [required]

int64

The sequential publication number for this form.

user_id [required]

int64

The ID of the user who created this publication.

user_uuid [required]

uuid

The UUID of the user who created this publication.

self_service [required]

boolean

Whether the form is available in the self-service catalog.

single_response [required]

boolean

Whether each user can only submit one response.

user_id [required]

int64

The ID of the user who created this form.

user_uuid [required]

uuid

The UUID of the user who created this form.

version

object

The attributes of a form version.

created_at [required]

date-time

The time at which the version was created.

data_definition [required]

object

A JSON Schema definition that describes the form's data fields.

description

string

A description shown to form respondents.

properties

object

A map of field names to their JSON Schema definitions.

required

[string]

List of field names that must be answered.

title

string

The title of the form schema.

type

enum

The root schema type. Allowed enum values: object

default: object

definition_signature [required]

string

The signature of the version definition.

etag [required]

string

The ETag for optimistic concurrency control.

id

string

The ID of the form version.

modified_at [required]

date-time

The time at which the version was last modified.

state [required]

enum

The state of a form version. Allowed enum values: draft,frozen

ui_definition [required]

object

UI configuration for rendering form fields, including widget overrides, field ordering, and themes.

ui:order

[string]

The order in which form fields are displayed.

ui:theme

object

The visual theme applied to the form.

primaryColor

enum

The primary color of the form theme. Allowed enum values: gray,red,orange,yellow,green,light-blue,dark-blue,magenta,indigo

user_id [required]

int64

The ID of the user who created this version.

user_uuid [required]

uuid

The UUID of the user who created this version.

version [required]

int64

The sequential version number.

id [required]

uuid

The ID of the form.

type [required]

enum

The resource type for a form. Allowed enum values: forms

default: forms

{
  "data": {
    "attributes": {
      "active": true,
      "anonymous": false,
      "created_at": "2026-05-29T20:06:13.677353Z",
      "datastore_config": {
        "datastore_id": "5108ea24-dd83-4696-9caa-f069f73d0fad",
        "primary_column_name": "id",
        "primary_key_generation_strategy": "none"
      },
      "description": "A form to collect user feedback.",
      "end_date": null,
      "has_submitted": false,
      "idp_survey": false,
      "modified_at": "2026-05-29T20:06:13.677353Z",
      "name": "User Feedback Form",
      "org_id": 2,
      "publication": {
        "created_at": "2026-05-29T20:06:13.677353Z",
        "form_id": "afc67600-0511-43b1-9b18-578fb4979bd3",
        "form_version": 1,
        "id": "42",
        "modified_at": "2026-05-29T20:06:13.677353Z",
        "org_id": 2,
        "publish_seq": 1,
        "user_id": 10001,
        "user_uuid": "1fc709aa-be19-4539-a47d-52a30d78a978"
      },
      "self_service": false,
      "single_response": false,
      "user_id": 10001,
      "user_uuid": "1fc709aa-be19-4539-a47d-52a30d78a978",
      "version": {
        "created_at": "2026-05-29T20:06:14.895921Z",
        "data_definition": {
          "description": "Welcome to the Engineering Experience Survey.",
          "properties": {},
          "required": [],
          "title": "Developer Experience Survey",
          "type": "string"
        },
        "definition_signature": "{\"signature\":\"b7f312957a80cea2c8c9950532b205a90a3f8a7ebb7e52fc25437a25d903d545\",\"version\":1}",
        "etag": "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d",
        "id": "126",
        "modified_at": "2026-05-29T20:06:14.949163Z",
        "state": "frozen",
        "ui_definition": {
          "ui:order": [],
          "ui:theme": {
            "primaryColor": "string"
          }
        },
        "user_id": 10001,
        "user_uuid": "1fc709aa-be19-4539-a47d-52a30d78a978",
        "version": 1
      }
    },
    "id": "22f6006a-2302-4926-9396-d2dfcf7b0b34",
    "type": "forms"
  }
}

Bad Request

API error response.

Expand All

Field

Type

Description

errors [required]

[object]

A list of errors.

detail

string

A human-readable explanation specific to this occurrence of the error.

meta

object

Non-standard meta-information about the error

source

object

References to the source of the error.

header

string

A string indicating the name of a single request header which caused the error.

parameter

string

A string indicating which URI query parameter caused the error.

pointer

string

A JSON pointer to the value in the request document that caused the error.

status

string

Status code of the response.

title

string

Short human-readable summary of the error.

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

Unauthorized

API error response.

Expand All

Field

Type

Description

errors [required]

[object]

A list of errors.

detail

string

A human-readable explanation specific to this occurrence of the error.

meta

object

Non-standard meta-information about the error

source

object

References to the source of the error.

header

string

A string indicating the name of a single request header which caused the error.

parameter

string

A string indicating which URI query parameter caused the error.

pointer

string

A JSON pointer to the value in the request document that caused the error.

status

string

Status code of the response.

title

string

Short human-readable summary of the error.

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

Not Found

API error response.

Expand All

Field

Type

Description

errors [required]

[object]

A list of errors.

detail

string

A human-readable explanation specific to this occurrence of the error.

meta

object

Non-standard meta-information about the error

source

object

References to the source of the error.

header

string

A string indicating the name of a single request header which caused the error.

parameter

string

A string indicating which URI query parameter caused the error.

pointer

string

A JSON pointer to the value in the request document that caused the error.

status

string

Status code of the response.

title

string

Short human-readable summary of the error.

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

Too many requests

API error response.

Expand All

Field

Type

Description

errors [required]

[string]

A list of errors.

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

Code Example

                  # Path parameters
export form_id="22f6006a-2302-4926-9396-d2dfcf7b0b34"
# Curl command
curl -X GET "https://api.ap1.datadoghq.com"https://api.ap2.datadoghq.com"https://api.datadoghq.eu"https://api.ddog-gov.com"https://api.us2.ddog-gov.com"https://api.uk1.datadoghq.com"https://api.datadoghq.com"https://api.us3.datadoghq.com"https://api.us5.datadoghq.com/api/v2/forms/${form_id}" \ -H "Accept: application/json" \ -H "DD-API-KEY: ${DD_API_KEY}" \ -H "DD-APPLICATION-KEY: ${DD_APP_KEY}"
"""
Get a form returns "OK" response
"""

from os import environ
from datadog_api_client import ApiClient, Configuration
from datadog_api_client.v2.api.forms_api import FormsApi

# there is a valid "form" in the system
FORM_DATA_ID = environ["FORM_DATA_ID"]

configuration = Configuration()
configuration.unstable_operations["get_form"] = True
with ApiClient(configuration) as api_client:
    api_instance = FormsApi(api_client)
    response = api_instance.get_form(
        form_id=FORM_DATA_ID,
    )

    print(response)

Instructions

First install the library and its dependencies and then save the example to example.py and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comap2.datadoghq.comuk1.datadoghq.comddog-gov.comus2.ddog-gov.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" python3 "example.py"
# Get a form returns "OK" response

require "datadog_api_client"
DatadogAPIClient.configure do |config|
  config.unstable_operations["v2.get_form".to_sym] = true
end
api_instance = DatadogAPIClient::V2::FormsAPI.new

# there is a valid "form" in the system
FORM_DATA_ID = ENV["FORM_DATA_ID"]
p api_instance.get_form(FORM_DATA_ID)

Instructions

First install the library and its dependencies and then save the example to example.rb and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comap2.datadoghq.comuk1.datadoghq.comddog-gov.comus2.ddog-gov.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" rb "example.rb"
// Get a form 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"
	"github.com/google/uuid"
)

func main() {
	// there is a valid "form" in the system
	FormDataID := uuid.MustParse(os.Getenv("FORM_DATA_ID"))

	ctx := datadog.NewDefaultContext(context.Background())
	configuration := datadog.NewConfiguration()
	configuration.SetUnstableOperationEnabled("v2.GetForm", true)
	apiClient := datadog.NewAPIClient(configuration)
	api := datadogV2.NewFormsApi(apiClient)
	resp, r, err := api.GetForm(ctx, FormDataID, *datadogV2.NewGetFormOptionalParameters())

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

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

Instructions

First install the library and its dependencies and then save the example to main.go and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comap2.datadoghq.comuk1.datadoghq.comddog-gov.comus2.ddog-gov.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" go run "main.go"
// Get a form returns "OK" response

import com.datadog.api.client.ApiClient;
import com.datadog.api.client.ApiException;
import com.datadog.api.client.v2.api.FormsApi;
import com.datadog.api.client.v2.model.FormResponse;
import java.util.UUID;

public class Example {
  public static void main(String[] args) {
    ApiClient defaultClient = ApiClient.getDefaultApiClient();
    defaultClient.setUnstableOperationEnabled("v2.getForm", true);
    FormsApi apiInstance = new FormsApi(defaultClient);

    // there is a valid "form" in the system
    UUID FORM_DATA_ID = null;
    try {
      FORM_DATA_ID = UUID.fromString(System.getenv("FORM_DATA_ID"));
    } catch (IllegalArgumentException e) {
      System.err.println("Error parsing UUID: " + e.getMessage());
    }

    try {
      FormResponse result = apiInstance.getForm(FORM_DATA_ID);
      System.out.println(result);
    } catch (ApiException e) {
      System.err.println("Exception when calling FormsApi#getForm");
      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 and then save the example to Example.java and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comap2.datadoghq.comuk1.datadoghq.comddog-gov.comus2.ddog-gov.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" java "Example.java"
// Get a form returns "OK" response
use datadog_api_client::datadog;
use datadog_api_client::datadogV2::api_forms::FormsAPI;
use datadog_api_client::datadogV2::api_forms::GetFormOptionalParams;

#[tokio::main]
async fn main() {
    // there is a valid "form" in the system
    let form_data_id =
        uuid::Uuid::parse_str(&std::env::var("FORM_DATA_ID").unwrap()).expect("Invalid UUID");
    let mut configuration = datadog::Configuration::new();
    configuration.set_unstable_operation_enabled("v2.GetForm", true);
    let api = FormsAPI::with_config(configuration);
    let resp = api
        .get_form(form_data_id.clone(), GetFormOptionalParams::default())
        .await;
    if let Ok(value) = resp {
        println!("{:#?}", value);
    } else {
        println!("{:#?}", resp.unwrap_err());
    }
}

Instructions

First install the library and its dependencies and then save the example to src/main.rs and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comap2.datadoghq.comuk1.datadoghq.comddog-gov.comus2.ddog-gov.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" cargo run
/**
 * Get a form returns "OK" response
 */

import { client, v2 } from "@datadog/datadog-api-client";

const configuration = client.createConfiguration();
configuration.unstableOperations["v2.getForm"] = true;
const apiInstance = new v2.FormsApi(configuration);

// there is a valid "form" in the system
const FORM_DATA_ID = process.env.FORM_DATA_ID as string;

const params: v2.FormsApiGetFormRequest = {
  formId: FORM_DATA_ID,
};

apiInstance
  .getForm(params)
  .then((data: v2.FormResponse) => {
    console.log(
      "API called successfully. Returned data: " + JSON.stringify(data)
    );
  })
  .catch((error: any) => console.error(error));

Instructions

First install the library and its dependencies and then save the example to example.ts and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comap2.datadoghq.comuk1.datadoghq.comddog-gov.comus2.ddog-gov.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" tsc "example.ts"