Skip to content

Forms

Contentrain Studio lets you accept public form submissions for your collection models. Visitors submit data through a public API endpoint, and your team reviews, approves, or rejects submissions before they become content entries.

Availability

Core forms — public submit/config endpoints, the submission review queue, CAPTCHA, and auto-approve — work in every deployment, including the self-hosted Community Edition (the forms.enabled feature is not Enterprise-gated). A few extras are gated:

  • Webhook notifications on submission — Enterprise Edition (forms.webhook_notification).
  • File upload in forms — Enterprise Edition and on the roadmap (not yet available).
  • Spam filter — Enterprise Edition and on the roadmap (not yet available).
  • Email notifications — on the roadmap (not yet available).

How Forms Work

Public Form → Submit API → Submission Queue → Review → Content Entry
  1. You enable forms on a collection model and configure validation rules
  2. A public API endpoint is generated for that model
  3. External forms (your website, app, etc.) POST data to the endpoint
  4. Submissions land in a review queue with pending status
  5. Your team approves, rejects, or marks submissions as spam
  6. Approved submissions can be converted to content entries

Enabling Forms on a Model

To enable forms for a collection model:

  1. Open the model in the content panel
  2. Navigate to the model's form configuration section
  3. Toggle Enable form submissions
  4. Configure validation rules, field mapping, and submission limits

The Form tab: enable form submissions, mark the form public, and choose which fields are exposed

TIP

Only collection models support form submissions. Singletons, documents, and dictionaries cannot accept external submissions.

Public Form API

Once enabled, each model gets a public submission endpoint:

POST /api/forms/v1/{projectId}/{modelId}/submit

Request Format

json
{
  "data": {
    "name": "Jane Smith",
    "email": "[email protected]",
    "message": "I'd like to learn more about your product."
  },
  "locale": "en"
}

Response

json
{
  "id": "submission-uuid",
  "status": "pending",
  "created_at": "2026-04-02T10:30:00.000Z"
}

Configuration Endpoint

You can fetch the form configuration (field definitions, validation rules) from the public API:

GET /api/forms/v1/{projectId}/{modelId}/config

This is useful for dynamically building forms on your frontend based on the model schema.

Submission Management

Viewing Submissions

Navigate to the form submissions view by selecting a form-enabled model and opening its submissions tab. The list shows:

  • Submission data
  • Status badge (pending, approved, rejected, spam)
  • Source IP address
  • User agent
  • Referrer URL
  • Locale
  • Submission date

The Submissions tab: filter by status (All / Pending / Approved / Rejected / Spam), each submission showing a status badge

Submission Statuses

StatusDescription
PendingNew submission awaiting review
ApprovedReviewed and accepted
RejectedReviewed and declined
SpamMarked as spam

Reviewing a Submission

Click any submission to open the detail modal:

  1. Review all submitted field data
  2. Choose an action:
    • Approve — Mark as approved (optionally convert to content entry)
    • Reject — Decline the submission
    • Spam — Flag as spam
    • Delete — Permanently remove the submission

Bulk Actions

Select multiple submissions using checkboxes and perform bulk actions:

  • Approve all — Approve selected submissions
  • Reject all — Reject selected submissions
  • Mark as spam — Flag selected as spam
  • Delete all — Permanently remove selected submissions

Filtering and Sorting

Filter submissions by:

  • Status — pending, approved, rejected, spam
  • Sort order — newest first or oldest first

Pagination is available for large submission volumes.

Converting Submissions to Content

When you approve a submission, you can optionally convert it into a content entry:

  1. Approve the submission
  2. The submitted data is mapped to the model's field schema
  3. A new content entry is created on a review branch
  4. The entry goes through the standard branch review workflow

The submission's entry_id field is populated with the newly created content entry ID, linking the submission to its resulting content.

Form Configuration

The form configuration section lets you control:

SettingDescription
EnabledToggle form submissions on/off
Field mappingMap form fields to model fields
Required fieldsWhich fields are required in submissions
CaptchaEnable CAPTCHA protection (Cloudflare Turnstile, Starter+)
Auto-approveAutomatically approve submissions (Starter+)
NotificationsSend email notifications on new submissions (roadmap — not yet available)
Webhook notificationTrigger a webhook on new submissions (Enterprise Edition)
Spam filterAI-powered spam detection (Enterprise Edition, roadmap — not yet available)

Security

Form submissions include metadata for security review:

  • Source IP — The IP address of the submitter
  • User Agent — The browser or client identifier
  • Referrer — The referring page URL

WARNING

The public form API is rate-limited to prevent abuse. Excessive submissions from a single IP will be throttled.

Plan Limits

FeatureFreeStarterProEnterprise
Form-enabled models0115Unlimited
Submissions/month01003,000Unlimited
File upload in formsNoYesYesYes
CAPTCHANoYesYesYes
Auto-approveNoYesYesYes
Spam filterNoNoYesYes
Webhook notificationNoYesYesYes

The CAPTCHA and Auto-approve columns reflect features that ship today. Webhook notification requires the Enterprise Edition. File upload and the Spam filter are Enterprise-Edition roadmap features and are not yet available.

Next Steps

Released under the AGPL-3.0 License.