Forms & Data Collection

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 and dates 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.

components/contact-form.tsxTSX
'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>
  );
}

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?

Public submissions are rate limited, but there is no CAPTCHA. For a spam check, submit from your own server instead of the browser.

Where do submissions go?

Each one is stored as a record in the form’s collection, which you can read over the collections API.

Put a form on your site today

Build the form on a collection in the console, point your form at the submit endpoint, and add a workflow for the confirmation email.

7-day free trialNo credit card requiredCancel anytime