Integrations
Send form submissions to your CRM, email platform, database, or any tool you use. Connect WorkForm with webhooks, API, or native integrations.
Integration Options
Send form submissions to any URL in real-time. Connect with any tool that accepts webhooks.
Full API access to create forms, fetch submissions, and manage everything programmatically.
Connect with 5,000+ apps through Zapier without writing code.
Get instant email notifications for new submissions. Available on all plans.
Embed Calendly or Cal.com booking widgets directly in your forms for appointment scheduling.
Accept secure payments directly in your forms. Sell products, collect donations, or charge for services with Stripe.
Webhooks
Webhooks send form submission data to any URL in real-time. Perfect for connecting with CRMs, databases, Slack, custom applications, and more.
User Submits Form
When someone completes your form, their submission is saved in WorkForm.
Webhook Triggered
WorkForm immediately sends a POST request to your webhook URL with the submission data.
Your System Receives Data
Your endpoint receives the JSON payload and processes it however you need.
Retry on Failure
If your endpoint doesn't respond with 200 OK, WorkForm retries up to 3 times.
1. Add Webhook URL
Go to Form Settings → Integrations → Add Webhook. Enter your endpoint URL.
2. Choose Events
Select which events should trigger the webhook:
3. Add Authentication (Optional)
Secure your webhook with custom headers or API keys:
4. Test the Webhook
Click "Test Webhook" to send a sample payload and verify your endpoint receives it correctly.
When a form is submitted, WorkForm sends this payload to your webhook URL:
{
"event": "form.submitted",
"timestamp": "2026-01-01T14:32:10.000Z",
"webhookId": "wh_abc123",
"data": {
"formId": "f_abc123",
"formName": "Lead Qualification Form",
"responseId": "resp_xyz789",
"submittedAt": "2026-01-01T14:32:10.000Z",
"responses": {
"email_q1": "sarah@company.com",
"company_q2": "Acme Corp",
"budget_q3": "$10k-$25k"
},
"questionMetadata": {
"email_q1": {
"id": "email_q1",
"title": "Email Address",
"description": "Your work email",
"type": "email"
},
"company_q2": {
"id": "company_q2",
"title": "Company Name",
"description": "",
"type": "short-text"
},
"budget_q3": {
"id": "budget_q3",
"title": "Budget Range",
"description": "",
"type": "multiple-choice"
}
},
"deviceType": "Desktop",
"browser": {
"name": "Chrome",
"version": "120.0.0",
"os": "macOS 14.0"
},
"completionTime": 120
}
}- • Respond with 200 OK quickly (within 5 seconds)
- • Process data asynchronously if it takes time
- • Validate the payload signature to ensure it's from WorkForm
- • Handle duplicate submissions gracefully (use responseId for idempotency)
- • Log webhook failures for debugging
- • Use HTTPS endpoints for security
REST API
Full programmatic access to WorkForm. Create forms, fetch submissions, manage users, and more through our RESTful API.
1. Generate API Key
Go to Workspace Settings → API Keys → Create New Key. Select required permissions and store it securely.
2. Make Your First Request
Include your API key in the request headers:
curl https://app.getworkform.com/api/v1/forms \ -H "X-API-Key: workform_your_api_key_here" \ -H "Content-Type: application/json"
3. Handle Rate Limits
Professional: 100 requests/minute | Business: 500 requests/minute
Get All Forms
GET /api/v1/forms
Response:
{
"success": true,
"data": [
{
"id": "507f1f77bcf86cd799439011",
"publicId": "f_abc123",
"title": "Contact Form",
"description": "Get in touch with us",
"type": "standard-form",
"formStatus": {
"status": "published",
"isPublic": true
},
"createdAt": "2024-01-01T00:00:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 50,
"total": 45,
"totalPages": 1
}
}Get Form Responses
GET /api/v1/forms/f_abc123/responses?status=completed
Response:
{
"success": true,
"data": {
"form": {
"id": "f_abc123",
"title": "Contact Form",
"type": "standard-form"
},
"responses": [
{
"id": "507f1f77bcf86cd799439011",
"responseId": "resp_xyz789",
"formId": "f_abc123",
"formTitle": "Contact Form",
"responses": [
{
"questionId": "email_q1",
"question": {
"id": "email_q1",
"title": "Email Address",
"description": "Your work email",
"type": "email"
},
"answer": "sarah@company.com"
}
],
"status": "completed",
"submittedAt": "2026-01-01T14:32:10.000Z",
"deviceType": "Desktop",
"completionTime": 120
}
],
"pagination": {
"page": 1,
"limit": 50,
"total": 42,
"totalPages": 1
}
}
}Create a Form
POST /api/v1/forms
Body:
{
"formName": "New Lead Form",
"type": "standard-form",
"description": "Capture new leads",
"standardFormData": [
{
"questions": [
{
"id": "email_q1",
"type": "email",
"title": "Email Address",
"required": true
},
{
"id": "company_q2",
"type": "short-text",
"title": "Company Name",
"required": true
}
]
}
]
}
Response:
{
"success": true,
"message": "Form created successfully.",
"data": {
"publicId": "f_new123",
"formName": "New Lead Form",
"type": "standard-form"
}
}Complete API reference with all endpoints, authentication, permissions, and examples:
View API Reference →Popular Integrations
Common use cases and tools you can connect with WorkForm.
Example: Slack Integration
Get instant Slack notifications when someone submits your form.
Create Slack Incoming Webhook
In Slack, go to Apps → Incoming Webhooks → Add to Slack. Choose a channel and copy the webhook URL.
Add Webhook to WorkForm
In your form settings, add the Slack webhook URL:
Customize Message Format (Optional)
Use our message builder to format how submissions appear in Slack:
🎉 New Lead!
Email: {{email}}
Company: {{company}}
Budget: {{budget}}Test & Enable
Send a test submission to verify it appears in Slack, then enable the integration.