---
title: DaVinci Flow Capabilities (HTML)
description: The POST {{authPath}}/{{envID}}/davinci/connections/{{connectionID}}/capabilities/{{capabilityName}} operation initiates the DaVinci authentication flow by specifying the connection and the capabilities associated with that connection. The capability name (for example, customHTMLTemplate) and the connection ID are specified in the request URL. The DaVinci interactionId and interactionToken should be set as headers in the request.
component: pingone-api
page_id: pingone-api:auth:pingone-davinci/davinci-runtime-apis/pingflows-html/auth-flow-capabilities
canonical_url: https://developer.pingidentity.com/pingone-api/auth/pingone-davinci/davinci-runtime-apis/pingflows-html/auth-flow-capabilities.html
section_ids:
  request-body-properties-for-actions: Request body properties for actions
  headers: Headers
  body: Body
  example-request: Example Request
  example-response: Example Response
---

# DaVinci Flow Capabilities (HTML)

##

```none
POST {{authPath}}/{{envID}}/davinci/connections/{{connectionID}}/capabilities/{{capabilityName}}
```

The `POST {{authPath}}/{{envID}}/davinci/connections/{{connectionID}}/capabilities/{{capabilityName}}` operation initiates the DaVinci authentication flow by specifying the connection and the capabilities associated with that connection. The capability name (for example, `customHTMLTemplate`) and the connection ID are specified in the request URL. The DaVinci `interactionId` and `interactionToken` should be set as headers in the request.

This sample request shows the `customHTMLTemplate` capability, which is a common capability to build a form for collecting user information required by the flow. The request body includes a `formData` property that specifies the form fields needed by the flow to register a new user. Note that this is just one sample usage of the `customHTMLTemplate` capability. If the `actionKey` property specified a sign-on action instead of registration, the flow might use different or fewer fields.

The `parameters` property includes the `eventType` value, which is `submit` for a `SUBMIT_BUTTON` and `action` for a `FLOW_BUTTON`. The `actionKey` property varies based on whether the flow needs to submit the form data using the `SUBMIT_BUTTON` or take a secondary action using the `FLOW_BUTTON`.

* `"eventType": "action"` should be passed in the payload when a `FLOW_BUTTON` action is intended.

* `"eventType": "submit"` should be passed in the payload when a `SUBMIT_BUTTON` action is intended.

The `actionKey` in both the above cases should be mapped to the key of the `SUBMIT_BUTTON` or `FLOW_BUTTON`.

The response includes a `form` property that builds the form. The `components.fields` property defines the fields and buttons presented to users to initiate the specified action.

|   |                                                                                                                                                                                                                        |
| - | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|   | This endpoint supports different request body property values depending on the flow action required. Click the **Request model** heading below to show the required properties and additional sample request payloads. |

