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.
Base URL
Section titled “Base URL”https://api.compitcom.inAll API endpoints should be prefixed with this base URL.
Submit Public Form
Section titled “Submit Public Form”Submit form data and file attachments to a public form.
Endpoint
Section titled “Endpoint”POST /api/public/forms/{formSlug}/submitDescription
Section titled “Description”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.
Path Parameters
Section titled “Path Parameters”| Parameter | Type | Required | Description |
|---|---|---|---|
formSlug | string | Yes | The slug/identifier of the form |
Request Body
Section titled “Request Body”Requests must use multipart/form-data content type. Include all form fields and files as separate FormData entries.
Request Format
Section titled “Request Format”const form = new FormData();
// Add text/number fieldsform.append("fieldName", fieldValue);form.append("numberField", numberValue);
// Add file fieldsform.append("fileField", fileObject); // File object from input or blobResponse Schema
Section titled “Response Schema”Success Response (200 OK)
Section titled “Success Response (200 OK)”{ "success": true, "message": "Form submitted successfully"}Error Response (400 Bad Request)
Section titled “Error Response (400 Bad Request)”{ "error": "Field validation failed", "details": { "email": "Invalid email format" }}Error Response (404 Not Found)
Section titled “Error Response (404 Not Found)”{ "error": "Form not found"}Response Field Descriptions
Section titled “Response Field Descriptions”| Field | Type | Description |
|---|---|---|
success | boolean | Indicates successful submission |
message | string | Success or error message |
error | string | Error description (on error) |
details | object | Field-specific validation errors (optional) |
HTTP Status Codes
Section titled “HTTP Status Codes”| Status | Meaning | Description |
|---|---|---|
| 200 | OK | Form submitted successfully |
| 400 | Bad Request | Validation error or missing required field |
| 404 | Not Found | Form does not exist |
| 413 | Payload Too Large | File size or total request exceeds limit |
| 415 | Unsupported Media | Invalid content type |
| 429 | Too Many Requests | Rate limit exceeded |
| 500 | Internal Server Error | Server error occurred |
Request Examples
Section titled “Request Examples”Basic Form Submission
Section titled “Basic Form Submission”Submit a simple form with text fields:
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"Form with File Attachment
Section titled “Form with File Attachment”Submit a form with a single file attachment:
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"Form with Multiple Files
Section titled “Form with Multiple Files”Submit a form with multiple file attachments:
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"JavaScript/Fetch Example
Section titled “JavaScript/Fetch Example”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; }}
// Usageconst formData = { fullName: "Alice Johnson", email: "alice@example.com", expectedSalary: 120000, linkedinProfile: "https://linkedin.com/in/alicejohnson", resume: fileInputElement.files[0],};
submitCareerApplication(formData);