Features

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

Webhooks

Send form submissions to any URL in real-time. Connect with any tool that accepts webhooks.

Professional+
REST API

Full API access to create forms, fetch submissions, and manage everything programmatically.

Professional+
Zapier

Connect with 5,000+ apps through Zapier without writing code.

Beta Access
View Docs →
Email Notifications

Get instant email notifications for new submissions. Available on all plans.

All Plans
Scheduling
New

Embed Calendly or Cal.com booking widgets directly in your forms for appointment scheduling.

All Plans
View Docs →
Payment (Stripe)
Popular

Accept secure payments directly in your forms. Sell products, collect donations, or charge for services with Stripe.

Professional+
View Docs →

Webhooks

Webhooks send form submission data to any URL in real-time. Perfect for connecting with CRMs, databases, Slack, custom applications, and more.

How Webhooks Work
1

User Submits Form

When someone completes your form, their submission is saved in WorkForm.

2

Webhook Triggered

WorkForm immediately sends a POST request to your webhook URL with the submission data.

3

Your System Receives Data

Your endpoint receives the JSON payload and processes it however you need.

4

Retry on Failure

If your endpoint doesn't respond with 200 OK, WorkForm retries up to 3 times.

Setting Up a Webhook

1. Add Webhook URL

Go to Form Settings → Integrations → Add Webhook. Enter your endpoint URL.

https://your-app.com/api/workform-webhook

2. Choose Events

Select which events should trigger the webhook:

form.submitted: When a form is successfully completed
form.response.updated: When a response is modified
form.published: When a form is published
form.unpublished: When a form is unpublished

3. Add Authentication (Optional)

Secure your webhook with custom headers or API keys:

Authorization: Bearer your-secret-key
X-API-Key: abc123xyz

4. Test the Webhook

Click "Test Webhook" to send a sample payload and verify your endpoint receives it correctly.

Webhook Payload Example

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
  }
}
Webhook Best Practices
  • • 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.

API Capabilities
Create, update, and delete forms
Fetch all submissions with filtering
Get specific submission details
Export data programmatically
Manage analytics and insights
Bulk operations on submissions
Getting Started with the API

1. Generate API Key

Go to Workspace Settings → API Keys → Create New Key. Select required permissions and store it securely.

workform_sk_1a2b3c4d5e6f7g8h9i0j

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

Common API Examples

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"
  }
}
Full API Documentation

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.

CRM Systems
Automatically create leads and contacts
Salesforce: Create leads with form submissions
HubSpot: Add contacts and trigger workflows
Pipedrive: Create deals from qualified leads
Email Marketing
Add subscribers to lists and campaigns
Mailchimp: Add to audience and tag contacts
ConvertKit: Subscribe to sequences
ActiveCampaign: Trigger automations
Team Communication
Get instant notifications in your workspace
Slack: Post submissions to channels
Discord: Send to specific channels
Teams: Notify teams of new leads
Databases & Spreadsheets
Store submissions in your database
Google Sheets: Append rows automatically
Airtable: Create records in bases
PostgreSQL/MySQL: Direct database writes

Example: Slack Integration

Get instant Slack notifications when someone submits your form.

Setup Steps
1

Create Slack Incoming Webhook

In Slack, go to Apps → Incoming Webhooks → Add to Slack. Choose a channel and copy the webhook URL.

2

Add Webhook to WorkForm

In your form settings, add the Slack webhook URL:

https://hooks.slack.com/services/T00/B00/XXX
3

Customize Message Format (Optional)

Use our message builder to format how submissions appear in Slack:

🎉 New Lead!
Email: {{email}}
Company: {{company}}
Budget: {{budget}}
4

Test & Enable

Send a test submission to verify it appears in Slack, then enable the integration.

Integration Best Practices
Test thoroughly: Always test integrations with sample data before going live.
Monitor webhook logs: Check webhook delivery status in your dashboard regularly.
Use field mapping: Map form fields to your CRM/tool fields correctly.
Handle failures gracefully: Set up alerts for failed webhook deliveries.
Secure your endpoints: Use authentication and HTTPS for all integrations.
Document your setup: Keep notes on how integrations are configured for team reference.