> **Collapse: Request Model**
>
> | Property                                 | Type?  | Required? |
> | ---------------------------------------- | ------ | --------- |
> | `eventName`                              | String | Required  |
> | `id`                                     | String | Required  |
> | `interactionId`                          | String | Required  |
> | `parameters`                             | Object | Required  |
> | `parameters.eventType`                   | String | Required  |
> | `parameters.data`                        | Object | Required  |
> | `parameters.data.actionKey`              | String | Required  |
> | `parameters.data.formData`               | Object | Required  |
> | `parameters.data.formData.{{attribute}}` | String | Required  |
>
> Refer to the [DaVinci flow capabilities data model properties](../pingflows-html.html#davinci-connections-capabilities-html-data-model) for full property descriptions.

### Request body properties for actions

The following request body samples show the different request payloads for the most common flow actions.

**Secondary action, navigate to register route**

```json
{
   "id": "0mkskx7cez",
   "eventName": "continue",
   "parameters": {
     "eventType": "action",
     "data": {
       "actionKey": "REGISTER",
       "formData": {
       }
     }
   }
 }
```

**Submit action where form details are submitted**

```json
 {
   "id": "x0txd3bdfn",
   "eventName": "continue",
   "parameters": {
     "eventType": "submit",
     "data": {
       "actionKey": "REGISTER",
       "formData": {
         "email" : "DummyEmail@dummydomain.com",
         "password" : "DummyPassword@1234"/       }
     }
   }
 }
```

**Resend verification code during registration**

```json
{
   "id": "o4yhix414e",
   "eventName": "continue",
   "parameters": {
     "eventType": "action",
     "data": {
       "actionKey": "RESEND",
       "formData": {
       }
     }
   }
 }



 {
   "id": "o4yhix414e",
   "eventName": "continue",
   "parameters": {
     "eventType": "submit",
     "data": {
       "actionKey": "VERIFY",
       "formData": {
         "passcode" : "1ki2dsaq"
       }
     }
   }
 }
```

**Last step to get the PingOne session token**

```json
{
   "id": "h2cy2gkjip",
   "eventName": "continue",
   "parameters": {
     "eventType": "submit",
     "data": {
       "actionKey": "NEXT",
       "formData": {
       }
     }
   }
 }


 {
   "id": "65u7m8cm28",
   "eventName": "continue",
   "parameters": {
     "eventType": "action",
     "data": {
       "actionKey": "TROUBLE",
       "formData": {
       }
     }
   }
 }
```

**From forgot password, to cancel and go back**

```json
{
   "id": "afyus0g868",
   "eventName": "continue",
   "parameters": {
     "eventType": "action",
     "data": {
       "actionKey": "CANCEL",
       "formData": {
       }
     }
   }
 }
```

**Enter email for forgot password to send a recovery code to the id**

```json
{
   "id": "afyus0g868",
   "eventName": "continue",
   "parameters": {
     "eventType": "submit",
     "data": {
       "actionKey": "CONTINUE",
       "formData": {
         "username":"DummyEmail@dummydomain.com"
       }
     }
   }
 }
```

**Resend verification code to email if needed**

```json
{
   "id": "9gi11xivkc",
   "eventName": "continue",
   "parameters": {
     "eventType": "action",
     "data": {
       "actionKey": "RESEND",
       "formData": {
       }
     }
   }
 }
```

**Enter recovery code, new password, and confirm new password**

```json
{
   "id": "9gi11xivkc",
   "eventName": "continue",
   "parameters": {
     "eventType": "submit",
     "data": {
       "actionKey": "UPDATE",
       "formData": {
         "recoveryCode" : "sv4tk2oe",
         "newPassword" : "*******",
         "verifyNewPassword" : "*******"
       }
     }
   }
 }
```

**Password recovery is successful. Submit form to get a PingOne session token**

```json
{
   "id": "c28j6unuv1",
   "eventName": "continue",
   "parameters": {
     "eventType": "submit",
     "data": {
       "actionKey": "NEXT",
       "formData": {
       }
     }
   }
 }
```

**Successful login**

```json
{
   "id": "65u7m8cm28",
   "eventName": "continue",
   "parameters": {
     "eventType": "submit",
     "data": {
       "actionKey": "SIGNON",
       "formData": {
         "username" : "DummyEmail@dummydomain.com",
         "password" : "DummyPassword"

       }
     }
   }
 }
```

**Incorrect login details**

```json
{
   "id": "dnu7jt3sjz",
   "eventName": "continue",
   "parameters": {
     "eventType": "submit",
     "data": {
       "actionKey": "SIGNON",
       "formData": {
         "username" : "DummyEmail@dummydomain.com",
         "password" : "DummyPassword"
       }
     }
   }
 }
```

**Incorrect registration**

```json
{
   "id": "65u7m8cm28",
   "eventName": "continue",
   "parameters": {
     "eventType": "action",
     "data": {
       "actionKey": "REGISTER",
       "formData": {
       }
     }
   }
 }


 {
   "id": "leznhnimpg",
   "eventName": "continue",
   "parameters": {
     "eventType": "submit",
     "data": {
       "actionKey": "REGISTER",
       "formData": {
         "email" : "DummyEmail@dummydomain.com",
         "password" : "******"
       }
     }
   }
 }
```

**Sign on with expired password and password reset**

```json
{
   "id": "65u7m8cm28",
   "eventName": "continue",
   "parameters": {
     "eventType": "submit",
     "data": {
       "actionKey": "SIGNON",
       "formData": {
         "username" : "DummyEmail@dummydomain.com",
         "password" : "******"
       }
     }
   }
 }


 {
   "id": "yscz5j5r84",
   "eventName": "continue",
   "parameters": {
     "eventType": "submit",
     "data": {
       "actionKey": "UPDATE",
       "formData": {
         "currentPassword" : "******",
         "newPassword" : "*******",
         "verifyNewPassword" : "******"
       }
     }
   }
 }


 {
   "id": "3rcqks6t1v",
   "eventName": "continue",
   "parameters": {
     "eventType": "submit",
     "data": {
       "actionKey": "NEXT",
       "formData": {
       }
     }
   }
 }
```

### Headers

Content-Type      application/json

interactionId      {{interactionID}}

interactionToken      {{interactionToken}}

### Body

raw ( application/json )

```json
{
  "id": "0mkskx7cez",
  "eventName": "continue",
 "interactionId": "095036ef-2270-4f40-99ba-9e7f83379868",
  "parameters": {
    "eventType": "action",
    "data": {
      "actionKey": "REGISTER",
      "formData": {

      }
    }
  }
}
```

##

### Example Request

* cURL

* C#

* Go

* HTTP

* Java

* jQuery

* NodeJS

* Python

* PHP

* Ruby

* Swift

```shell
curl --location --globoff '{{authPath}}/{{envID}}/davinci/connections/{{connectionID}}/capabilities/{{capabilityName}}' \
--header 'interactionId: {{interactionID}}' \
--header 'interactionToken: {{interactionToken}}' \
--header 'Content-Type: application/json' \
--data '{
  "id": "0mkskx7cez",
  "eventName": "continue",
 "interactionId": "095036ef-2270-4f40-99ba-9e7f83379868",
  "parameters": {
    "eventType": "action",
    "data": {
      "actionKey": "REGISTER",
      "formData": {

      }
    }
  }
}'
```

```csharp
var options = new RestClientOptions("{{authPath}}/{{envID}}/davinci/connections/{{connectionID}}/capabilities/{{capabilityName}}")
{
  MaxTimeout = -1,
};
var client = new RestClient(options);
var request = new RestRequest("", Method.Post);
request.AddHeader("interactionId", "{{interactionID}}");
request.AddHeader("interactionToken", "{{interactionToken}}");
request.AddHeader("Content-Type", "application/json");
var body = @"{" + "\n" +
@"  ""id"": ""0mkskx7cez""," + "\n" +
@"  ""eventName"": ""continue""," + "\n" +
@" ""interactionId"": ""095036ef-2270-4f40-99ba-9e7f83379868""," + "\n" +
@"  ""parameters"": {" + "\n" +
@"    ""eventType"": ""action""," + "\n" +
@"    ""data"": {" + "\n" +
@"      ""actionKey"": ""REGISTER""," + "\n" +
@"      ""formData"": {" + "\n" +
@"        " + "\n" +
@"      }" + "\n" +
@"    }" + "\n" +
@"  }" + "\n" +
@"}";
request.AddStringBody(body, DataFormat.Json);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
```

```golang
package main

import (
  "fmt"
  "strings"
  "net/http"
  "io"
)

func main() {

  url := "{{authPath}}/{{envID}}/davinci/connections/{{connectionID}}/capabilities/{{capabilityName}}"
  method := "POST"

  payload := strings.NewReader(`{
  "id": "0mkskx7cez",
  "eventName": "continue",
 "interactionId": "095036ef-2270-4f40-99ba-9e7f83379868",
  "parameters": {
    "eventType": "action",
    "data": {
      "actionKey": "REGISTER",
      "formData": {

      }
    }
  }
}`)

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("interactionId", "{{interactionID}}")
  req.Header.Add("interactionToken", "{{interactionToken}}")
  req.Header.Add("Content-Type", "application/json")

  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))
}
```

```http
POST /{{envID}}/davinci/connections/{{connectionID}}/capabilities/{{capabilityName}} HTTP/1.1
Host: {{authPath}}
interactionId: {{interactionID}}
interactionToken: {{interactionToken}}
Content-Type: application/json

{
  "id": "0mkskx7cez",
  "eventName": "continue",
 "interactionId": "095036ef-2270-4f40-99ba-9e7f83379868",
  "parameters": {
    "eventType": "action",
    "data": {
      "actionKey": "REGISTER",
      "formData": {

      }
    }
  }
}
```

```java
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n  \"id\": \"0mkskx7cez\",\n  \"eventName\": \"continue\",\n \"interactionId\": \"095036ef-2270-4f40-99ba-9e7f83379868\",\n  \"parameters\": {\n    \"eventType\": \"action\",\n    \"data\": {\n      \"actionKey\": \"REGISTER\",\n      \"formData\": {\n        \n      }\n    }\n  }\n}");
Request request = new Request.Builder()
  .url("{{authPath}}/{{envID}}/davinci/connections/{{connectionID}}/capabilities/{{capabilityName}}")
  .method("POST", body)
  .addHeader("interactionId", "{{interactionID}}")
  .addHeader("interactionToken", "{{interactionToken}}")
  .addHeader("Content-Type", "application/json")
  .build();
Response response = client.newCall(request).execute();
```

```javascript
var settings = {
  "url": "{{authPath}}/{{envID}}/davinci/connections/{{connectionID}}/capabilities/{{capabilityName}}",
  "method": "POST",
  "timeout": 0,
  "headers": {
    "interactionId": "{{interactionID}}",
    "interactionToken": "{{interactionToken}}",
    "Content-Type": "application/json"
  },
  "data": JSON.stringify({
    "id": "0mkskx7cez",
    "eventName": "continue",
    "interactionId": "095036ef-2270-4f40-99ba-9e7f83379868",
    "parameters": {
      "eventType": "action",
      "data": {
        "actionKey": "REGISTER",
        "formData": {}
      }
    }
  }),
};

$.ajax(settings).done(function (response) {
  console.log(response);
});
```

```javascript
var request = require('request');
var options = {
  'method': 'POST',
  'url': '{{authPath}}/{{envID}}/davinci/connections/{{connectionID}}/capabilities/{{capabilityName}}',
  'headers': {
    'interactionId': '{{interactionID}}',
    'interactionToken': '{{interactionToken}}',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    "id": "0mkskx7cez",
    "eventName": "continue",
    "interactionId": "095036ef-2270-4f40-99ba-9e7f83379868",
    "parameters": {
      "eventType": "action",
      "data": {
        "actionKey": "REGISTER",
        "formData": {}
      }
    }
  })

};
request(options, function (error, response) {
  if (error) throw new Error(error);
  console.log(response.body);
});
```

```python
import requests
import json

url = "{{authPath}}/{{envID}}/davinci/connections/{{connectionID}}/capabilities/{{capabilityName}}"

payload = json.dumps({
  "id": "0mkskx7cez",
  "eventName": "continue",
  "interactionId": "095036ef-2270-4f40-99ba-9e7f83379868",
  "parameters": {
    "eventType": "action",
    "data": {
      "actionKey": "REGISTER",
      "formData": {}
    }
  }
})
headers = {
  'interactionId': '{{interactionID}}',
  'interactionToken': '{{interactionToken}}',
  'Content-Type': 'application/json'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)
```

```php
<?php
require_once 'HTTP/Request2.php';
$request = new HTTP_Request2();
$request->setUrl('{{authPath}}/{{envID}}/davinci/connections/{{connectionID}}/capabilities/{{capabilityName}}');
$request->setMethod(HTTP_Request2::METHOD_POST);
$request->setConfig(array(
  'follow_redirects' => TRUE
));
$request->setHeader(array(
  'interactionId' => '{{interactionID}}',
  'interactionToken' => '{{interactionToken}}',
  'Content-Type' => 'application/json'
));
$request->setBody('{\n  "id": "0mkskx7cez",\n  "eventName": "continue",\n "interactionId": "095036ef-2270-4f40-99ba-9e7f83379868",\n  "parameters": {\n    "eventType": "action",\n    "data": {\n      "actionKey": "REGISTER",\n      "formData": {\n        \n      }\n    }\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();
}
```

```ruby
require "uri"
require "json"
require "net/http"

url = URI("{{authPath}}/{{envID}}/davinci/connections/{{connectionID}}/capabilities/{{capabilityName}}")

http = Net::HTTP.new(url.host, url.port);
request = Net::HTTP::Post.new(url)
request["interactionId"] = "{{interactionID}}"
request["interactionToken"] = "{{interactionToken}}"
request["Content-Type"] = "application/json"
request.body = JSON.dump({
  "id": "0mkskx7cez",
  "eventName": "continue",
  "interactionId": "095036ef-2270-4f40-99ba-9e7f83379868",
  "parameters": {
    "eventType": "action",
    "data": {
      "actionKey": "REGISTER",
      "formData": {}
    }
  }
})

response = http.request(request)
puts response.read_body
```

```swift
let parameters = "{\n  \"id\": \"0mkskx7cez\",\n  \"eventName\": \"continue\",\n \"interactionId\": \"095036ef-2270-4f40-99ba-9e7f83379868\",\n  \"parameters\": {\n    \"eventType\": \"action\",\n    \"data\": {\n      \"actionKey\": \"REGISTER\",\n      \"formData\": {\n        \n      }\n    }\n  }\n}"
let postData = parameters.data(using: .utf8)

var request = URLRequest(url: URL(string: "{{authPath}}/{{envID}}/davinci/connections/{{connectionID}}/capabilities/{{capabilityName}}")!,timeoutInterval: Double.infinity)
request.addValue("{{interactionID}}", forHTTPHeaderField: "interactionId")
request.addValue("{{interactionToken}}", forHTTPHeaderField: "interactionToken")
request.addValue("application/json", forHTTPHeaderField: "Content-Type")

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

```json
{
    "id": "lujut6q7vy",
    "companyId": "abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6",
    "flowId": "adf4422d2ed2e81fbf7e2f721084bdf7",
    "connectionId": "867ed4363b2bc21c860085ad2baa817d",
    "capabilityName": "customHTMLTemplate",
    "screen": {
        "name": "HTTP",
        "properties": {
            "sktemplate": {
                "type": "string",
                "displayName": "Template",
                "visibility": "private",
                "createdDate": 1694687041166,
                "customerId": "",
                "companyId": "",
                "halReference": {
                    "resource": "uiTemplates",
                    "pathTemplate": "/environments/{envID}/uiTemplates/{sktemplate}"
                },
                "uiId": "285c9d55f6886242da17a6dcb6a504da",
                "description": "",
                "inputSchema": "{\n    \"type\": \"object\",\n    \"properties\": {\n        \"title\": {\n            \"type\": \"string\",\n            \"displayName\": \"Title\",\n            \"preferredControlType\": \"textField\",\n            \"enableParameters\": true,\n            \"propertyName\": \"title\"\n        },\n\t\t\"textOne\": {\n            \"type\": \"string\",\n            \"displayName\": \"Text One\",\n            \"preferredControlType\": \"textField\",\n            \"enableParameters\": true,\n            \"propertyName\": \"textOne\"\n        },\n\t\t\"textTwo\": {\n            \"type\": \"string\",\n            \"displayName\": \"Text Two\",\n            \"preferredControlType\": \"textField\",\n            \"enableParameters\": true,\n            \"propertyName\": \"textTwo\"\n        }\n    }\n}",
                "name": "Sign On Form",
                "outputSchema": null,
                "script": "",
                "style": "",
                "template": "",
                "updatedDate": 1694687155750,
                "validationRules": [],
                "version": "1.0",
                "value": "285c9d55f6886242da17a6dcb6a504da"
            },
            "customHTML": {
                "type": "string",
                "displayName": "HTML Template",
                "createdDate": 1694542156417,
                "customerId": "ecb9bf8a2fab854e65045d02cb6bab50",
                "companyId": "singularkey",
                "preferredControlType": "textArea",
                "enableParameters": true,
                "maximizeToggle": true,
                "viewToggle": true,
                "largePayload": true,
                "value": "<div\n    class=\"bg-light d-flex flex-column justify-content-center align-items-center position-absolute top-0 start-0 bottom-0 end-0 overflow-auto\">\n    <div style=\"max-width: 400px; min-width: 400px; width: 100%\">\n        <div class=\"card shadow mb-5\">\n            <div class=\"card-body p-5 d-flex flex-column\">\n                <img class=\"companyLogo align-self-center mb-5\" src=\"https://assets.pingone.com/ux/ui-library/5.0.2/images/logo-pingidentity.png\" alt=\"Ping Identity\" />\n\n                {{#if title}}\n                <h1 class=\"text-center mb-4\">{{title}}</h1>\n                {{/if}}\n\n                {{#if textOne}}\n                <p class=\"text-muted text-center\">{{textOne}}</p>\n                {{/if}}\n\n                {{#if textTwo}}\n                <p class=\"text-muted text-center\">{{textTwo}}</p>\n                {{/if}}\n\n                <!-- Generic Error Message -->\n                <p id=\"feedback\" data-id=\"feedback\" class=\"text-danger mdi mdi-alert-circle\" data-skcomponent=\"skerror\"></p>\n\n                <!-- Field Validation Error Messages -->\n                <p class=\"text-danger mdi mdi-alert-circle\" data-skerrorid=\"username\" data-skcomponent=\"skerrormessage\"></p>\n                <p class=\"text-danger mdi mdi-alert-circle\" data-skerrorid=\"password\" data-skcomponent=\"skerrormessage\"></p>\n\n                <p class=\"text-danger mdi mdi-alert-circle\" data-id=\"feedback\" data-skcomponent=\"skerror\"></p>\n                <form id=\"signonForm\" data-id=\"signonForm\">\n                    <div class=\"mb-4 form-floating\">\n                        <input class=\"form-control\" type=\"text\" id=\"username\" name=\"username\" placeholder=\"username\"\n                            autocomplete=\"off\" value=\"\" data-id=\"username-input\" />\n                        <label class=\"form-label\" for=\"username\">Username</label>\n                    </div>\n                    <div id=\"passwordDiv\" class=\"mb-4 form-floating\">\n                        <input class=\"form-control\" type=\"password\" id=\"password\" name=\"password\" placeholder=\"Password\"\n                            autocomplete=\"off\" value=\"\" data-id=\"password-input\" />\n                        <label class=\"form-label\" for=\"password\">Password</label>\n                    </div>\n                    <div class=\"d-flex flex-column\">\n                        {{#if buttonLabel}}\n                        <button data-id=\"button\" type=\"submit\" class=\"btn btn-primary mb-3\" data-skcomponent=\"skbutton\"\n                            data-skbuttontype=\"form-submit\" data-skform=\"signonForm\" id=\"btnSignIn\"\n                            data-skrequiredinputs=\"username, password\" data-skbuttonvalue=\"SIGNON\">\n                            {{buttonLabel}}\n                        </button>\n                        {{/if}}\n                        <div class=\"d-flex flex-column\">\n                            {{#if resetButtonLabel}}\n                            <button data-id=\"button\" type=\"submit\" class=\"btn btn-link\" data-skcomponent=\"skbutton\"\n                                data-skbuttontype=\"next-event\" id=\"btnTrouble\" data-skbuttonvalue=\"TROUBLE\">\n                                {{resetButtonLabel}}\n                            </button>\n                            {{/if}}\n                            {{#if registerButtonLabel}}\n                            <button type=\"submit\" class=\"btn btn-link\" data-skcomponent=\"skbutton\"\n                                data-skbuttontype=\"next-event\"  id=\"btnRegister\" data-skbuttonvalue=\"REGISTER\">\n                                {{registerButtonLabel}}\n                            </button>\n                            {{/if}}\n                        </div>\n                </form>\n            </div>\n        </div>\n    </div>\n</div>"
            },
            "validationRules": {
                "type": "object",
                "displayName": "Form validation rules",
                "value": [],
                "info": "Rules to check to validate form inputs",
                "createdDate": 1694542156291,
                "customerId": "ecb9bf8a2fab854e65045d02cb6bab50",
                "companyId": "singularkey",
                "preferredControlType": "validationRules"
            },
            "customCSS": {
                "type": "string",
                "displayName": "CSS",
                "createdDate": 1694542156320,
                "customerId": "ecb9bf8a2fab854e65045d02cb6bab50",
                "companyId": "singularkey",
                "preferredControlType": "codeEditor",
                "language": "css",
                "maximizeToggle": true,
                "largePayload": true,
                "value": ""
            },
            "customScript": {
                "type": "string",
                "displayName": "Script",
                "createdDate": 1694542156320,
                "customerId": "ecb9bf8a2fab854e65045d02cb6bab50",
                "companyId": "singularkey",
                "preferredControlType": "codeEditor",
                "value": "const setFieldFocus = (id) => {\n    const element = document.getElementById(id);\n    if (element) {\n        element.focus();\n    }\n}\n\nconst makePasswordToggle = (id) => {\n    let container = document.getElementById(id);\n\n    if (container) {\n        let password = container.getElementsByTagName(\"input\")[0];\n        let toggler = document.createElement(\"button\");\n        toggler.setAttribute(\"type\", \"button\");\n        toggler.setAttribute(\"aria-label\", \"Show/Hide Password\");\n        toggler.className = \"btn mdi mdi-eye-off-outline position-absolute end-0 top-50 translate-middle-y\";\n        container.appendChild(toggler);\n\n        function showHidePassword() {\n            if (password.type == \"password\") {\n                password.setAttribute(\"type\", \"text\");\n                toggler.classList.add(\"mdi-eye-outline\");\n                toggler.classList.remove(\"mdi-eye-off-outline\");\n            } else {\n                toggler.classList.add(\"mdi-eye-off-outline\");\n                toggler.classList.remove(\"mdi-eye-outline\");\n                password.setAttribute(\"type\", \"password\");\n            }\n            password.focus();\n        };\n\n        toggler.addEventListener(\"click\", showHidePassword);\n    }\n}\n\nconst start = () => {\n    makePasswordToggle(\"passwordDiv\");\n    setFieldFocus(\"username\")\n}\n\nif (document.readyState === \"loading\") {\n    // Loading hasn't finished yet\n    document.addEventListener(\"DOMContentLoaded\", start);\n} else {\n    // `DOMContentLoaded` has already fired\n    start();\n}",
                "language": "javascript",
                "maximizeToggle": true,
                "info": "Write custom JavaScript. Caution: Custom code is for advanced users only. Before using custom code, review the security risks in the DaVinci documentation by searching for \"Using custom code safely\"."
            },
            "inputSchema": {
                "type": "string",
                "displayName": "Input Schema",
                "createdDate": 1694542156288,
                "customerId": "ecb9bf8a2fab854e65045d02cb6bab50",
                "companyId": "singularkey",
                "preferredControlType": "codeEditor",
                "language": "json",
                "info": "Follow example for JSON schema.",
                "maximizeToggle": true,
                "value": {
                    "type": "object",
                    "properties": {
                        "title": {
                            "type": "string",
                            "displayName": "Title",
                            "preferredControlType": "textField",
                            "enableParameters": true,
                            "propertyName": "title"
                        },
                        "textOne": {
                            "type": "string",
                            "displayName": "Text One",
                            "preferredControlType": "textField",
                            "enableParameters": true,
                            "propertyName": "textOne"
                        },
                        "textTwo": {
                            "type": "string",
                            "displayName": "Text Two",
                            "preferredControlType": "textField",
                            "enableParameters": true,
                            "propertyName": "textTwo"
                        },
                        "buttonLabel": {
                            "type": "string",
                            "displayName": "Button Label",
                            "preferredControlType": "textField",
                            "enableParameters": true,
                            "propertyName": "buttonLabel"
                        },
                        "forgotButtonLabel": {
                            "type": "string",
                            "displayName": "Forgot Password Button Label",
                            "preferredControlType": "textField",
                            "enableParameters": true,
                            "propertyName": "resetButtonLabel"
                        },
                        "registerButtonLabel": {
                            "type": "string",
                            "displayName": "Register Button Label",
                            "preferredControlType": "textField",
                            "enableParameters": true,
                            "propertyName": "registerButtonLabel"
                        }
                    }
                }
            },
            "outputSchema": {
                "type": "string",
                "displayName": "Output Schema",
                "createdDate": 1694542156271,
                "customerId": "ecb9bf8a2fab854e65045d02cb6bab50",
                "companyId": "singularkey",
                "preferredControlType": "codeEditor",
                "language": "json",
                "info": "Follow example for JSON schema.",
                "maximizeToggle": true,
                "value": {}
            },
            "formFieldsList": {
                "type": "array",
                "constructType": "formFieldsList",
                "displayName": "Output Fields List",
                "createdDate": 1694542156244,
                "customerId": "ecb9bf8a2fab854e65045d02cb6bab50",
                "companyId": "singularkey",
                "preferredControlType": "formFieldsList",
                "hideLabel": false,
                "value": [
                    {
                        "preferredControlType": "textField",
                        "preferredDataType": "string",
                        "propertyName": "username",
                        "displayName": "Username",
                        "hashedVisibility": false,
                        "value": ""
                    },
                    {
                        "propertyName": "password",
                        "preferredControlType": "textField",
                        "preferredDataType": "string",
                        "value": "",
                        "hashedVisibility": true,
                        "displayName": "Password"
                    },
                    {
                        "preferredControlType": "textField",
                        "preferredDataType": "string",
                        "propertyName": "buttonValue"
                    }
                ]
            },
            "challenge": {
                "type": "string",
                "displayName": "Challenge",
                "createdDate": 1694542156314,
                "customerId": "ecb9bf8a2fab854e65045d02cb6bab50",
                "companyId": "singularkey",
                "preferredControlType": "textField",
                "enableParameters": true
            },
            "button": {
                "constructType": "button",
                "displayName": "Submit",
                "createdDate": 1694542156280,
                "customerId": "ecb9bf8a2fab854e65045d02cb6bab50",
                "companyId": "singularkey",
                "logo": "",
                "showLogo": true,
                "preferredControlType": "button",
                "css": {
                    "backgroundColor": "#1CAB42",
                    "color": "#ffffff"
                },
                "onClick": {
                    "constructType": "skEvent",
                    "eventName": "continue",
                    "params": [],
                    "eventType": "post",
                    "postProcess": {}
                }
            },
            "showFooter": {
                "value": true
            },
            "returnRequestParameters": {
                "value": true
            },
            "messageTitle": {
                "value": "Information"
            },
            "message": {
                "value": ""
            },
            "title": {
                "value": "Account Registration Demo"
            },
            "showPoweredBy": {
                "value": false
            },
            "showContinueButton": {
                "value": false
            },
            "enablePolling": {
                "value": false
            },
            "pollInterval": {
                "value": 2000
            },
            "pollRetries": {
                "value": 60
            },
            "pollChallengeStatus": {
                "value": true
            },
            "httpMethod": {
                "value": "GET"
            },
            "httpBody": {
                "value": "none"
            },
            "raw": {
                "value": ""
            },
            "signResponse": {
                "value": false
            },
            "additionalFieldsName": {
                "value": "additionalProperties"
            },
            "unsafeIgnoreTLSErrors": {
                "value": false
            },
            "delayTime": {
                "value": 50
            },
            "returnSuccess": {
                "value": true
            },
            "keepOutputIfNotValid": {
                "value": false
            },
            "fieldValidation": {
                "value": false
            },
            "outboundMtlsKey": {
                "value": "none"
            },
            "textOne": {
                "value": "Demo illustrating PingOne account creation with email verification."
            },
            "nodeTitle": {
                "value": "Sign On Form"
            },
            "backgroundColor": {
                "value": "#afd5ffff"
            },
            "nodeDescription": {
                "value": "Prompt for username and password"
            },
            "textTwo": {
                "value": "Click 'No account? Register now!' to begin."
            },
            "buttonLabel": {
                "value": "Continue"
            },
            "registerButtonLabel": {
                "value": "No account? Register Now!"
            },
            "resetButtonLabel": {
                "value": "Having trouble signing on?"
            },
            "isLinkStyleSheetSupportEnabled": {
                "value": false
            }
        },
        "userViews": [
            {
                "screenTemplateName": "CustomHTMLTemplate",
                "items": [
                    {
                        "propertyName": "sktemplate"
                    },
                    {
                        "propertyName": "customHTML"
                    },
                    {
                        "propertyName": "validationRules"
                    },
                    {
                        "propertyName": "customCSS"
                    },
                    {
                        "propertyName": "customScript"
                    },
                    {
                        "propertyName": "inputSchema"
                    },
                    {
                        "propertyName": "outputSchema"
                    },
                    {
                        "propertyName": "formFieldsList"
                    },
                    {
                        "propertyName": "challenge"
                    },
                    {
                        "propertyName": "button"
                    }
                ]
            }
        ],
        "metadata": {
            "colors": {
                "canvas": "#AFD5FF",
                "canvasText": "#253746",
                "dark": "#2E5EA6"
            },
            "logos": {
                "canvas": {
                    "imageFileName": "http.svg"
                }
            },
            "type": "core",
            "vendor": ""
        }
    },
    "_links": {
        "self": {
            "href": "https://auth.pingone.com/abfba8f6-49eb-49f5-a5d9-80ad5c98f9f6/davinci/connections/867ed4363b2bc21c860085ad2baa817d/capabilities/customHTMLTemplate"
        }
    },
    "defaultErrorLogo": false,
    "customLogoURLSelection": 1,
    "customErrorBrandLogoUrl": ""
}
```
