Collect
Headless API: render your own fields
A published form has a public JSON schema. The site can render native inputs and post answers. Browser origins are open for these two routes.
const form = await fetch(
'https://requestforms.io/api/public/forms/FORM_ID',
).then((response) => response.json())
await fetch('https://requestforms.io/api/forms/FORM_ID/responses', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
answers: { email: 'person@example.com' },
metadata: { source: 'headless' },
}),
})The workspace package @request-forms/headless wraps those calls and maps simple question blocks to HTML input types. Use it for contact and lead forms. Keep the embed for payments, file uploads, signatures, captcha, and calculated fields.