Skip to content

Public Form Submission API

This document provides a complete reference for the Public Form Submission API, which allows users to submit form data and files to publicly available forms.

https://api.compitcom.in

All API endpoints should be prefixed with this base URL.


Submit form data and file attachments to a public form.

POST /api/public/forms/{formSlug}/submit

Submits form data and optional file attachments to a public form using multipart/form-data encoding. This endpoint accepts form fields as individual FormData entries along with attached files.

ParameterTypeRequiredDescription
formSlugstringYesThe slug/identifier of the form

Requests must use multipart/form-data content type. Include all form fields and files as separate FormData entries.

const form = new FormData();
// Add text/number fields
form.append("fieldName", fieldValue);
form.append("numberField", numberValue);
// Add file fields
form.append("fileField", fileObject); // File object from input or blob
{
"success": true,
"message": "Form submitted successfully"
}
{
"error": "Field validation failed",
"details": {
"email": "Invalid email format"
}
}
{
"error": "Form not found"
}
FieldTypeDescription
successbooleanIndicates successful submission
messagestringSuccess or error message
errorstringError description (on error)
detailsobjectField-specific validation errors (optional)

StatusMeaningDescription
200OKForm submitted successfully
400Bad RequestValidation error or missing required field
404Not FoundForm does not exist
413Payload Too LargeFile size or total request exceeds limit
415Unsupported MediaInvalid content type
429Too Many RequestsRate limit exceeded
500Internal Server ErrorServer error occurred

Submit a simple form with text fields:

Terminal window
curl -X POST https://api.compitcom.in/api/public/forms/contact/submit \
-F "name=John Doe" \
-F "email=john@example.com" \
-F "message=Hello, this is a test message"

Submit a form with a single file attachment:

Terminal window
curl -X POST https://api.compitcom.in/api/public/forms/career-application/submit \
-F "fullName=Alice Johnson" \
-F "email=alice@example.com" \
-F "position=Software Engineer" \
-F "phoneNumber=+1-555-0123" \
-F "availabilityToJoin=2026-03-01" \
-F "expectedSalary=120000" \
-F "resume=@/path/to/resume.pdf"

Submit a form with multiple file attachments:

Terminal window
curl -X POST https://api.compitcom.in/api/public/forms/career-application/submit \
-F "fullName=Bob Smith" \
-F "email=bob@example.com" \
-F "position=Product Manager" \
-F "phoneNumber=+1-555-0124" \
-F "availabilityToJoin=2026-04-15" \
-F "expectedSalary=130000" \
-F "linkedinProfile=https://linkedin.com/in/bobsmith" \
-F "additionalNotes=Interested in remote positions" \
-F "resume=@/path/to/resume.pdf" \
-F "coverLetter=@/path/to/cover-letter.pdf"

Complete example using JavaScript Fetch API:

async function submitCareerApplication(formData) {
const form = new FormData();
// Add text fields
form.append("fullName", formData.fullName);
form.append("email", formData.email);
form.append("expectedSalary", formData.expectedSalary);
// Add optional fields
if (formData.linkedinProfile) {
form.append("linkedinProfile", formData.linkedinProfile);
}
form.append("resume", formData.resume);
try {
const response = await fetch(
"https://api.compitcom.in/api/public/forms/career-application/submit",
{
method: "POST",
body: form,
},
);
if (!response.ok) {
const error = await response.json();
throw new Error(
error.message || `HTTP error! status: ${response.status}`,
);
}
const result = await response.json();
console.log("Form submitted successfully:", result);
return result;
} catch (error) {
console.error("Submission failed:", error);
throw error;
}
}
// Usage
const formData = {
fullName: "Alice Johnson",
email: "alice@example.com",
expectedSalary: 120000,
linkedinProfile: "https://linkedin.com/in/alicejohnson",
resume: fileInputElement.files[0],
};
submitCareerApplication(formData);