---
title: Upsert and publish a form version
description: Datadog, the leading service for cloud-scale monitoring.
breadcrumbs: Docs > API Reference > Forms
---

# Upsert and publish a form version{% #upsert-and-publish-a-form-version %}
Copy pageCopied
{% tab title="v2" %}
**Note**: This endpoint is in preview and is subject to change. If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).
| Datadog site      | API endpoint                                                                          |
| ----------------- | ------------------------------------------------------------------------------------- |
| ap1.datadoghq.com | POST https://api.ap1.datadoghq.com/api/v2/forms/{form_id}/versions/upsert_and_publish |
| ap2.datadoghq.com | POST https://api.ap2.datadoghq.com/api/v2/forms/{form_id}/versions/upsert_and_publish |
| app.datadoghq.eu  | POST https://api.datadoghq.eu/api/v2/forms/{form_id}/versions/upsert_and_publish      |
| app.ddog-gov.com  | POST https://api.ddog-gov.com/api/v2/forms/{form_id}/versions/upsert_and_publish      |
| us2.ddog-gov.com  | POST https://api.us2.ddog-gov.com/api/v2/forms/{form_id}/versions/upsert_and_publish  |
| app.datadoghq.com | POST https://api.datadoghq.com/api/v2/forms/{form_id}/versions/upsert_and_publish     |
| us3.datadoghq.com | POST https://api.us3.datadoghq.com/api/v2/forms/{form_id}/versions/upsert_and_publish |
| us5.datadoghq.com | POST https://api.us5.datadoghq.com/api/v2/forms/{form_id}/versions/upsert_and_publish |

### Overview

Upsert the latest form version and publish it in a single atomic transaction.

### Arguments

#### Path Parameters

| Name                      | Type   | Description         |
| ------------------------- | ------ | ------------------- |
| form_id [*required*] | string | The ID of the form. |

### Request

#### Body Data (required)



{% tab title="Model" %}

| Parent field    | Field                             | Type     | Description                                                                                                                  |
| --------------- | --------------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------- |
|                 | data [*required*]            | object   | The data for upserting and publishing a form version.                                                                        |
| data            | attributes [*required*]      | object   | The attributes for upserting and publishing a form version.                                                                  |
| attributes      | data_definition [*required*] | object   | A JSON Schema definition that describes the form's data fields.                                                              |
| data_definition | description                       | string   | A description shown to form respondents.                                                                                     |
| data_definition | properties                        | object   | A map of field names to their JSON Schema definitions.                                                                       |
| data_definition | required                          | [string] | List of field names that must be answered.                                                                                   |
| data_definition | title                             | string   | The title of the form schema.                                                                                                |
| data_definition | type                              | enum     | The root schema type. Allowed enum values: `object`                                                                          |
| attributes      | ui_definition [*required*]   | object   | UI configuration for rendering form fields, including widget overrides, field ordering, and themes.                          |
| ui_definition   | ui:order                          | [string] | The order in which form fields are displayed.                                                                                |
| ui_definition   | ui:theme                          | object   | The visual theme applied to the form.                                                                                        |
| ui:theme        | primaryColor                      | enum     | The primary color of the form theme. Allowed enum values: `gray,red,orange,yellow,green,light-blue,dark-blue,magenta,indigo` |
| attributes      | upsert_params [*required*]   | object   | Concurrency control parameters for the upsert and publish operation.                                                         |
| upsert_params   | etag [*required*]            | string   | The ETag of the latest version used for optimistic concurrency control.                                                      |
| data            | type [*required*]            | enum     | The resource type for a form version. Allowed enum values: `form_versions`                                                   |

{% /tab %}

{% tab title="Example" %}

```json
{
  "data": {
    "attributes": {
      "data_definition": {
        "description": "Welcome to the Engineering Experience Survey.",
        "required": [],
        "title": "Developer Experience Survey",
        "type": "object"
      },
      "ui_definition": {
        "ui:order": [],
        "ui:theme": {
          "primaryColor": "gray"
        }
      },
      "upsert_params": {
        "etag": "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d"
      }
    },
    "type": "form_versions"
  }
}
```

{% /tab %}

### Response

{% tab title="200" %}
OK
{% tab title="Model" %}
A response containing a single form.

