Skip to content
Core API
Esc
↑↓navigate↵open⌘Jpreview
On this page

Content sessions

Create and update content sessions with complete curl request examples.

Build a request

Example data only. No request is sent.

POST
Choose the destination IDs
Start with these fields

Must identify a content or external-content track in the event.

Converted through the event's time-zone compatibility logic.

Minutes. With start_time, it supplies the model-required end time.

Session title.

Add optional fields (31)

Finds or creates an event content track when track_id is absent.

Parent session reference.

Session subtitle.

DraftJS object with a blocks array and entityMap. Plain text and HTML strings are rejected. Use the description field in the request builder to generate the object.

External integration identifier.

Stream URL.

Highlight ordering.

Display setting.

Session orientation.

Enables session RSVP behavior.

Returned as uses-registrant-list.

Ticket QR check-in setting.

RSVP registration state.

Capacity.

Color value.

Rating setting.

Cancellation setting.

Reserved capacity.

Section label.

Section label.

Map URL.

Main sponsor; must belong to the event.

Full replacement; entries use sponsor_id and optional label. Array order sets position.

Full replacement; entries use speaker_id and optional role. Array order sets position.

Entries use key plus value or values.

Gating lists; all IDs must belong to the event.

Rating gating lists.

Child sessions.

Send tag names as strings. Core rejects ID objects because the input allows scalar array items only. [] clears tags and locations.

Location name. Brella finds or creates an event location tag. Blank clears locations.

Base64 data URI. Blank on PATCH removes the current image.

Write a session description

Converted into the DraftJS JSON object required by content. Leave blank to use the optional content input instead.

Use the API address and token from your environment. Set up authentication.

curl --fail-with-body --silent --show-error --globoff --max-time 30 --request POST \
  --url "${BRELLA_API_BASE_URL}"'/api/core/organizations/123/events/456/content-sessions' \
  --header "Accept: application/vnd.brella.v4+json" \
  --header "Brella-API-Access-Token: ${BRELLA_API_ACCESS_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-raw '{
  "title": "Opening keynote",
  "track_id": 501,
  "start_time": "2026-09-03T09:00:00Z",
  "duration": 60
}'
201 CreatedIllustrative response
{
  "data": {
    "id": "1201",
    "type": "content-session"
  }
}

The token scope determines returned fields. This selector illustrates that configuration; it does not change your token or the request.

Collection path: events/{event_id}/content-sessions

POST a content session

View the complete cURL example
curl --fail-with-body --silent --show-error --globoff --max-time 30 --request POST \
  --url "${BRELLA_API_BASE_URL}"'/api/core/organizations/123/events/456/content-sessions' \
  --header "Accept: application/vnd.brella.v4+json" \
  --header "Brella-API-Access-Token: ${BRELLA_API_ACCESS_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-raw '{
  "title": "Opening keynote",
  "track_id": 501,
  "start_time": "2026-09-03T09:00:00Z",
  "duration": 60,
  "content": {
    "blocks": [
      {
        "key": "intro",
        "text": "Opening remarks and event overview.",
        "type": "unstyled",
        "depth": 0,
        "inlineStyleRanges": [],
        "entityRanges": [],
        "data": {}
      }
    ],
    "entityMap": {}
  },
  "uses_rsvp": true,
  "attendance_registration_open": true,
  "attendance_cap": 500,
  "sponsor_id": 103705,
  "speaker_assignments": [
    {
      "speaker_id": 801,
      "role": "Speaker"
    }
  ],
  "session_sponsors": [
    {
      "sponsor_id": 103705,
      "label": "Presented by"
    }
  ],
  "tags": [
    "Keynote",
    "Featured"
  ],
  "location": "Main stage",
  "registrant_list_ids": [
    401
  ]
}'

The response type is content-session. Useful write-response fields include track_id, start_time, end_time, duration, title, uses_rsvp, and updated_at.

PATCH a content session

Nested assignment arrays are full replacements when supplied. This example changes the schedule and replaces the speaker assignments.

View the complete cURL example
curl --fail-with-body --silent --show-error --globoff --max-time 30 --request PATCH \
  --url "${BRELLA_API_BASE_URL}"'/api/core/organizations/123/events/456/content-sessions/5501' \
  --header "Accept: application/vnd.brella.v4+json" \
  --header "Brella-API-Access-Token: ${BRELLA_API_ACCESS_TOKEN}" \
  --header "Content-Type: application/json" \
  --data-raw '{
  "start_time": "2026-09-03T09:15:00Z",
  "duration": 45,
  "speaker_assignments": [
    {
      "speaker_id": 801,
      "role": "Moderator"
    },
    {
      "speaker_id": 802,
      "role": "Speaker"
    }
  ]
}'

Input reference

37 inputs. Expand a field for its request type and update behavior. These are the example request keys; your administrator can configure aliases.

track_idScalar ID
POST
Optional if a suitable default exists
PATCH
Optional

