Content Sections
The rich content-section blocks used by sessions and sponsors.
Sessions and sponsors can carry a content collection (contentData) of ordered rich blocks, the same building blocks the console editor offers. Send it as an ordered array of { type, data } sections; the API assigns the order and stores it.
"contentData": [
{ "type": "title", "data": { "content": "About Us" } },
{ "type": "paragraph", "data": { "content": "[{\"insert\":\"We build things.\\n\"}]" } },
{ "type": "image", "data": { "content": "https://example.com/logo.png" } },
{ "type": "button", "data": { "content": { "buttonText": "Visit", "buttonUrl": "https://example.com" } } },
{ "type": "sponsor", "data": { "content": "<sponsorId>" } },
{ "type": "speaker", "data": { "speakerType": "Speakers", "speakerIds": ["<speakerId>"] } }
]
Section types
type |
data shape |
Notes |
|---|---|---|
title |
{ "content": "<heading text>" } |
Plain-text heading |
paragraph |
{ "content": "<Delta JSON string>" } |
Rich text - see Rich Text Format. Plain text is accepted too. |
image |
{ "content": "<image url>" } |
|
button |
{ "content": { "buttonText": "...", "buttonUrl": "..." } } |
|
sponsor |
{ "content": "<sponsorId>" } |
Reference to a sponsor in this event |
speaker |
{ "speakerType": "<label>", "speakerIds": ["<id>", ...] } |
References to speakers in this event |
References are validated
For sponsor and speaker sections, every id must reference a record in the same event that is not hidden or deleted. If any reference is missing, hidden, or deleted, the whole write is rejected with 400 and a details list naming the offending section and id - nothing is saved. An unpublished speaker or sponsor (Invited / unListed:true) can still be referenced - only deleted or hidden records are rejected.
For speaker sections you send only speakerIds (an array); the API looks up each speaker and stores the speakerList map ({ id: name }) with the names filled in for you, so the stored names always match the speaker records. speakerType is an optional label for the group (e.g. “Keynote”, “Panel”).
To feature speakers on a session, add speaker sections to its contentData - there is no separate speakers field to set.
What you get back
On read (getSessions / getSponsors), contentData comes back as an object keyed by position ("0", "1", and so on) rather than the array you sent:
"contentData": {
"0": { "type": "title", "data": { "content": "About Us" } },
"1": { "type": "speaker", "data": { "speakerType": "Speakers", "speakerList": { "<id>": "Jane Doe" } } }
}
Sending a new contentData replaces the whole collection, so removing a section from the array removes it from the record.