Submit Form
Submit answers to a published form from external systems
Accepts form submissions from external applications and processes them through the same pipeline as the standard Zyntro form UI — contact creation or update, enrichment, CRM field mapping, and form action triggers. Answers are keyed by merge tag names (the answer_key values from Get Form Fields).
Requires a valid api_key in the JSON request body
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
api_key |
body | string |
Yes | Your Zyntro API key |
org_id |
body | string |
Yes | Your organization UUID |
member_id |
body | string |
Yes | The member UUID performing the submission |
brand_id |
body | string |
Yes | Your brand ID |
form_id |
body | string |
Yes | The UUID of the form to submit to |
answers |
body | object |
Yes | An object keyed by merge tag names (from answer_key in Get Form Fields). Values are the submitted answers. Example: {"email": "[email protected]", "first_name": "Jane", "interest": "enterprise"} |
ip_data |
body | object |
Yes | Geolocation data for the submitter. Required sub-fields: ip_address, city, country, country_code, timezone, lattitude, longitude. If unavailable, pass empty strings — but all fields must be present. |
contact_id |
body | string |
No | If you already know the contact UUID, pass it to link the submission to an existing contact instead of creating a new one. |
Important: Answer keys must match the merge tag names from Get Form Fields (the answer_key values), not the internal field UUIDs. For example, use "email" not the UUID. If no answer keys match any form field, the submission is rejected. If some match and some do not, only the matched answers are processed — unmatched keys are silently ignored.
Request Body
Content-Type: application/json
Example
{
"org_id": "YOUR_ORG_ID",
"answers": {
"email": "[email protected]",
"message": "I would like to learn more about the enterprise plan.",
"interest": "enterprise",
"first_name": "Jane"
},
"api_key": "YOUR_API_KEY",
"form_id": "f1a2b3c4-d5e6-7890-abcd-ef1234567890",
"ip_data": {
"city": "San Francisco",
"country": "United States",
"timezone": "America/Los_Angeles",
"lattitude": "37.7749",
"longitude": "-122.4194",
"ip_address": "203.0.113.42",
"country_code": "US"
},
"brand_id": "1",
"member_id": "YOUR_MEMBER_ID"
}
Code Samples
curl -X POST https://app.zyntrohq.com/public/forms/submitForm \
-H "Content-Type: application/json" \
-d '{
"api_key": "YOUR_API_KEY",
"org_id": "YOUR_ORG_ID",
"member_id": "YOUR_MEMBER_ID",
"brand_id": "1",
"form_id": "f1a2b3c4-d5e6-7890-abcd-ef1234567890",
"answers": {
"first_name": "Jane",
"email": "[email protected]",
"interest": "enterprise"
},
"ip_data": {
"ip_address": "203.0.113.42",
"city": "San Francisco",
"country": "United States",
"country_code": "US",
"timezone": "America/Los_Angeles",
"lattitude": "37.7749",
"longitude": "-122.4194"
}
}'
Info: On successful submission, a completion_id is returned. If your form has a redirect_url configured in its form actions, the completion_id is appended as a query parameter to that URL along with any other configured params. Use the Get Form Completion endpoint to retrieve the full submission record, including the contact_id once contact enrichment completes.
Response
{
"data": {
"contact_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"completion_id": "c9d8e7f6-a5b4-3210-fedc-ba9876543210"
},
"status": "success"
}
{
"data": [
"None of the provided answer keys matched any form field merge tags. Unmatched keys: company, role"
],
"status": "error"
}
Warning: The ip_data object uses lattitude (with a double 't') as the field name. This is an intentional API convention — do not correct it to latitude or the field will be treated as missing.
Errors
| Code | Message | Resolution |
|---|---|---|
MISSING_FIELD |
Missing required field: {field} A required parameter is missing. |
Include all required fields including ip_data sub-fields. |
MISSING_IP_FIELD |
Missing ip_data field: {field} A required ip_data sub-field is missing. |
Include all 7 ip_data fields. Pass empty strings if data is unavailable. |
INVALID_API_KEY |
Invalid API Key No active user matches the key. |
Verify your key. |
FORM_NOT_FOUND |
Form not found No form with that ID exists. |
Verify the form_id. |
NOT_PUBLISHED |
Form is not published. Only published forms accept submissions. The form exists but is not published. |
Publish the form first. |
NO_MATCH |
None of the provided answer keys matched any form field merge tags. Every answer key you sent is unrecognized. |
Use Get Form Fields to discover the correct answer_key values. |
PROCESSING_ERROR |
Internal processing error The form processor failed. |
Check the error details and retry. |