Skip to content

Bulk session operations

POST/v1/event/{eventId}/sessions/bulk

US Region: https://public-api.sessionboard.com · EU Region: https://public-api-eu.sessionboard.com

Create, update, or delete multiple sessions in a single request (max 100 operations). Requires the write:sessions scope.

Request example

Terminal window
curl --request POST \
--url 'https://public-api.sessionboard.com/v1/event/{eventId}/sessions/bulk' \
--header 'x-access-token: <api-token>' \
--header 'Content-Type: application/json' \
--data '{
"operations": [
{
"action": "create",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"data": {}
}
]
}'

Try it

Authorization

Your token stays in this page. It is sent only to the region above and is never saved; it is gone when you leave or reload the page.

Path parameters
Body application/json
POST

Authorizations

  • x-access-tokenstringheader

    Organization API token. Generate from Organization Settings → API Tokens.

  • AuthorizationBearer <token>headeror

    OAuth 2.1 access token. Obtained via the OAuth PKCE flow at /oauth/token.

Send one of these. See Authentication.

Path parameters

  • eventIdintegerpathrequired

    The event ID.

Request body

application/jsonrequired

Request body for bulk create/update/delete operations.

Operations are applied in request order, each in its own transaction, and results[i] describes operations[i]. A failed operation is rolled back whole and does not stop the ones after it.

  • operationsobject[]required

    Array of operations to execute (max 100).

    Max items
    100
    Show child attributes
    • actionstringrequired

      The operation to perform.

      Allowed values
      "create", "update", "delete"
    • idstring<uuid>

      Entity ID. Required for update and delete actions.

    • dataobject

      Entity-specific fields. Required for create and update actions. Session create supports is_abstract (boolean, default false). is_abstract cannot be changed on update.

      data takes the same fields as the matching single-record create/update endpoint, including custom_fields and translated_fields. A translated_fields entry for a language the event has not enabled fails that operation with 400 and rolls it back — it is no longer accepted and discarded.

      custom_fields is honoured on the contacts, sessions, exhibitors and sponsors bulk endpoints. An unknown internal_name, a value of the wrong type, or a field owned by an integration fails that operation only — the operations around it in the same batch still commit.

      Exception — draft sessions. POST /event/{eventId}/agenda-drafts/{draftId}/sessions/bulk does not accept custom_fields, and neither does its single-record sibling. A draft session is a scheduling placement of an existing session inside a draft agenda, not a record of its own, so it has no custom fields to write. Set custom fields on the underlying session through /event/{eventId}/sessions.

{
"operations": [
{
"action": "create",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"data": {}
}
]
}

Responses

200application/json

Bulk operation completed

Response body for bulk operations, including per-item results.

  • batch_idstring<uuid>

    Unique identifier for this bulk batch.

  • resultsobject[]

    Per-operation results in the same order as the request.

    Show child attributes
    • indexinteger

      Zero-based index of the operation in the request array.

    • actionstring

      The action that was performed (create, update, delete).

    • statusstring

      Whether this individual operation succeeded or failed.

      Most bulk endpoints report success or error. The contacts bulk endpoint instead names the outcome: created, associated (the email already existed in the organization and was linked to this event), updated, deleted, or error. Treat anything other than error as a success.

      Allowed values
      "success", "created", "associated", "updated", "deleted", "error"
    • idstring<uuid>

      The ID of the created or affected entity.

    • errorobject | string

      Error details, present only when status is error.

      An object with code and message on most bulk endpoints. On the contacts bulk endpoint error is a plain string and the code is returned alongside it as error_code; that difference is longstanding and is kept so existing callers reading the string keep working.

      Option 1
      • codestring

        Machine-readable error code.

      • messagestring

        Human-readable error description.

      • valid_optionsstring[]

        Present only when code is TYPE_MISMATCH on a dropdown field: every value the field accepts, one array entry per option, in the field's option order. An option label can itself contain a comma ("Banana, Chocolate"), so read this array rather than splitting the list in message. Absent on every other error.

      Option 2

      Human-readable error description (contacts bulk).

      string

    • error_codestring

      Machine-readable error code. Returned by the contacts bulk endpoint alongside the string error.

  • summaryobject

    Aggregate counts for the batch. This page previously named the object stats; every bulk endpoint has always returned it as summary.

    Show child attributes
    • totalinteger

      Total number of operations in the batch.

    • succeededinteger

      Number of operations that succeeded — every row whose status is not error, including the contacts bulk endpoint's created, associated, updated and deleted.

    • failedinteger

      Number of operations that failed.

401

Unauthorized

403

Missing write:sessions scope

429

Rate limit or daily quota exceeded

Response examples

{
"batch_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"results": [
{
"index": 123,
"action": "<string>",
"status": "success",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"error": {
"code": "TYPE_MISMATCH",
"message": "Field 'product_type' value 'Banana' is not a valid option. Valid options: [\"1\", \"Banana, Chocolate\", \"Blue, Green, Violet\", \"10\"]",
"valid_options": [
"1",
"Banana, Chocolate",
"Blue, Green, Violet",
"10"
]
},
"error_code": "<string>"
}
],
"summary": {
"total": 123,
"succeeded": 123,
"failed": 123
}
}

Get release notes by email

A short digest on the days something new goes live — each change with a link to its note in the release notes. No marketing, and one click to stop.

Company email addresses only. We’ll send one email to confirm it’s you. Already use Sessionboard? You can also turn this on under Community → What’s new.