curl --request GET \
--url https://pub-api.conversion.ai/api/v2/forms/{formId} \
--header 'X-API-Key: <api-key>'import requests
url = "https://pub-api.conversion.ai/api/v2/forms/{formId}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://pub-api.conversion.ai/api/v2/forms/{formId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://pub-api.conversion.ai/api/v2/forms/{formId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://pub-api.conversion.ai/api/v2/forms/{formId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://pub-api.conversion.ai/api/v2/forms/{formId}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://pub-api.conversion.ai/api/v2/forms/{formId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"form": {
"id": "9f3c1a2e-6b7d-4e2a-9c1f-1a2b3c4d5e6f",
"name": "Demo Request",
"createdAt": "2026-05-01T12:00:00Z",
"updatedAt": "2026-06-11T09:30:00Z",
"submissionCount": 412,
"lastSubmittedAt": "2026-07-10T08:15:00Z",
"fields": [
{
"fieldId": "aa8b2c1d-4e5f-4a6b-8c9d-0e1f2a3b4c5d",
"name": "email",
"type": "EMAIL",
"required": true,
"hidden": false
},
{
"fieldId": "bb9c3d2e-5f6a-4b7c-9d0e-1f2a3b4c5d6e",
"name": "company_size",
"type": "DROPDOWN",
"required": false,
"hidden": false,
"options": [
{
"label": "1-10 employees",
"value": "1-10"
},
{
"label": "11-50 employees",
"value": "11-50"
},
{
"label": "51+ employees",
"value": "51+"
}
]
},
{
"fieldId": "cc0d4e3f-6a7b-4c8d-0e1f-2a3b4c5d6e7f",
"name": "message",
"type": "LONG_ANSWER",
"required": false,
"hidden": false
},
{
"fieldId": "dd1e5f4a-7b8c-4d9e-1f2a-3b4c5d6e7f8a",
"name": "utm_source",
"type": "HIDDEN",
"required": false,
"hidden": true
}
]
}
}
}{
"error": {
"code": "unauthorized",
"message": "API key is required"
}
}{
"error": {
"code": "form_not_found",
"message": "form not found"
}
}{
"error": {
"code": "internal_error",
"message": "failed to load form"
}
}Get Form
Get a tracked, published Conversion-native form by id, including the fields of its published definition. Each field’s fieldId is the key used to reference the field in the forms JavaScript API and in submission data. DROPDOWN and MULTI_CHECKBOX fields also list their selectable options, so you can map a submitted value back to the option label a visitor saw. A MULTI_CHECKBOX submits the values of every ticked option as a single semicolon-separated string, such as analytics;automation.
Only tracked, published Conversion-native forms resolve; unknown ids, forms belonging to another workspace, external and ad forms, and untracked, archived, or never-published forms all return a form_not_found error.
curl --request GET \
--url https://pub-api.conversion.ai/api/v2/forms/{formId} \
--header 'X-API-Key: <api-key>'import requests
url = "https://pub-api.conversion.ai/api/v2/forms/{formId}"
headers = {"X-API-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-Key': '<api-key>'}};
fetch('https://pub-api.conversion.ai/api/v2/forms/{formId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://pub-api.conversion.ai/api/v2/forms/{formId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://pub-api.conversion.ai/api/v2/forms/{formId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-Key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://pub-api.conversion.ai/api/v2/forms/{formId}")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://pub-api.conversion.ai/api/v2/forms/{formId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": {
"form": {
"id": "9f3c1a2e-6b7d-4e2a-9c1f-1a2b3c4d5e6f",
"name": "Demo Request",
"createdAt": "2026-05-01T12:00:00Z",
"updatedAt": "2026-06-11T09:30:00Z",
"submissionCount": 412,
"lastSubmittedAt": "2026-07-10T08:15:00Z",
"fields": [
{
"fieldId": "aa8b2c1d-4e5f-4a6b-8c9d-0e1f2a3b4c5d",
"name": "email",
"type": "EMAIL",
"required": true,
"hidden": false
},
{
"fieldId": "bb9c3d2e-5f6a-4b7c-9d0e-1f2a3b4c5d6e",
"name": "company_size",
"type": "DROPDOWN",
"required": false,
"hidden": false,
"options": [
{
"label": "1-10 employees",
"value": "1-10"
},
{
"label": "11-50 employees",
"value": "11-50"
},
{
"label": "51+ employees",
"value": "51+"
}
]
},
{
"fieldId": "cc0d4e3f-6a7b-4c8d-0e1f-2a3b4c5d6e7f",
"name": "message",
"type": "LONG_ANSWER",
"required": false,
"hidden": false
},
{
"fieldId": "dd1e5f4a-7b8c-4d9e-1f2a-3b4c5d6e7f8a",
"name": "utm_source",
"type": "HIDDEN",
"required": false,
"hidden": true
}
]
}
}
}{
"error": {
"code": "unauthorized",
"message": "API key is required"
}
}{
"error": {
"code": "form_not_found",
"message": "form not found"
}
}{
"error": {
"code": "internal_error",
"message": "failed to load form"
}
}Authorizations
Your Conversion API key. Found in Settings > Integrations in the dashboard. Format: sk_live_<key_id>_<secret>.
Path Parameters
The Conversion form id, as returned by GET /v2/forms.
Response
Form retrieved successfully.
Show child attributes
Show child attributes
Was this page helpful?