Collect form submissions, without writing the endpoint.
A form is a collection schema with a public endpoint: you define the fields in the console, and any page can submit to it without an API token. Each submission is stored as a record and fires form.submitted, so a workflow can send the confirmation email or post to Slack.
Your app is an organization in BuildBase. Your users sign in and work inside workspaces - one per team or customer.
You set up
In the console and the SDK
- The form's fields, in the console
- Your own form design, or the hosted form page
- What happens next, like a confirmation email
Your users get
Inside their workspace
- A form that works on any page, with no login needed
- Clear errors when a field is missing or wrong
- A reply or follow-up the moment they submit
A form backend you do not have to build
Storage, validation and the submit event are already there. You write the markup, or skip it and share the hosted page.
Fields in the Console
Define the fields and which ones are required once. Your form and the stored answers follow them.
Submit From Any Page
Anyone can submit, with no login and no API key, so it works on your marketing site as well as your app.
Your Design or Ours
Build the form with your own components, or share the hosted form page the console links to.
Checked Before Saved
Required fields, numbers, emails, links, dates and uploaded files are checked, and every problem comes back at once.
Act on Every Submission
Each submission can start a workflow, to send a confirmation email or post to Slack.
Answers in the Console
See every submission in a table, with a chart of how many arrive over time.
One POST, no token
The body is the data, keyed by field slug. A failed check returns every error at once.
'use client';
// Forms are plain HTTP: no SDK import needed.
const BASE = 'https://api.console.buildbase.app/api/forms/public';
export function ContactForm({ orgId, formId }: { orgId: string; formId: string }) {
async function onSubmit(event: React.FormEvent<HTMLFormElement>) {
event.preventDefault();
const data = Object.fromEntries(new FormData(event.currentTarget).entries());
const res = await fetch(`${BASE}/${orgId}/${formId}/submit`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data),
});
if (!res.ok) {
const body = await res.json();
alert((body.errors ?? [body.message]).join('\n'));
}
}
return (
<form onSubmit={onSubmit}>
<input name="email" type="email" required />
<textarea name="message" />
<button type="submit">Send</button>
</form>
);
}Works well with
Other modules for automation.
Read more in the docs
Setup guides and reference for Forms & Data Collection.
Overview
Forms on a collection schema, with a public submit endpoint and workflow triggers on submission.
Spam protection
Stop bots and spam on public forms with a captcha, content rules, a review queue and daily limits, without writing code.
Custom forms
Fetch the field schema and render your own form UI against the public endpoints.
Collections
Define a custom data schema, publish it as a version, and store records against it.
Triggers and actions
The full catalog of workflow triggers, actions, and conditions with their inputs and outputs.
Admin API
Authenticate with an org API token and call the REST API behind the console modules.
Frequently Asked Questions
What people ask about Forms.
Do my users see this?
Yes. Anyone can fill in a form on any page, with no login.
Do I need the SDK?
No. Forms are plain HTTP: fetch the fields, post the answers. There is no SDK component for forms.
How do I stop spam?
Every form has a hidden bot trap, a duplicate guard and rate limits. Open a form’s Protect button to require a captcha, limit links, block words or throwaway emails, and cap submissions per day.
Does the captcha cost anything?
No. The default, Managed by BuildBase, is free with nothing to set up, and so is the built-in check. You can use your own Cloudflare Turnstile, hCaptcha or reCAPTCHA keys instead; only reCAPTCHA bills past 10,000 checks a month.
What happens to a submission that breaks a rule?
By default it is held: saved, but no webhook, workflow or email runs until you approve it on the form’s page. You can choose to reject it instead.
Can I put a form on my own website?
Yes. Copy the embed code from the form’s page. The captcha and rules come with it, so there is nothing else to install.
Where do submissions go?
Each one is stored as a record in the form’s collection, which you can read over the collections API.