Session Mapping
a session ingest creates or updates a session in an event from a json payload — usually a webhook from your agenda or scheduling system sessions support a lot of optional fields, but you only need a handful to get going this article starts with the smallest useful mapping, then shows the extras you can add later how it works a field map is a list of rules each rule reads a value from your payload (keymatch) and writes it to a jomablue session field (type) point each keymatch at wherever the value lives in your own payload, using dot notation (e g session starttime) sessions are matched by resource id first, then by organisation uid if neither matches an existing session, a new one is created new sessions must have a name anything in the payload that no rule references is ignored start simple this is a complete, working mapping — an identifier, a name, when and where the session runs, how many people it holds, and whether it's live \[ { "type" "resource id", "keymatch" "resource id" }, { "type" "organisation uid", "keymatch" "organisation uid" }, { "type" "name", "keymatch" "name" }, { "type" "description", "keymatch" "description" }, { "type" "start time", "keymatch" "start time" }, { "type" "finish time", "keymatch" "finish time" }, { "type" "location resource id", "keymatch" "location resource id" }, { "type" "capacity", "keymatch" "capacity" }, { "type" "active", "keymatch" "active" } ] the core fields resource id — the session's internal id, and the primary way sessions are matched accepts a plain integer or a formatted string like app name/session/123 (the trailing number is used) organisation uid — your own identifier for the session used for matching when there's no resource id, and stored on the session either way name — the session title required to create a new session description — the session description html is supported start time / finish time — when the session runs accepts mysql datetime (2026 04 01 09 00 00, treated as utc) or iso 8601 (2026 04 01t09 00 00z, 2026 04 01t19 00 00+10 00) offsets are converted to utc location resource id — the location's internal id (plain integer or app name/location/123) the location must already exist (if your payload carries a location uid or name instead of an id, see “locations by uid” below ) capacity — the maximum number of attendees a non negative integer; numeric strings are accepted active — whether the session is visible in the community accepts true, 1, "yes", "true", "1" (case insensitive); anything else is false new sessions default to active if you don't map this worked example payload { "resource id" "agenda/session/482", "organisation uid" "session 482", "name" "building on the platform api", "description" "\<p>a hands on walkthrough for developers \</p>", "start time" "2026 04 01t09 00 00+10 00", "finish time" "2026 04 01t10 30 00+10 00", "location resource id" 17, "capacity" 120, "active" true } result session 482 (matched by resource id, else created) titled "building on the platform api", running 1 apr 2026 from 23 00 to 00 30 utc (converted from +10 00), in location 17, capacity 120, visible in the community send the same resource id again with new values and the session is updated in place adding more fields everything below is optional — add only what you need the full mapping with every field is in session json each row is a { "type" , "keymatch" } rule, same as above scheduling & setup type what it sets program uid identifier for the program the session belongs to (stored, not used for matching) code short session code, max 16 characters skill level recommended skill level sort order display order entry buffer minutes before start that check in opens access & visibility (booleans accept true/1/"yes" etc ) type what it sets restricted whether the session is restricted restricted allow override whether the restriction can be overridden (only when restricted) visible in api visible in the public agenda api (only when that api is enabled) allow survey whether the session allows surveys categorisation type what it sets categories category ids — a pipe separated string (`"1 traits trait ids, same format as categories check in messaging & feed card type what it sets email content id / sms content id email / sms template sent on check in card link label / card link type / card link url feed card link shown on check in (card link type is external or internal) card content feed card html content card allow rating / card allow comment whether the card allows star / text ratings card rating message the rating prompt message related content type what it sets related content buffer minutes after the session that related content can be requested related email content id / related sms content id email / sms template sent on related content request related card content id card shown on related content request community / app display type what it sets eventapp promo text promotion text for the session eventapp promo logo promotional image eventapp background background config — a json object of css background properties (invalid values are ignored) locations by uid if your source sends a location uid and name rather than an internal id, use location organisation uid instead of location resource id it creates the location on the fly if it doesn't exist, and needs two paths { "type" "location organisation uid", "keymatch" "location externalid", "locationnamekeymatch" "location name" } if both location rules are configured, location resource id wins validation you can validate the payload before it's mapped each rule targets a payload key and applies one or more checks separated by |; a payload that fails is rejected before anything is created { "resource id" "required without\ organisation uid", "organisation uid" "required without\ resource id|string", "name" "required|string", "code" "nullable|string|max 16", "start time" "nullable|date", "finish time" "nullable|date" } required without — at least one identifier is needed resource id is required only when organisation uid is absent, and vice versa required — name must be present to create a session nullable — checked only when present code is capped at 16 characters, and the times must be valid dates match these keys to your own payload paths