| Parent field     | Field                                             | Type      | Description                                                                                                                  |
| ---------------- | ------------------------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------- |
|                  | data [*required*]                            | object    | A form resource object.                                                                                                      |
| data             | attributes [*required*]                      | object    | The attributes of a form.                                                                                                    |
| attributes       | active [*required*]                          | boolean   | Whether the form is currently active.                                                                                        |
| attributes       | anonymous [*required*]                       | boolean   | Whether the form accepts anonymous submissions.                                                                              |
| attributes       | created_at [*required*]                      | date-time | The time at which the form was created.                                                                                      |
| attributes       | datastore_config [*required*]                | object    | The datastore configuration for a form.                                                                                      |
| datastore_config | datastore_id [*required*]                    | uuid      | The ID of the datastore.                                                                                                     |
| datastore_config | primary_column_name [*required*]             | string    | The name of the primary column in the datastore.                                                                             |
| datastore_config | primary_key_generation_strategy [*required*] | string    | The strategy used to generate primary keys in the datastore.                                                                 |
| attributes       | description [*required*]                     | string    | The description of the form.                                                                                                 |
| attributes       | end_date                                          | date-time | The date and time at which the form stops accepting responses.                                                               |
| attributes       | has_submitted                                     | boolean   | Whether the current user has already submitted this form. Only present for forms with `single_response` set to `true`.       |
| attributes       | idp_survey [*required*]                      | boolean   | Whether the form is an IDP survey.                                                                                           |
| attributes       | modified_at [*required*]                     | date-time | The time at which the form was last modified.                                                                                |
| attributes       | name [*required*]                            | string    | The name of the form.                                                                                                        |
| attributes       | org_id [*required*]                          | int64     | The ID of the organization that owns this form.                                                                              |
| attributes       | publication                                       | object    | The attributes of a form publication.                                                                                        |
| publication      | created_at [*required*]                      | date-time | The time at which the publication was created.                                                                               |
| publication      | form_id [*required*]                         | uuid      | The ID of the form.                                                                                                          |
| publication      | form_version [*required*]                    | int64     | The version number that was published.                                                                                       |
| publication      | id                                                | string    | The ID of the form publication.                                                                                              |
| publication      | modified_at [*required*]                     | date-time | The time at which the publication was last modified.                                                                         |
| publication      | org_id [*required*]                          | int64     | The ID of the organization that owns this publication.                                                                       |
| publication      | publish_seq [*required*]                     | int64     | The sequential publication number for this form.                                                                             |
| publication      | user_id [*required*]                         | int64     | The ID of the user who created this publication.                                                                             |
| publication      | user_uuid [*required*]                       | uuid      | The UUID of the user who created this publication.                                                                           |
| attributes       | self_service [*required*]                    | boolean   | Whether the form is available in the self-service catalog.                                                                   |
| attributes       | single_response [*required*]                 | boolean   | Whether each user can only submit one response.                                                                              |
| attributes       | user_id [*required*]                         | int64     | The ID of the user who created this form.                                                                                    |
| attributes       | user_uuid [*required*]                       | uuid      | The UUID of the user who created this form.                                                                                  |
| attributes       | version                                           | object    | The attributes of a form version.                                                                                            |
| version          | created_at [*required*]                      | date-time | The time at which the version was created.                                                                                   |
| version          | data_definition [*required*]                 | object    | A JSON Schema definition that describes the form's data fields.                                                              |
| data_definition  | description                                       | string    | A description shown to form respondents.                                                                                     |
| data_definition  | properties                                        | object    | A map of field names to their JSON Schema definitions.                                                                       |
| data_definition  | required                                          | [string]  | List of field names that must be answered.                                                                                   |
| data_definition  | title                                             | string    | The title of the form schema.                                                                                                |
| data_definition  | type                                              | enum      | The root schema type. Allowed enum values: `object`                                                                          |
| version          | definition_signature [*required*]            | string    | The signature of the version definition.                                                                                     |
| version          | etag [*required*]                            | string    | The ETag for optimistic concurrency control.                                                                                 |
| version          | id                                                | string    | The ID of the form version.                                                                                                  |
| version          | modified_at [*required*]                     | date-time | The time at which the version was last modified.                                                                             |
| version          | state [*required*]                           | enum      | The state of a form version. Allowed enum values: `draft,frozen`                                                             |
| version          | ui_definition [*required*]                   | object    | UI configuration for rendering form fields, including widget overrides, field ordering, and themes.                          |
| ui_definition    | ui:order                                          | [string]  | The order in which form fields are displayed.                                                                                |
| ui_definition    | ui:theme                                          | object    | The visual theme applied to the form.                                                                                        |
| ui:theme         | primaryColor                                      | enum      | The primary color of the form theme. Allowed enum values: `gray,red,orange,yellow,green,light-blue,dark-blue,magenta,indigo` |
| version          | user_id [*required*]                         | int64     | The ID of the user who created this version.                                                                                 |
| version          | user_uuid [*required*]                       | uuid      | The UUID of the user who created this version.                                                                               |
| version          | version [*required*]                         | int64     | The sequential version number.                                                                                               |
| data             | id [*required*]                              | uuid      | The ID of the form.                                                                                                          |
| data             | type [*required*]                            | enum      | The resource type for a form. Allowed enum values: `forms`                                                                   |

