Jambo

Developer docs

Forms & embeds

Every published form gets a public hosted URL and an iframe snippet. Submissions flow through the same API whether you use our renderer or build your own.

Hosted form URL

Once a form is published, it is available at a stable public path. Only the latest published version is served — draft versions never leak to live traffic.

URL pattern

https://jambo.contact/f/{orgId}/{slug}

# Embed mode (stripped chrome for iframes)
https://jambo.contact/f/{orgId}/{slug}?embed=1

Copy the hosted URL and iframe snippet from the form builder footer after publishing. For a step-by-step walkthrough, see the embed guide.

Iframe snippet

Example

<iframe
  src="https://jambo.contact/f/{orgId}/lead-capture?embed=1"
  width="100%"
  height="760"
  frameborder="0"
  style="border:0;overflow:hidden"
  loading="lazy"
  title="Jambo Contact form"
></iframe>

Public API endpoints

The hosted page loads form data and submits responses through the public API (no authentication). See the REST API reference for full schemas.

GET/api/public/forms/{orgId}/{slug}

Published form schema, branding, and custom CSS.

POST/api/submissions

Submit field values. Requires formId in the JSON body. CORS enabled for browsers.

POST/api/public/forms/{orgId}/{slug}/uploads/presign

Presigned upload URL for file fields on public forms.

Submit from your own front-end

Example submission

fetch("https://jambo.contact/api/submissions", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    formId: "550e8400-e29b-41d4-a716-446655440000",
    payload: {
      full_name: "Ada Lovelace",
      email: "[email protected]",
      message: "Hello from a custom form.",
    },
  }),
})

Field values go in payload, keyed by field key from the form spec. Use testMode: true only for builder preview flows — live traffic must use the published version without test mode. If the form has Turnstile bot protection enabled, include a turnstileToken.