Must identify a content or external-content track in the event.

track_nameScalar string
POST
Optional
PATCH
Optional

Finds or creates an event content track when track_id is absent.

parent_timeslot_idScalar ID or `null`
POST
Optional
PATCH
Optional

Parent session reference.

start_timeISO 8601 string
POST
Required for a valid create
PATCH
Optional

Converted through the event's time-zone compatibility logic.

durationScalar number
POST
Required for a valid create
PATCH
Optional

Minutes. With start_time, it supplies the model-required end time.

end_timeISO 8601 string
POST
Exposed but currently discarded
PATCH
Exposed but currently discarded

The downstream timeslot parameter allowlist currently strips this field; use duration.

titleScalar string
POST
Optional at wrapper level
PATCH
Optional

Session title.

subtitleScalar string or `null`
POST
Optional
PATCH
Optional

Session subtitle.

contentJSON object
POST
Optional
PATCH
Optional

DraftJS object with a blocks array and entityMap. Plain text and HTML strings are rejected. Use the description field in the request builder to generate the object.

external_idScalar string or `null`
POST
Optional
PATCH
Optional

External integration identifier.

stream_linkScalar string or `null`
POST
Optional
PATCH
Optional

Stream URL.

uses_chatJSON boolean
POST
Exposed but discarded
PATCH
Exposed but discarded

The downstream timeslot parameter allowlist strips this input. Do not rely on it to configure session chat.

highlight_positionScalar number or `null`
POST
Optional
PATCH
Optional

Highlight ordering.

show_sponsor_logo_in_scheduleJSON boolean
POST
Optional
PATCH
Optional

Display setting.

virtual_orientedJSON boolean
POST
Optional
PATCH
Optional

Session orientation.

uses_rsvpJSON boolean
POST
Optional
PATCH
Optional

Enables session RSVP behavior.

uses_attendee_listJSON boolean
POST
Optional
PATCH
Optional

Returned as uses-registrant-list.

uses_ticket_qr_codeJSON boolean
POST
Optional
PATCH
Optional

Ticket QR check-in setting.

attendance_registration_openJSON boolean
POST
Optional
PATCH
Optional

RSVP registration state.

attendance_capScalar number or `null`
POST
Optional
PATCH
Optional

Capacity.

colorScalar string or `null`
POST
Optional
PATCH
Optional

Color value.

uses_ratingsJSON boolean
POST
Optional
PATCH
Optional

Rating setting.

uses_rsvp_cancellationJSON boolean
POST
Optional
PATCH
Optional

Cancellation setting.

organizer_reserved_attendance_slotsScalar number
POST
Optional
PATCH
Optional

Reserved capacity.

session_sponsors_section_titleScalar string or `null`
POST
Optional
PATCH
Optional

Section label.

child_sessions_section_titleScalar string or `null`
POST
Optional
PATCH
Optional

Section label.

map_linkScalar string or `null`
POST
Optional
PATCH
Optional

Map URL.

sponsor_idScalar ID or `null`
POST
Optional
PATCH
Optional

Main sponsor; must belong to the event.

session_sponsorsArray of objects
POST
Optional
PATCH
Optional

Full replacement; entries use sponsor_id and optional label. Array order sets position.

speaker_assignmentsArray of objects
POST
Optional
PATCH
Optional

Full replacement; entries use speaker_id and optional role. Array order sets position.

custom_fields_attributesArray of objects
POST
Optional
PATCH
Optional

Entries use key plus value or values.

registrant_list_idsArray of scalar IDs
POST
Optional
PATCH
Optional

Gating lists; all IDs must belong to the event.

rating_registrant_list_idsArray of scalar IDs
POST
Optional
PATCH
Optional

Rating gating lists.

child_timeslot_idsArray of scalar IDs
POST
Optional
PATCH
Optional

Child sessions.

tagsArray of strings
POST
Optional
PATCH
Optional

Send tag names as strings. Core rejects ID objects because the input allows scalar array items only. [] clears tags and locations.

locationScalar string or `null`
POST
Optional
PATCH
Optional

Location name. Brella finds or creates an event location tag. Blank clears locations.

cover_imageRaw string
POST
Optional
PATCH
Optional

Base64 data URI. Blank on PATCH removes the current image.

Understand collection updates

What does this PATCH change?

Compare omitted, replaced and cleared collections. These are conceptual field values, not a live API response.

Before
{
  "speaker_assignments": [
    {
      "speaker_id": 801,
      "role": "Moderator"
    },
    {
      "speaker_id": 802,
      "role": "Speaker"
    }
  ]
}
PATCH body
{}
After
{
  "speaker_assignments": [
    {
      "speaker_id": 801,
      "role": "Moderator"
    },
    {
      "speaker_id": 802,
      "role": "Speaker"
    }
  ]
}

Omitting the field keeps the existing collection.

Send every speaker that should remain. Array order determines the assignment position.

Last updated on August 25, 2026