{% /tab %}

{% tab title="Example" %}

```json
{
  "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"
  }
}
```

{% /tab %}

{% /tab %}

{% tab title="400" %}
Bad Request
{% 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" %}
Unauthorized
{% 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="404" %}
Not Found
{% 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

##### 
                          \## default
# 
 \# Path parameters export form_id="22f6006a-2302-4926-9396-d2dfcf7b0b34" \# Curl command curl -X POST "https://api.datadoghq.com/api/v2/forms/${form_id}/versions/upsert_and_publish" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "DD-API-KEY: ${DD_API_KEY}" \
-H "DD-APPLICATION-KEY: ${DD_APP_KEY}" \
-d @- << EOF
{
  "data": {
    "attributes": {
      "data_definition": {},
      "ui_definition": {},
      "upsert_params": {
        "etag": "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d"
      }
    },
    "type": "form_versions"
  }
}
EOF 
                        
##### 

```go
// Upsert and publish a form version 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"))

	body := datadogV2.UpsertAndPublishFormVersionRequest{
		Data: datadogV2.UpsertAndPublishFormVersionData{
			Attributes: datadogV2.UpsertAndPublishFormVersionDataAttributes{
				DataDefinition: datadogV2.FormDataDefinition{
					Description: datadog.PtrString("Welcome to the Engineering Experience Survey."),
					Required:    []string{},
					Title:       datadog.PtrString("Developer Experience Survey"),
					Type:        datadogV2.FORMDATADEFINITIONTYPE_OBJECT.Ptr(),
				},
				UiDefinition: datadogV2.FormUiDefinition{
					UiOrder: []string{},
					UiTheme: &datadogV2.FormUiDefinitionUiTheme{
						PrimaryColor: datadogV2.FORMUIDEFINITIONUITHEMEPRIMARYCOLOR_GRAY.Ptr(),
					},
				},
				UpsertParams: datadogV2.UpsertAndPublishFormVersionUpsertParams{
					Etag: "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d",
				},
			},
			Type: datadogV2.FORMVERSIONTYPE_FORM_VERSIONS,
		},
	}
	ctx := datadog.NewDefaultContext(context.Background())
	configuration := datadog.NewConfiguration()
	configuration.SetUnstableOperationEnabled("v2.UpsertAndPublishFormVersion", true)
	apiClient := datadog.NewAPIClient(configuration)
	api := datadogV2.NewFormsApi(apiClient)
	resp, r, err := api.UpsertAndPublishFormVersion(ctx, FormDataID, body)

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

	responseContent, _ := json.MarshalIndent(resp, "", "  ")
	fmt.Fprintf(os.Stdout, "Response from `FormsApi.UpsertAndPublishFormVersion`:\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_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" go run "main.go"
##### 

```java
// Upsert and publish a form version 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.FormDataDefinition;
import com.datadog.api.client.v2.model.FormDataDefinitionType;
import com.datadog.api.client.v2.model.FormResponse;
import com.datadog.api.client.v2.model.FormUiDefinition;
import com.datadog.api.client.v2.model.FormUiDefinitionUiTheme;
import com.datadog.api.client.v2.model.FormUiDefinitionUiThemePrimaryColor;
import com.datadog.api.client.v2.model.FormVersionType;
import com.datadog.api.client.v2.model.UpsertAndPublishFormVersionData;
import com.datadog.api.client.v2.model.UpsertAndPublishFormVersionDataAttributes;
import com.datadog.api.client.v2.model.UpsertAndPublishFormVersionRequest;
import com.datadog.api.client.v2.model.UpsertAndPublishFormVersionUpsertParams;
import java.util.UUID;

public class Example {
  public static void main(String[] args) {
    ApiClient defaultClient = ApiClient.getDefaultApiClient();
    defaultClient.setUnstableOperationEnabled("v2.upsertAndPublishFormVersion", 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());
    }

    UpsertAndPublishFormVersionRequest body =
        new UpsertAndPublishFormVersionRequest()
            .data(
                new UpsertAndPublishFormVersionData()
                    .attributes(
                        new UpsertAndPublishFormVersionDataAttributes()
                            .dataDefinition(
                                new FormDataDefinition()
                                    .description("Welcome to the Engineering Experience Survey.")
                                    .title("Developer Experience Survey")
                                    .type(FormDataDefinitionType.OBJECT))
                            .uiDefinition(
                                new FormUiDefinition()
                                    .uiTheme(
                                        new FormUiDefinitionUiTheme()
                                            .primaryColor(
                                                FormUiDefinitionUiThemePrimaryColor.GRAY)))
                            .upsertParams(
                                new UpsertAndPublishFormVersionUpsertParams()
                                    .etag(
                                        "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d")))
                    .type(FormVersionType.FORM_VERSIONS));

    try {
      FormResponse result = apiInstance.upsertAndPublishFormVersion(FORM_DATA_ID, body);
      System.out.println(result);
    } catch (ApiException e) {
      System.err.println("Exception when calling FormsApi#upsertAndPublishFormVersion");
      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_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" java "Example.java"
##### 

```python
"""
Upsert and publish a form version returns "OK" response
"""

from os import environ
from datadog_api_client import ApiClient, Configuration
from datadog_api_client.v2.api.forms_api import FormsApi
from datadog_api_client.v2.model.form_data_definition import FormDataDefinition
from datadog_api_client.v2.model.form_data_definition_type import FormDataDefinitionType
from datadog_api_client.v2.model.form_ui_definition import FormUiDefinition
from datadog_api_client.v2.model.form_ui_definition_ui_theme import FormUiDefinitionUiTheme
from datadog_api_client.v2.model.form_ui_definition_ui_theme_primary_color import FormUiDefinitionUiThemePrimaryColor
from datadog_api_client.v2.model.form_version_type import FormVersionType
from datadog_api_client.v2.model.upsert_and_publish_form_version_data import UpsertAndPublishFormVersionData
from datadog_api_client.v2.model.upsert_and_publish_form_version_data_attributes import (
    UpsertAndPublishFormVersionDataAttributes,
)
from datadog_api_client.v2.model.upsert_and_publish_form_version_request import UpsertAndPublishFormVersionRequest
from datadog_api_client.v2.model.upsert_and_publish_form_version_upsert_params import (
    UpsertAndPublishFormVersionUpsertParams,
)

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

body = UpsertAndPublishFormVersionRequest(
    data=UpsertAndPublishFormVersionData(
        attributes=UpsertAndPublishFormVersionDataAttributes(
            data_definition=FormDataDefinition(
                description="Welcome to the Engineering Experience Survey.",
                required=[],
                title="Developer Experience Survey",
                type=FormDataDefinitionType.OBJECT,
            ),
            ui_definition=FormUiDefinition(
                ui_order=[],
                ui_theme=FormUiDefinitionUiTheme(
                    primary_color=FormUiDefinitionUiThemePrimaryColor.GRAY,
                ),
            ),
            upsert_params=UpsertAndPublishFormVersionUpsertParams(
                etag="b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d",
            ),
        ),
        type=FormVersionType.FORM_VERSIONS,
    ),
)

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

    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_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" python3 "example.py"
##### 

```ruby
# Upsert and publish a form version returns "OK" response

require "datadog_api_client"
DatadogAPIClient.configure do |config|
  config.unstable_operations["v2.upsert_and_publish_form_version".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"]

body = DatadogAPIClient::V2::UpsertAndPublishFormVersionRequest.new({
  data: DatadogAPIClient::V2::UpsertAndPublishFormVersionData.new({
    attributes: DatadogAPIClient::V2::UpsertAndPublishFormVersionDataAttributes.new({
      data_definition: DatadogAPIClient::V2::FormDataDefinition.new({
        description: "Welcome to the Engineering Experience Survey.",
        required: [],
        title: "Developer Experience Survey",
        type: DatadogAPIClient::V2::FormDataDefinitionType::OBJECT,
      }),
      ui_definition: DatadogAPIClient::V2::FormUiDefinition.new({
        ui_order: [],
        ui_theme: DatadogAPIClient::V2::FormUiDefinitionUiTheme.new({
          primary_color: DatadogAPIClient::V2::FormUiDefinitionUiThemePrimaryColor::GRAY,
        }),
      }),
      upsert_params: DatadogAPIClient::V2::UpsertAndPublishFormVersionUpsertParams.new({
        etag: "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d",
      }),
    }),
    type: DatadogAPIClient::V2::FormVersionType::FORM_VERSIONS,
  }),
})
p api_instance.upsert_and_publish_form_version(FORM_DATA_ID, body)
```

#### 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_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" rb "example.rb"
##### 

```rust
// Upsert and publish a form version returns "OK" response
use datadog_api_client::datadog;
use datadog_api_client::datadogV2::api_forms::FormsAPI;
use datadog_api_client::datadogV2::model::FormDataDefinition;
use datadog_api_client::datadogV2::model::FormDataDefinitionType;
use datadog_api_client::datadogV2::model::FormUiDefinition;
use datadog_api_client::datadogV2::model::FormUiDefinitionUiTheme;
use datadog_api_client::datadogV2::model::FormUiDefinitionUiThemePrimaryColor;
use datadog_api_client::datadogV2::model::FormVersionType;
use datadog_api_client::datadogV2::model::UpsertAndPublishFormVersionData;
use datadog_api_client::datadogV2::model::UpsertAndPublishFormVersionDataAttributes;
use datadog_api_client::datadogV2::model::UpsertAndPublishFormVersionRequest;
use datadog_api_client::datadogV2::model::UpsertAndPublishFormVersionUpsertParams;

#[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 body = UpsertAndPublishFormVersionRequest::new(UpsertAndPublishFormVersionData::new(
        UpsertAndPublishFormVersionDataAttributes::new(
            FormDataDefinition::new()
                .description("Welcome to the Engineering Experience Survey.".to_string())
                .required(vec![])
                .title("Developer Experience Survey".to_string())
                .type_(FormDataDefinitionType::OBJECT),
            FormUiDefinition::new().ui_order(vec![]).ui_theme(
                FormUiDefinitionUiTheme::new()
                    .primary_color(FormUiDefinitionUiThemePrimaryColor::GRAY),
            ),
            UpsertAndPublishFormVersionUpsertParams::new(
                "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d".to_string(),
            ),
        ),
        FormVersionType::FORM_VERSIONS,
    ));
    let mut configuration = datadog::Configuration::new();
    configuration.set_unstable_operation_enabled("v2.UpsertAndPublishFormVersion", true);
    let api = FormsAPI::with_config(configuration);
    let resp = api
        .upsert_and_publish_form_version(form_data_id.clone(), body)
        .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="<API-KEY>" DD_APP_KEY="<APP-KEY>" cargo run
##### 

```typescript
/**
 * Upsert and publish a form version returns "OK" response
 */

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

const configuration = client.createConfiguration();
configuration.unstableOperations["v2.upsertAndPublishFormVersion"] = 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.FormsApiUpsertAndPublishFormVersionRequest = {
  body: {
    data: {
      attributes: {
        dataDefinition: {
          description: "Welcome to the Engineering Experience Survey.",
          required: [],
          title: "Developer Experience Survey",
          type: "object",
        },
        uiDefinition: {
          uiOrder: [],
          uiTheme: {
            primaryColor: "gray",
          },
        },
        upsertParams: {
          etag: "b51f08b698d88d8027a935d9db649774949f5fb41a0c559bfee6a9a13225c72d",
        },
      },
      type: "form_versions",
    },
  },
  formId: FORM_DATA_ID,
};

apiInstance
  .upsertAndPublishFormVersion(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](https://docs.datadoghq.com/api/latest.md?code-lang=typescript) and then save the example to `example.ts` and run following commands:
    DD_SITE="datadoghq.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" tsc "example.ts"
{% /tab %}
