curl --request POST \
--url https://{subdomain}.conveyour.com/api/form/submission_collections \
--header 'Content-Type: application/json' \
--header 'x-conveyour-token: <api-key>' \
--data '
{
"name": "site_survey",
"label": "Site Survey",
"label_plural": "Site Surveys",
"schema": {
"name": {
"title": "Form Name",
"type": "Text",
"validators": [
"required"
],
"locked": true
},
"answer": {
"title": "Answer",
"type": "Text"
}
}
}
'const options = {
method: 'POST',
headers: {'x-conveyour-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'site_survey',
label: 'Site Survey',
label_plural: 'Site Surveys',
schema: {
name: {title: 'Form Name', type: 'Text', validators: ['required'], locked: true},
answer: {title: 'Answer', type: 'Text'}
}
})
};
fetch('https://{subdomain}.conveyour.com/api/form/submission_collections', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {
method: 'POST',
headers: {'x-conveyour-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'site_survey',
label: 'Site Survey',
label_plural: 'Site Surveys',
schema: {
name: {title: 'Form Name', type: 'Text', validators: ['required'], locked: true},
answer: {title: 'Answer', type: 'Text'}
}
})
};
fetch('https://{subdomain}.conveyour.com/api/form/submission_collections', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{subdomain}.conveyour.com/api/form/submission_collections"
payload = {
"name": "site_survey",
"label": "Site Survey",
"label_plural": "Site Surveys",
"schema": {
"name": {
"title": "Form Name",
"type": "Text",
"validators": ["required"],
"locked": True
},
"answer": {
"title": "Answer",
"type": "Text"
}
}
}
headers = {
"x-conveyour-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{subdomain}.conveyour.com/api/form/submission_collections",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'site_survey',
'label' => 'Site Survey',
'label_plural' => 'Site Surveys',
'schema' => [
'name' => [
'title' => 'Form Name',
'type' => 'Text',
'validators' => [
'required'
],
'locked' => true
],
'answer' => [
'title' => 'Answer',
'type' => 'Text'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-conveyour-token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"status": "ok",
"message": "Submission Collection created",
"data": {
"id": "64a1b2c3d4e5f6a7b8c9d0e1",
"name": "Annual Safety Acknowledgment"
}
}{
"status": "failed",
"message": "Lacking necessary permission add_contacts",
"data": {
"permission": "add_contacts"
}
}{
"status": "failed",
"message": "<string>",
"data": {}
}Create a submission collection
Creates a new form definition.
Create a form definition
Permission: Requires manage_forms.
Field definitions go in schema, not fields. schema is an object keyed by field name, each value shaped {title, type, ...} — e.g. {"make": {"title": "Make", "type": "Text"}}. A fields key is not part of the model and is silently dropped, so a payload using it creates the record with no fields at all.
curl --request POST \
--url https://{subdomain}.conveyour.com/api/form/submission_collections \
--header 'Content-Type: application/json' \
--header 'x-conveyour-token: <api-key>' \
--data '
{
"name": "site_survey",
"label": "Site Survey",
"label_plural": "Site Surveys",
"schema": {
"name": {
"title": "Form Name",
"type": "Text",
"validators": [
"required"
],
"locked": true
},
"answer": {
"title": "Answer",
"type": "Text"
}
}
}
'const options = {
method: 'POST',
headers: {'x-conveyour-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'site_survey',
label: 'Site Survey',
label_plural: 'Site Surveys',
schema: {
name: {title: 'Form Name', type: 'Text', validators: ['required'], locked: true},
answer: {title: 'Answer', type: 'Text'}
}
})
};
fetch('https://{subdomain}.conveyour.com/api/form/submission_collections', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {
method: 'POST',
headers: {'x-conveyour-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'site_survey',
label: 'Site Survey',
label_plural: 'Site Surveys',
schema: {
name: {title: 'Form Name', type: 'Text', validators: ['required'], locked: true},
answer: {title: 'Answer', type: 'Text'}
}
})
};
fetch('https://{subdomain}.conveyour.com/api/form/submission_collections', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{subdomain}.conveyour.com/api/form/submission_collections"
payload = {
"name": "site_survey",
"label": "Site Survey",
"label_plural": "Site Surveys",
"schema": {
"name": {
"title": "Form Name",
"type": "Text",
"validators": ["required"],
"locked": True
},
"answer": {
"title": "Answer",
"type": "Text"
}
}
}
headers = {
"x-conveyour-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{subdomain}.conveyour.com/api/form/submission_collections",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'site_survey',
'label' => 'Site Survey',
'label_plural' => 'Site Surveys',
'schema' => [
'name' => [
'title' => 'Form Name',
'type' => 'Text',
'validators' => [
'required'
],
'locked' => true
],
'answer' => [
'title' => 'Answer',
'type' => 'Text'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-conveyour-token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"status": "ok",
"message": "Submission Collection created",
"data": {
"id": "64a1b2c3d4e5f6a7b8c9d0e1",
"name": "Annual Safety Acknowledgment"
}
}{
"status": "failed",
"message": "Lacking necessary permission add_contacts",
"data": {
"permission": "add_contacts"
}
}{
"status": "failed",
"message": "<string>",
"data": {}
}Authorizations
Your API key token. Contacts endpoints require a Server-only — Full API key — see Authentication.
Query Parameters
Team scope for the request, as one or more team ObjectIds. The brackets are required: PHP keeps only the last value for a repeated plain key, so teams=A&teams=B silently resolves to B alone. On requests with a JSON body you may send teams (no brackets) in the body instead.
Values that are not valid ObjectIds are silently ignored — a mistyped team ID behaves as if no team was sent. See the teams section of the API conventions guide.
Body
Response
Success.
The common response envelope shared by all ConveYour endpoints.
ok on success, failed on error.
ok, failed Human-readable description of the result.
A submission collection (form definition). schema holds the org-defined field definitions that submissions against this collection carry.
Show child attributes
Show child attributes