curl --request POST \
--url https://{your-subdomain}.neetoform.com/api/external/v2/forms/{form_id}/email_invitations \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <x-api-key>' \
--data '
{
"emails": [
"oliver@example.com",
"sam@example.com"
],
"email_subject": "Please share your feedback",
"email_body": "<p>Please take a few minutes to share your feedback.</p>",
"start_survey_button_text": "Get started",
"reply_to_email": "support@example.com",
"send_from_email": "forms@example.com",
"send_at": "2026-11-01T10:00:00Z"
}
'const options = {
method: 'POST',
headers: {'X-Api-Key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
emails: ['oliver@example.com', 'sam@example.com'],
email_subject: 'Please share your feedback',
email_body: '<p>Please take a few minutes to share your feedback.</p>',
start_survey_button_text: 'Get started',
reply_to_email: 'support@example.com',
send_from_email: 'forms@example.com',
send_at: '2026-11-01T10:00:00Z'
})
};
fetch('https://{your-subdomain}.neetoform.com/api/external/v2/forms/{form_id}/email_invitations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{your-subdomain}.neetoform.com/api/external/v2/forms/{form_id}/email_invitations"
payload = {
"emails": ["oliver@example.com", "sam@example.com"],
"email_subject": "Please share your feedback",
"email_body": "<p>Please take a few minutes to share your feedback.</p>",
"start_survey_button_text": "Get started",
"reply_to_email": "support@example.com",
"send_from_email": "forms@example.com",
"send_at": "2026-11-01T10:00:00Z"
}
headers = {
"X-Api-Key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"form_id": "6f1c2a8e-4d1b-4f6e-9a57-2f0f3c1d9b10",
"emails": [
"oliver@example.com",
"sam@example.com"
],
"send_at": "2026-11-01T10:00:00Z"
}{
"error": "Form does not exist."
}{
"error": "Not a valid email address: oliver@. No invitation was sent"
}Send email invitations
Email people an invitation to fill in the form, now or at a scheduled time. When the form is restricted to invitees, each address is also added to its invitee list. Calling this again sends the emails again.
curl --request POST \
--url https://{your-subdomain}.neetoform.com/api/external/v2/forms/{form_id}/email_invitations \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <x-api-key>' \
--data '
{
"emails": [
"oliver@example.com",
"sam@example.com"
],
"email_subject": "Please share your feedback",
"email_body": "<p>Please take a few minutes to share your feedback.</p>",
"start_survey_button_text": "Get started",
"reply_to_email": "support@example.com",
"send_from_email": "forms@example.com",
"send_at": "2026-11-01T10:00:00Z"
}
'const options = {
method: 'POST',
headers: {'X-Api-Key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
emails: ['oliver@example.com', 'sam@example.com'],
email_subject: 'Please share your feedback',
email_body: '<p>Please take a few minutes to share your feedback.</p>',
start_survey_button_text: 'Get started',
reply_to_email: 'support@example.com',
send_from_email: 'forms@example.com',
send_at: '2026-11-01T10:00:00Z'
})
};
fetch('https://{your-subdomain}.neetoform.com/api/external/v2/forms/{form_id}/email_invitations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{your-subdomain}.neetoform.com/api/external/v2/forms/{form_id}/email_invitations"
payload = {
"emails": ["oliver@example.com", "sam@example.com"],
"email_subject": "Please share your feedback",
"email_body": "<p>Please take a few minutes to share your feedback.</p>",
"start_survey_button_text": "Get started",
"reply_to_email": "support@example.com",
"send_from_email": "forms@example.com",
"send_at": "2026-11-01T10:00:00Z"
}
headers = {
"X-Api-Key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"form_id": "6f1c2a8e-4d1b-4f6e-9a57-2f0f3c1d9b10",
"emails": [
"oliver@example.com",
"sam@example.com"
],
"send_at": "2026-11-01T10:00:00Z"
}{
"error": "Form does not exist."
}{
"error": "Not a valid email address: oliver@. No invitation was sent"
}{your-subdomain} with your workspace’s subdomain. Learn how to find your subdomain in Workspace subdomain.
Headers
Use the X-Api-Key header to provide your workspace API key. Refer to Authentication for more information.
Path Parameters
Unique ID of the form. Refer to Getting the Form ID for detailed instructions.
Body
Email addresses to invite. Repeated addresses are sent once. If any address is not valid, nothing is sent.
["oliver@example.com", "sam@example.com"]
Subject of the email. Defaults to "Please fill out the
form"."Please share your feedback"
Body of the email in HTML. Defaults to a short request to fill out the form.
"<p>Please take a few minutes to share your feedback.</p>"
Text of the button in the email. Defaults to "Get started".
"Get started"
Email address that receives replies to the invitation.
"support@example.com"
Email address the invitation is sent from.
"forms@example.com"
Time to send the invitation, in ISO 8601 format. When omitted, the invitation is sent now.
"2026-11-01T10:00:00Z"