Create Custom Form
POST {{apiPath}}/environments/{{envID}}/forms
The POST {{apiPath}}/environments/{environmentID}/forms operation creates a new forms resource in the environment identified by its ID in the request URL. This sample shows a basic form that can be customized to include additional form fields.
The components.fields.label attribute is a nested JSON structure. This structure is designed to store a series of text and translatable keys (as well as rich text). In this example, the label includes an object with a type key and value of i18n with a key called fields.user.email.label and a default translation of Email Address. Likewise, the submit button has a key of button.text with a default translation of Submit.
Request Model
Refer to Forms for complete descriptions.
| Property | Type | Required? |
|---|---|---|
|
Date |
N/A |
|
String |
Required |
|
Integer |
Optional |
|
Object |
Required |
|
String |
Optional |
|
String |
N/A |
|
Object |
Optional |
|
String |
N/A |
|
Object |
Optional |
|
Boolean |
Required |
|
Boolean |
Required |
|
Date |
N/A |
|
String |
Required |
|
String |
Optional |
|
Object |
Optional |
|
String |
Optional |
|
String |
Optional |
Body
raw ( application/json )
{
"name": "Custom-Form_{{$timestamp}}",
"#description": "Test Description - created via CREATE Custom Form request",
"category": "CUSTOM",
"components": {
"fields": [
{
"type": "TEXT",
"position": {
"row": 0,
"col": 0
},
"key": "field",
"label": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"\"},{\"type\":\"i18n\",\"key\":\"fields.user.email.label\",\"defaultTranslation\":\"Email Address\",\"inline\":true,\"children\":[{\"text\":\"\"}]},{\"text\":\"\"}]}]",
"required": true,
"validation": {
"type": "NONE",
"regex": "",
"errorMessage": ""
},
"attributeDisabled": false,
"visibility": {
"type": "SHOW_BY_DEFAULT",
"key": "some-key"
}
},
{
"type" : "SOCIAL_LOGIN_BUTTON",
"position" : {
"row" : 1,
"col" : 0
},
"key" : "social-login-button-field",
"label" : "Sign in with Google",
"styles" : {
"width" : 100,
"alignment" : "CENTER",
"enabled" : false
},
"idpType" : "GOOGLE",
"idpName" : "Google",
"idpId" : "{{providerID}}",
"idpEnabled" : true
},
{
"type": "SUBMIT_BUTTON",
"position": {
"row": 2,
"col": 0
},
"label": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"\"},{\"type\":\"i18n\",\"key\":\"button.text\",\"defaultTranslation\":\"Submit\",\"inline\":true,\"children\":[{\"text\":\"\"}]},{\"text\":\"\"}]}]"
}
]
},
"cols": 4,
"markOptional": true,
"markRequired": false,
"translationMethod": "TRANSLATE",
"fieldTypes": [
"SUBMIT_BUTTON",
"TEXT"
],
"languageBundle": {
"fields.user.email.label": "Email Address",
"button.text": "Submit"
}
}
Example Request
-
cURL
-
C#
-
Go
-
HTTP
-
Java
-
jQuery
-
NodeJS
-
Python
-
PHP
-
Ruby
-
Swift
curl --location --globoff '{{apiPath}}/environments/{{envID}}/forms' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {{accessToken}}' \
--data '{
"name": "Custom-Form_{{$timestamp}}",
"#description": "Test Description - created via CREATE Custom Form request",
"category": "CUSTOM",
"components": {
"fields": [
{
"type": "TEXT",
"position": {
"row": 0,
"col": 0
},
"key": "field",
"label": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"\"},{\"type\":\"i18n\",\"key\":\"fields.user.email.label\",\"defaultTranslation\":\"Email Address\",\"inline\":true,\"children\":[{\"text\":\"\"}]},{\"text\":\"\"}]}]",
"required": true,
"validation": {
"type": "NONE",
"regex": "",
"errorMessage": ""
},
"attributeDisabled": false,
"visibility": {
"type": "SHOW_BY_DEFAULT",
"key": "some-key"
}
},
{
"type" : "SOCIAL_LOGIN_BUTTON",
"position" : {
"row" : 1,
"col" : 0
},
"key" : "social-login-button-field",
"label" : "Sign in with Google",
"styles" : {
"width" : 100,
"alignment" : "CENTER",
"enabled" : false
},
"idpType" : "GOOGLE",
"idpName" : "Google",
"idpId" : "{{providerID}}",
"idpEnabled" : true
},
{
"type": "SUBMIT_BUTTON",
"position": {
"row": 2,
"col": 0
},
"label": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"\"},{\"type\":\"i18n\",\"key\":\"button.text\",\"defaultTranslation\":\"Submit\",\"inline\":true,\"children\":[{\"text\":\"\"}]},{\"text\":\"\"}]}]"
}
]
},
"cols": 4,
"markOptional": true,
"markRequired": false,
"translationMethod": "TRANSLATE",
"fieldTypes": [
"SUBMIT_BUTTON",
"TEXT"
],
"languageBundle": {
"fields.user.email.label": "Email Address",
"button.text": "Submit"
}
}'
var options = new RestClientOptions("{{apiPath}}/environments/{{envID}}/forms")
{
MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("", Method.Post);
request.AddHeader("Content-Type", "application/json");
request.AddHeader("Authorization", "Bearer {{accessToken}}");
var body = @"{" + "\n" +
@" ""name"": ""Custom-Form_{{$timestamp}}""," + "\n" +
@" ""#description"": ""Test Description - created via CREATE Custom Form request""," + "\n" +
@" ""category"": ""CUSTOM""," + "\n" +
@" ""components"": {" + "\n" +
@" ""fields"": [" + "\n" +
@" {" + "\n" +
@" ""type"": ""TEXT""," + "\n" +
@" ""position"": {" + "\n" +
@" ""row"": 0," + "\n" +
@" ""col"": 0" + "\n" +
@" }," + "\n" +
@" ""key"": ""field""," + "\n" +
@" ""label"": ""[{\""type\"":\""paragraph\"",\""children\"":[{\""text\"":\""\""},{\""type\"":\""i18n\"",\""key\"":\""fields.user.email.label\"",\""defaultTranslation\"":\""Email Address\"",\""inline\"":true,\""children\"":[{\""text\"":\""\""}]},{\""text\"":\""\""}]}]""," + "\n" +
@" ""required"": true," + "\n" +
@" ""validation"": {" + "\n" +
@" ""type"": ""NONE""," + "\n" +
@" ""regex"": """"," + "\n" +
@" ""errorMessage"": """"" + "\n" +
@" }," + "\n" +
@" ""attributeDisabled"": false," + "\n" +
@" ""visibility"": {" + "\n" +
@" ""type"": ""SHOW_BY_DEFAULT""," + "\n" +
@" ""key"": ""some-key""" + "\n" +
@" }" + "\n" +
@" }," + "\n" +
@" {" + "\n" +
@" ""type"" : ""SOCIAL_LOGIN_BUTTON""," + "\n" +
@" ""position"" : {" + "\n" +
@" ""row"" : 1," + "\n" +
@" ""col"" : 0" + "\n" +
@" }," + "\n" +
@" ""key"" : ""social-login-button-field""," + "\n" +
@" ""label"" : ""Sign in with Google""," + "\n" +
@" ""styles"" : {" + "\n" +
@" ""width"" : 100," + "\n" +
@" ""alignment"" : ""CENTER""," + "\n" +
@" ""enabled"" : false" + "\n" +
@" }," + "\n" +
@" ""idpType"" : ""GOOGLE""," + "\n" +
@" ""idpName"" : ""Google""," + "\n" +
@" ""idpId"" : ""{{providerID}}""," + "\n" +
@" ""idpEnabled"" : true" + "\n" +
@" }," + "\n" +
@" {" + "\n" +
@" ""type"": ""SUBMIT_BUTTON""," + "\n" +
@" ""position"": {" + "\n" +
@" ""row"": 2," + "\n" +
@" ""col"": 0" + "\n" +
@" }," + "\n" +
@" ""label"": ""[{\""type\"":\""paragraph\"",\""children\"":[{\""text\"":\""\""},{\""type\"":\""i18n\"",\""key\"":\""button.text\"",\""defaultTranslation\"":\""Submit\"",\""inline\"":true,\""children\"":[{\""text\"":\""\""}]},{\""text\"":\""\""}]}]""" + "\n" +
@" }" + "\n" +
@" ]" + "\n" +
@" }," + "\n" +
@" ""cols"": 4," + "\n" +
@" ""markOptional"": true," + "\n" +
@" ""markRequired"": false," + "\n" +
@" ""translationMethod"": ""TRANSLATE""," + "\n" +
@" ""fieldTypes"": [" + "\n" +
@" ""SUBMIT_BUTTON""," + "\n" +
@" ""TEXT""" + "\n" +
@" ]," + "\n" +
@" ""languageBundle"": {" + "\n" +
@" ""fields.user.email.label"": ""Email Address""," + "\n" +
@" ""button.text"": ""Submit""" + "\n" +
@" }" + "\n" +
@"}";
request.AddStringBody(body, DataFormat.Json);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "{{apiPath}}/environments/{{envID}}/forms"
method := "POST"
payload := strings.NewReader(`{
"name": "Custom-Form_{{$timestamp}}",
"#description": "Test Description - created via CREATE Custom Form request",
"category": "CUSTOM",
"components": {
"fields": [
{
"type": "TEXT",
"position": {
"row": 0,
"col": 0
},
"key": "field",
"label": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"\"},{\"type\":\"i18n\",\"key\":\"fields.user.email.label\",\"defaultTranslation\":\"Email Address\",\"inline\":true,\"children\":[{\"text\":\"\"}]},{\"text\":\"\"}]}]",
"required": true,
"validation": {
"type": "NONE",
"regex": "",
"errorMessage": ""
},
"attributeDisabled": false,
"visibility": {
"type": "SHOW_BY_DEFAULT",
"key": "some-key"
}
},
{
"type" : "SOCIAL_LOGIN_BUTTON",
"position" : {
"row" : 1,
"col" : 0
},
"key" : "social-login-button-field",
"label" : "Sign in with Google",
"styles" : {
"width" : 100,
"alignment" : "CENTER",
"enabled" : false
},
"idpType" : "GOOGLE",
"idpName" : "Google",
"idpId" : "{{providerID}}",
"idpEnabled" : true
},
{
"type": "SUBMIT_BUTTON",
"position": {
"row": 2,
"col": 0
},
"label": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"\"},{\"type\":\"i18n\",\"key\":\"button.text\",\"defaultTranslation\":\"Submit\",\"inline\":true,\"children\":[{\"text\":\"\"}]},{\"text\":\"\"}]}]"
}
]
},
"cols": 4,
"markOptional": true,
"markRequired": false,
"translationMethod": "TRANSLATE",
"fieldTypes": [
"SUBMIT_BUTTON",
"TEXT"
],
"languageBundle": {
"fields.user.email.label": "Email Address",
"button.text": "Submit"
}
}`)
client := &http.Client {
}
req, err := http.NewRequest(method, url, payload)
if err != nil {
fmt.Println(err)
return
}
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "Bearer {{accessToken}}")
res, err := client.Do(req)
if err != nil {
fmt.Println(err)
return
}
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(body))
}
POST /environments/{{envID}}/forms HTTP/1.1
Host: {{apiPath}}
Content-Type: application/json
Authorization: Bearer {{accessToken}}
{
"name": "Custom-Form_{{$timestamp}}",
"#description": "Test Description - created via CREATE Custom Form request",
"category": "CUSTOM",
"components": {
"fields": [
{
"type": "TEXT",
"position": {
"row": 0,
"col": 0
},
"key": "field",
"label": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"\"},{\"type\":\"i18n\",\"key\":\"fields.user.email.label\",\"defaultTranslation\":\"Email Address\",\"inline\":true,\"children\":[{\"text\":\"\"}]},{\"text\":\"\"}]}]",
"required": true,
"validation": {
"type": "NONE",
"regex": "",
"errorMessage": ""
},
"attributeDisabled": false,
"visibility": {
"type": "SHOW_BY_DEFAULT",
"key": "some-key"
}
},
{
"type" : "SOCIAL_LOGIN_BUTTON",
"position" : {
"row" : 1,
"col" : 0
},
"key" : "social-login-button-field",
"label" : "Sign in with Google",
"styles" : {
"width" : 100,
"alignment" : "CENTER",
"enabled" : false
},
"idpType" : "GOOGLE",
"idpName" : "Google",
"idpId" : "{{providerID}}",
"idpEnabled" : true
},
{
"type": "SUBMIT_BUTTON",
"position": {
"row": 2,
"col": 0
},
"label": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"\"},{\"type\":\"i18n\",\"key\":\"button.text\",\"defaultTranslation\":\"Submit\",\"inline\":true,\"children\":[{\"text\":\"\"}]},{\"text\":\"\"}]}]"
}
]
},
"cols": 4,
"markOptional": true,
"markRequired": false,
"translationMethod": "TRANSLATE",
"fieldTypes": [
"SUBMIT_BUTTON",
"TEXT"
],
"languageBundle": {
"fields.user.email.label": "Email Address",
"button.text": "Submit"
}
}
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n \"name\": \"Custom-Form_{{$timestamp}}\",\n \"#description\": \"Test Description - created via CREATE Custom Form request\",\n \"category\": \"CUSTOM\",\n \"components\": {\n \"fields\": [\n {\n \"type\": \"TEXT\",\n \"position\": {\n \"row\": 0,\n \"col\": 0\n },\n \"key\": \"field\",\n \"label\": \"[{\\\"type\\\":\\\"paragraph\\\",\\\"children\\\":[{\\\"text\\\":\\\"\\\"},{\\\"type\\\":\\\"i18n\\\",\\\"key\\\":\\\"fields.user.email.label\\\",\\\"defaultTranslation\\\":\\\"Email Address\\\",\\\"inline\\\":true,\\\"children\\\":[{\\\"text\\\":\\\"\\\"}]},{\\\"text\\\":\\\"\\\"}]}]\",\n \"required\": true,\n \"validation\": {\n \"type\": \"NONE\",\n \"regex\": \"\",\n \"errorMessage\": \"\"\n },\n \"attributeDisabled\": false,\n \"visibility\": {\n \"type\": \"SHOW_BY_DEFAULT\",\n \"key\": \"some-key\"\n }\n },\n {\n \"type\" : \"SOCIAL_LOGIN_BUTTON\",\n \"position\" : {\n \"row\" : 1,\n \"col\" : 0\n },\n \"key\" : \"social-login-button-field\",\n \"label\" : \"Sign in with Google\",\n \"styles\" : {\n \"width\" : 100,\n \"alignment\" : \"CENTER\",\n \"enabled\" : false\n },\n \"idpType\" : \"GOOGLE\",\n \"idpName\" : \"Google\",\n \"idpId\" : \"{{providerID}}\",\n \"idpEnabled\" : true\n },\n {\n \"type\": \"SUBMIT_BUTTON\",\n \"position\": {\n \"row\": 2,\n \"col\": 0\n },\n \"label\": \"[{\\\"type\\\":\\\"paragraph\\\",\\\"children\\\":[{\\\"text\\\":\\\"\\\"},{\\\"type\\\":\\\"i18n\\\",\\\"key\\\":\\\"button.text\\\",\\\"defaultTranslation\\\":\\\"Submit\\\",\\\"inline\\\":true,\\\"children\\\":[{\\\"text\\\":\\\"\\\"}]},{\\\"text\\\":\\\"\\\"}]}]\"\n }\n ]\n },\n \"cols\": 4,\n \"markOptional\": true,\n \"markRequired\": false,\n \"translationMethod\": \"TRANSLATE\",\n \"fieldTypes\": [\n \"SUBMIT_BUTTON\",\n \"TEXT\"\n ],\n \"languageBundle\": {\n \"fields.user.email.label\": \"Email Address\",\n \"button.text\": \"Submit\"\n }\n}");
Request request = new Request.Builder()
.url("{{apiPath}}/environments/{{envID}}/forms")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.addHeader("Authorization", "Bearer {{accessToken}}")
.build();
Response response = client.newCall(request).execute();
var settings = {
"url": "{{apiPath}}/environments/{{envID}}/forms",
"method": "POST",
"timeout": 0,
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer {{accessToken}}"
},
"data": JSON.stringify({
"name": "Custom-Form_{{$timestamp}}",
"#description": "Test Description - created via CREATE Custom Form request",
"category": "CUSTOM",
"components": {
"fields": [
{
"type": "TEXT",
"position": {
"row": 0,
"col": 0
},
"key": "field",
"label": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"\"},{\"type\":\"i18n\",\"key\":\"fields.user.email.label\",\"defaultTranslation\":\"Email Address\",\"inline\":true,\"children\":[{\"text\":\"\"}]},{\"text\":\"\"}]}]",
"required": true,
"validation": {
"type": "NONE",
"regex": "",
"errorMessage": ""
},
"attributeDisabled": false,
"visibility": {
"type": "SHOW_BY_DEFAULT",
"key": "some-key"
}
},
{
"type": "SOCIAL_LOGIN_BUTTON",
"position": {
"row": 1,
"col": 0
},
"key": "social-login-button-field",
"label": "Sign in with Google",
"styles": {
"width": 100,
"alignment": "CENTER",
"enabled": false
},
"idpType": "GOOGLE",
"idpName": "Google",
"idpId": "{{providerID}}",
"idpEnabled": true
},
{
"type": "SUBMIT_BUTTON",
"position": {
"row": 2,
"col": 0
},
"label": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"\"},{\"type\":\"i18n\",\"key\":\"button.text\",\"defaultTranslation\":\"Submit\",\"inline\":true,\"children\":[{\"text\":\"\"}]},{\"text\":\"\"}]}]"
}
]
},
"cols": 4,
"markOptional": true,
"markRequired": false,
"translationMethod": "TRANSLATE",
"fieldTypes": [
"SUBMIT_BUTTON",
"TEXT"
],
"languageBundle": {
"fields.user.email.label": "Email Address",
"button.text": "Submit"
}
}),
};
$.ajax(settings).done(function (response) {
console.log(response);
});
var request = require('request');
var options = {
'method': 'POST',
'url': '{{apiPath}}/environments/{{envID}}/forms',
'headers': {
'Content-Type': 'application/json',
'Authorization': 'Bearer {{accessToken}}'
},
body: JSON.stringify({
"name": "Custom-Form_{{$timestamp}}",
"#description": "Test Description - created via CREATE Custom Form request",
"category": "CUSTOM",
"components": {
"fields": [
{
"type": "TEXT",
"position": {
"row": 0,
"col": 0
},
"key": "field",
"label": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"\"},{\"type\":\"i18n\",\"key\":\"fields.user.email.label\",\"defaultTranslation\":\"Email Address\",\"inline\":true,\"children\":[{\"text\":\"\"}]},{\"text\":\"\"}]}]",
"required": true,
"validation": {
"type": "NONE",
"regex": "",
"errorMessage": ""
},
"attributeDisabled": false,
"visibility": {
"type": "SHOW_BY_DEFAULT",
"key": "some-key"
}
},
{
"type": "SOCIAL_LOGIN_BUTTON",
"position": {
"row": 1,
"col": 0
},
"key": "social-login-button-field",
"label": "Sign in with Google",
"styles": {
"width": 100,
"alignment": "CENTER",
"enabled": false
},
"idpType": "GOOGLE",
"idpName": "Google",
"idpId": "{{providerID}}",
"idpEnabled": true
},
{
"type": "SUBMIT_BUTTON",
"position": {
"row": 2,
"col": 0
},
"label": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"\"},{\"type\":\"i18n\",\"key\":\"button.text\",\"defaultTranslation\":\"Submit\",\"inline\":true,\"children\":[{\"text\":\"\"}]},{\"text\":\"\"}]}]"
}
]
},
"cols": 4,
"markOptional": true,
"markRequired": false,
"translationMethod": "TRANSLATE",
"fieldTypes": [
"SUBMIT_BUTTON",
"TEXT"
],
"languageBundle": {
"fields.user.email.label": "Email Address",
"button.text": "Submit"
}
})
};
request(options, function (error, response) {
if (error) throw new Error(error);
console.log(response.body);
});
import requests
import json
url = "{{apiPath}}/environments/{{envID}}/forms"
payload = json.dumps({
"name": "Custom-Form_{{$timestamp}}",
"#description": "Test Description - created via CREATE Custom Form request",
"category": "CUSTOM",
"components": {
"fields": [
{
"type": "TEXT",
"position": {
"row": 0,
"col": 0
},
"key": "field",
"label": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"\"},{\"type\":\"i18n\",\"key\":\"fields.user.email.label\",\"defaultTranslation\":\"Email Address\",\"inline\":true,\"children\":[{\"text\":\"\"}]},{\"text\":\"\"}]}]",
"required": True,
"validation": {
"type": "NONE",
"regex": "",
"errorMessage": ""
},
"attributeDisabled": False,
"visibility": {
"type": "SHOW_BY_DEFAULT",
"key": "some-key"
}
},
{
"type": "SOCIAL_LOGIN_BUTTON",
"position": {
"row": 1,
"col": 0
},
"key": "social-login-button-field",
"label": "Sign in with Google",
"styles": {
"width": 100,
"alignment": "CENTER",
"enabled": False
},
"idpType": "GOOGLE",
"idpName": "Google",
"idpId": "{{providerID}}",
"idpEnabled": True
},
{
"type": "SUBMIT_BUTTON",
"position": {
"row": 2,
"col": 0
},
"label": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"\"},{\"type\":\"i18n\",\"key\":\"button.text\",\"defaultTranslation\":\"Submit\",\"inline\":true,\"children\":[{\"text\":\"\"}]},{\"text\":\"\"}]}]"
}
]
},
"cols": 4,
"markOptional": True,
"markRequired": False,
"translationMethod": "TRANSLATE",
"fieldTypes": [
"SUBMIT_BUTTON",
"TEXT"
],
"languageBundle": {
"fields.user.email.label": "Email Address",
"button.text": "Submit"
}
})
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer {{accessToken}}'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('{{apiPath}}/environments/{{envID}}/forms');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
'follow_redirects' => TRUE
));
$request->setHeader(array(
'Content-Type' => 'application/json',
'Authorization' => 'Bearer {{accessToken}}'
));
$request->setBody('{\n "name": "Custom-Form_{{$timestamp}}",\n "#description": "Test Description - created via CREATE Custom Form request",\n "category": "CUSTOM",\n "components": {\n "fields": [\n {\n "type": "TEXT",\n "position": {\n "row": 0,\n "col": 0\n },\n "key": "field",\n "label": "[{\\"type\\":\\"paragraph\\",\\"children\\":[{\\"text\\":\\"\\"},{\\"type\\":\\"i18n\\",\\"key\\":\\"fields.user.email.label\\",\\"defaultTranslation\\":\\"Email Address\\",\\"inline\\":true,\\"children\\":[{\\"text\\":\\"\\"}]},{\\"text\\":\\"\\"}]}]",\n "required": true,\n "validation": {\n "type": "NONE",\n "regex": "",\n "errorMessage": ""\n },\n "attributeDisabled": false,\n "visibility": {\n "type": "SHOW_BY_DEFAULT",\n "key": "some-key"\n }\n },\n {\n "type" : "SOCIAL_LOGIN_BUTTON",\n "position" : {\n "row" : 1,\n "col" : 0\n },\n "key" : "social-login-button-field",\n "label" : "Sign in with Google",\n "styles" : {\n "width" : 100,\n "alignment" : "CENTER",\n "enabled" : false\n },\n "idpType" : "GOOGLE",\n "idpName" : "Google",\n "idpId" : "{{providerID}}",\n "idpEnabled" : true\n },\n {\n "type": "SUBMIT_BUTTON",\n "position": {\n "row": 2,\n "col": 0\n },\n "label": "[{\\"type\\":\\"paragraph\\",\\"children\\":[{\\"text\\":\\"\\"},{\\"type\\":\\"i18n\\",\\"key\\":\\"button.text\\",\\"defaultTranslation\\":\\"Submit\\",\\"inline\\":true,\\"children\\":[{\\"text\\":\\"\\"}]},{\\"text\\":\\"\\"}]}]"\n }\n ]\n },\n "cols": 4,\n "markOptional": true,\n "markRequired": false,\n "translationMethod": "TRANSLATE",\n "fieldTypes": [\n "SUBMIT_BUTTON",\n "TEXT"\n ],\n "languageBundle": {\n "fields.user.email.label": "Email Address",\n "button.text": "Submit"\n }\n}');
try {
$response = $request->send();
if ($response->getStatus() == 200) {
echo $response->getBody();
}
else {
echo 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
$response->getReasonPhrase();
}
}
catch(HTTP_Request2_Exception $e) {
echo 'Error: ' . $e->getMessage();
}
require "uri"
require "json"
require "net/http"
url = URI("{{apiPath}}/environments/{{envID}}/forms")
http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["Content-Type"] = "application/json"
request["Authorization"] = "Bearer {{accessToken}}"
request.body = JSON.dump({
"name": "Custom-Form_{{\$timestamp}}",
"\#description": "Test Description - created via CREATE Custom Form request",
"category": "CUSTOM",
"components": {
"fields": [
{
"type": "TEXT",
"position": {
"row": 0,
"col": 0
},
"key": "field",
"label": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"\"},{\"type\":\"i18n\",\"key\":\"fields.user.email.label\",\"defaultTranslation\":\"Email Address\",\"inline\":true,\"children\":[{\"text\":\"\"}]},{\"text\":\"\"}]}]",
"required": true,
"validation": {
"type": "NONE",
"regex": "",
"errorMessage": ""
},
"attributeDisabled": false,
"visibility": {
"type": "SHOW_BY_DEFAULT",
"key": "some-key"
}
},
{
"type": "SOCIAL_LOGIN_BUTTON",
"position": {
"row": 1,
"col": 0
},
"key": "social-login-button-field",
"label": "Sign in with Google",
"styles": {
"width": 100,
"alignment": "CENTER",
"enabled": false
},
"idpType": "GOOGLE",
"idpName": "Google",
"idpId": "{{providerID}}",
"idpEnabled": true
},
{
"type": "SUBMIT_BUTTON",
"position": {
"row": 2,
"col": 0
},
"label": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"\"},{\"type\":\"i18n\",\"key\":\"button.text\",\"defaultTranslation\":\"Submit\",\"inline\":true,\"children\":[{\"text\":\"\"}]},{\"text\":\"\"}]}]"
}
]
},
"cols": 4,
"markOptional": true,
"markRequired": false,
"translationMethod": "TRANSLATE",
"fieldTypes": [
"SUBMIT_BUTTON",
"TEXT"
],
"languageBundle": {
"fields.user.email.label": "Email Address",
"button.text": "Submit"
}
})
response = http.request(request)
puts response.read_body
let parameters = "{\n \"name\": \"Custom-Form_{{$timestamp}}\",\n \"#description\": \"Test Description - created via CREATE Custom Form request\",\n \"category\": \"CUSTOM\",\n \"components\": {\n \"fields\": [\n {\n \"type\": \"TEXT\",\n \"position\": {\n \"row\": 0,\n \"col\": 0\n },\n \"key\": \"field\",\n \"label\": \"[{\\\"type\\\":\\\"paragraph\\\",\\\"children\\\":[{\\\"text\\\":\\\"\\\"},{\\\"type\\\":\\\"i18n\\\",\\\"key\\\":\\\"fields.user.email.label\\\",\\\"defaultTranslation\\\":\\\"Email Address\\\",\\\"inline\\\":true,\\\"children\\\":[{\\\"text\\\":\\\"\\\"}]},{\\\"text\\\":\\\"\\\"}]}]\",\n \"required\": true,\n \"validation\": {\n \"type\": \"NONE\",\n \"regex\": \"\",\n \"errorMessage\": \"\"\n },\n \"attributeDisabled\": false,\n \"visibility\": {\n \"type\": \"SHOW_BY_DEFAULT\",\n \"key\": \"some-key\"\n }\n },\n {\n \"type\" : \"SOCIAL_LOGIN_BUTTON\",\n \"position\" : {\n \"row\" : 1,\n \"col\" : 0\n },\n \"key\" : \"social-login-button-field\",\n \"label\" : \"Sign in with Google\",\n \"styles\" : {\n \"width\" : 100,\n \"alignment\" : \"CENTER\",\n \"enabled\" : false\n },\n \"idpType\" : \"GOOGLE\",\n \"idpName\" : \"Google\",\n \"idpId\" : \"{{providerID}}\",\n \"idpEnabled\" : true\n },\n {\n \"type\": \"SUBMIT_BUTTON\",\n \"position\": {\n \"row\": 2,\n \"col\": 0\n },\n \"label\": \"[{\\\"type\\\":\\\"paragraph\\\",\\\"children\\\":[{\\\"text\\\":\\\"\\\"},{\\\"type\\\":\\\"i18n\\\",\\\"key\\\":\\\"button.text\\\",\\\"defaultTranslation\\\":\\\"Submit\\\",\\\"inline\\\":true,\\\"children\\\":[{\\\"text\\\":\\\"\\\"}]},{\\\"text\\\":\\\"\\\"}]}]\"\n }\n ]\n },\n \"cols\": 4,\n \"markOptional\": true,\n \"markRequired\": false,\n \"translationMethod\": \"TRANSLATE\",\n \"fieldTypes\": [\n \"SUBMIT_BUTTON\",\n \"TEXT\"\n ],\n \"languageBundle\": {\n \"fields.user.email.label\": \"Email Address\",\n \"button.text\": \"Submit\"\n }\n}"
let postData = parameters.data(using: .utf8)
var request = URLRequest(url: URL(string: "{{apiPath}}/environments/{{envID}}/forms")!,timeoutInterval: Double.infinity)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("Bearer {{accessToken}}", forHTTPHeaderField: "Authorization")
request.httpMethod = "POST"
request.httpBody = postData
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print(String(describing: error))
return
}
print(String(data: data, encoding: .utf8)!)
}
task.resume()
Example Response
201 Created
{
"_links": {
"self": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/forms/705a60fa-da49-4a39-8cbf-c5b7768f428b"
},
"identityProviders.social-login-button-field": {
"href": "https://api.pingone.com/v1/environments/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/identityProviders/32d30cad-fa50-464a-ac22-dfbb1ac2a1c2"
}
},
"id": "705a60fa-da49-4a39-8cbf-c5b7768f428b",
"environment": {
"id": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6"
},
"name": "Custom-Form_1752789145",
"category": "CUSTOM",
"components": {
"fields": [
{
"type": "TEXT",
"position": {
"row": 0,
"col": 0
},
"visibility": {
"type": "SHOW_BY_DEFAULT",
"key": "some-key"
},
"key": "field",
"label": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"\"},{\"type\":\"i18n\",\"key\":\"fields.user.email.label\",\"defaultTranslation\":\"Email Address\",\"inline\":true,\"children\":[{\"text\":\"\"}]},{\"text\":\"\"}]}]",
"required": true,
"validation": {
"type": "NONE",
"regex": "",
"errorMessage": ""
},
"otherOptionEnabled": false,
"otherOptionAttributeDisabled": false,
"attributeDisabled": false
},
{
"type": "SOCIAL_LOGIN_BUTTON",
"position": {
"row": 1,
"col": 0
},
"key": "social-login-button-field",
"label": "Sign in with Google",
"styles": {
"width": 100,
"alignment": "CENTER",
"displayDefaultThemeButtonBackgroundColor": false,
"displayDefaultThemeButtonBorderColor": false,
"displayDefaultThemeButtonTextColor": false,
"enabled": false
},
"idpType": "GOOGLE",
"idpName": "Google",
"idpId": "32d30cad-fa50-464a-ac22-dfbb1ac2a1c2",
"idpEnabled": true
},
{
"type": "SUBMIT_BUTTON",
"position": {
"row": 2,
"col": 0
},
"label": "[{\"type\":\"paragraph\",\"children\":[{\"text\":\"\"},{\"type\":\"i18n\",\"key\":\"button.text\",\"defaultTranslation\":\"Submit\",\"inline\":true,\"children\":[{\"text\":\"\"}]},{\"text\":\"\"}]}]"
}
]
},
"cols": 4,
"markOptional": true,
"markRequired": false,
"textAutoCompleteEnabled": false,
"passwordAutoCompleteEnabled": false,
"translationMethod": "TRANSLATE",
"fieldTypes": [
"SOCIAL_LOGIN_BUTTON",
"TEXT",
"SUBMIT_BUTTON"
],
"languageBundle": {
"fields.user.email.label": "Email Address",
"button.text": "Submit"
},
"created": "2025-07-17T21:52:24.814Z",
"modified": "2025-07-17T21:52:24.814Z"
}