๐Ÿ”Œ JSON API

CORS-enabled endpoints for fetching a single registration form or event as JSON. Useful when you want to build your own UI on top of EasyShul data — the same endpoints power the embed widget.

Code samples below use this value.

Get a single event

Response

{
  "ok": true,
  "data": {
    "_id": "69acff4de1f05800267057e6",
    "eventName": "Mercaz Shabbaton at Schechter",
    "date": "2026-04-17T00:00:00.000Z",
    "eventStartDate": "2026-03-08T00:00:00.000Z",
    "eventEndDate": "2026-04-07T03:30:00.000Z",
    "description": "<p>Come to camp...</p>",
    "active": true,
    "archived": false,
    "freeEvent": false,
    "eventDetails": {
      "eventType": "In-Person",
      "eventAddress": { "formattedAddress": "Camp Solomon Schechter, WA" },
      "contactInfo": { "firstName": "...", "email": "...", "showEmail": false },
      "infiniteCapacity": true
    },
    "eventDuration": { "key": "24 hours", "value": 1440 },
    "eventPricing": {
      "prices": [ /* tickets / variants */ ],
      "totalAmount": 9910
    }
  }
}

Get a single form

The response shape is the same as for events, but with form-specific field names: formName, formStartDate, formEndDate, formDetails, formPricing, freeForm, etc.

Try it from JavaScript

The endpoints set Access-Control-Allow-Origin: *, so you can call them directly from a browser without a proxy.

Errors

StatusWhen
404Organization key, event ID, or form ID not found
500Upstream EasyShul API error (see error field)

Errors return a JSON body of the shape { "ok": false, "error": "..." }.

Form template (field definitions)

Returns the form's field definitions used by the embed widget to render inline form fields:

{
  "ok": true,
  "data": {
    "freeForm": true,
    "fields": [
      { "id": "93EF...", "element": "TextInput", "label": "First Name", "required": true },
      { "id": "986A...", "element": "EmailInput", "label": "E-Mail", "required": true },
      { "id": "7BBD...", "element": "RadioButtons", "label": "Contact Method", "required": false,
        "options": [{ "text": "Email" }, { "text": "Phone" }] }
    ]
  }
}

Submit a free form

Only works for forms with no payment required (freeForm: true). Returns 400 for paid forms. On success:

{ "ok": true, "participantIds": ["69f97..."] }

Related