Skip to content

Search sessions by status

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

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

Returns a lightweight list of session statuses, including deleted sessions. Supports filtering by deletedAt in addition to standard filters.

Also accepts the five session categorization filters (trackIds, tagIds, levelIds, formatIds, languageIds). IDs within one filter match with OR; separate filters combine with AND. The filters are evaluated against the top-level (root) session: a subsession row matches when its parent carries the filtered attribute, so a matching parent and the flat rows of its subsessions array stay consistent. Unlike other session searches, a deleted root session still satisfies a categorization filter — surfacing deleted sessions is this endpoint's purpose, and filtering must not hide them.

Each categorization filter needs at least one ID. An empty array is rejected with a 400 naming the field — to apply no filter at all, omit the property rather than sending [].

Parent rows additionally include a subsessions array with the same minimal status-focused shape for each child subsession (SubsessionStatus). Subsession rows that appear in the flat results continue to surface with their own row (for back-compat) and carry an empty subsessions array.

Request example

Terminal window
curl --request POST \
--url 'https://public-api.sessionboard.com/v1/event/{eventId}/sessions/status' \
--header 'x-access-token: <api-token>' \
--header 'Content-Type: application/json' \
--data '{
"filters": {
"status": "declined"
},
"sort": {
"deletedAt": {
"sort": "desc"
}
}
}'

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
Query 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.

Query parameters

  • pageintegerquery

    Page number for pagination.

    Default
    1
    Minimum
    1
    Maximum
    999
  • pageSizeintegerquery

    Number of results per page.

    The event-settings list endpoints (tags, tracks, levels, formats, rooms, languages, statuses) also accept the older spelling page_size, and used to accept only that — a request sending pageSize silently got the default 25. Both now work, pageSize wins when both are sent, and on these endpoints a value outside 1–100 is clamped rather than rejected. Everywhere else pageSize is the only spelling.

    Default
    25
    Minimum
    1
    Maximum
    100

Request body

application/json

  • filtersobject
    Show child attributes
    • createdAtDateRangeFilter

      Filter by a date range using before and/or after bounds.

      Show child attributes
      • beforestring<date-time>

        Return records before this date-time.

      • afterstring<date-time>

        Return records after this date-time.

    • updatedAtDateRangeFilter

      Filter by a date range using before and/or after bounds.

      Show child attributes
      • beforestring<date-time>

        Return records before this date-time.

      • afterstring<date-time>

        Return records after this date-time.

    • deletedAtDateRangeFilter

      Filter by a date range using before and/or after bounds.

      Show child attributes
      • beforestring<date-time>

        Return records before this date-time.

      • afterstring<date-time>

        Return records after this date-time.

    • statusstring
      Allowed values
      "accepted", "accept_queue", "pending", "decline_queue", "declined"
    • trackIdsstring<uuid>[]

      Match sessions in any of these tracks (OR). Combined with other filters using AND. Evaluated against the top-level session; a deleted root still matches. Send at least one ID — an empty array is rejected with a 400; to apply no track filter, omit the property.

      Min items
      1
    • levelIdsstring<uuid>[]
      Min items
      1
    • formatIdsstring<uuid>[]
      Min items
      1
    • languageIdsstring<uuid>[]
      Min items
      1
    • tagIdsstring<uuid>[]

      Match sessions tagged with any of these tag IDs (OR). Send at least one ID — an empty array is rejected with a 400.

      Min items
      1
  • sortobject

    Nested sort keys — the same shape as other search endpoints ({"createdAt": {"sort": "desc"}}), not a flat {"order": "createdAt", "sort": "desc"} pair.

    When sorting by deletedAt, deleted sessions sort before never-deleted ones (whose deleted_at is null) in both directions.

    Show child attributes
    • createdAtNestedSortField

      One sort key. sort is the direction; order is the priority when multiple keys are set (lower numbers apply first).

      Show child attributes
      • sortstring
        Allowed values
        "asc", "desc"
      • orderinteger
    • updatedAtNestedSortField

      One sort key. sort is the direction; order is the priority when multiple keys are set (lower numbers apply first).

      Show child attributes
      • sortstring
        Allowed values
        "asc", "desc"
      • orderinteger
    • deletedAtNestedSortField

      One sort key. sort is the direction; order is the priority when multiple keys are set (lower numbers apply first).

      Show child attributes
      • sortstring
        Allowed values
        "asc", "desc"
      • orderinteger
  • expandstring[]
{
"filters": {
"status": "declined"
},
"sort": {
"deletedAt": {
"sort": "desc"
}
}
}

Responses

200application/json

OK

  • resultsSessionStatus[]
    Show child attributes
    • idstring<uuid>
    • friendly_idstring
    • friendly_id_rawinteger
    • statusstring
    • custom_status_idstring<uuid> | null
    • custom_statusSessionCustomStatus

      A custom session status definition configured for an event.

      Show child attributes
      • idstring
      • namestring
      • statusstring

        Approval state this custom label maps onto. Stored NOT NULL, so it is always present on a status created through this API.

        Allowed values
        "pending", "accepted", "declined", "accept_queue", "decline_queue"
      • status_namestring | null
      • colorstring
      • orderinteger
      • is_customboolean
      • created_atstring | null
      • created_by_user_idinteger | null
      • created_by_user_namestring | null
    • is_abstractboolean
    • composition_statusCompositionStatus

      Summary of how this session participates in a composition (merge or link). Always present on session responses.

      Show child attributes
      • rolestring
        • standalone — normal editable record
        • target — composite parent with one or more linked sources
        • source — linked into another record (still editable)
        Allowed values
        "standalone", "target", "source"
      • is_linkedboolean
      • is_read_onlyboolean

        Always false. Linked sources stay editable; the key is kept for compatibility.

        Allowed values
        false
      • source_countinteger

        Number of records merged or linked into this session.

      • targetobject | null

        Present when role is source.

        Show child attributes
        • idstring<uuid>
        • friendly_idstring
        • titlestring
        • is_abstractboolean
    • deleted_atstring<date-time> | null
    • created_atstring<date-time>
    • updated_atstring<date-time>
    • subsessionsSubsessionStatus[]

      Empty for subsession rows. Populated with SubsessionStatus items for parent rows, in the admin-defined order (subsession_order, falling back to subsession number and start time).

      Show child attributes
      • idstring<uuid>
      • friendly_idstring
      • friendly_id_rawinteger
      • parent_session_friendly_idstring
      • parent_session_friendly_id_rawinteger
      • subsession_orderinteger | null

        Admin-defined position among the parent session's subsessions; subsessions are returned in this order, falling back to subsession number and start time. null when the parent's subsessions have never been reordered.

      • statusstring | null

        The subsession's own approval status from the database. The API does not inherit the parent session's status. May be null when the subsession has no explicit status set.

      • custom_status_idstring<uuid> | null
      • custom_statusSessionCustomStatus

        A custom session status definition configured for an event.

        Show child attributes
        • idstring
        • namestring
        • statusstring

          Approval state this custom label maps onto. Stored NOT NULL, so it is always present on a status created through this API.

          Allowed values
          "pending", "accepted", "declined", "accept_queue", "decline_queue"
        • status_namestring | null
        • colorstring
        • orderinteger
        • is_customboolean
        • created_atstring | null
        • created_by_user_idinteger | null
        • created_by_user_namestring | null
      • deleted_atstring<date-time> | null
      • created_atstring<date-time>
      • updated_atstring<date-time>
  • paginationPagination

    Pagination metadata returned with POST search responses. The event-settings GET lists return the same numbers under snake_case keys — see ListPagination.

    Show child attributes
    • currentPageinteger
    • pageSizeinteger
    • totalPagesinteger
    • totalResultsinteger

401

Unauthorized

404

Event not found

Response examples

{
"results": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"friendly_id": "<string>",
"friendly_id_raw": 123,
"status": "<string>",
"custom_status_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"custom_status": {
"id": "<string>",
"name": "<string>",
"status": "pending",
"status_name": "<string>",
"color": "<string>",
"order": 123,
"is_custom": true,
"created_at": "<string>",
"created_by_user_id": 123,
"created_by_user_name": "<string>"
},
"is_abstract": true,
"composition_status": {
"role": "standalone",
"is_linked": true,
"is_read_only": false,
"source_count": 123,
"target": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"friendly_id": "<string>",
"title": "<string>",
"is_abstract": true
}
},
"deleted_at": "2026-01-15T09:30:00Z",
"created_at": "2026-01-15T09:30:00Z",
"updated_at": "2026-01-15T09:30:00Z",
"subsessions": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"friendly_id": "<string>",
"friendly_id_raw": 123,
"parent_session_friendly_id": "<string>",
"parent_session_friendly_id_raw": 123,
"subsession_order": 123,
"status": "<string>",
"custom_status_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"custom_status": {
"id": "<string>",
"name": "<string>",
"status": "pending",
"status_name": "<string>",
"color": "<string>",
"order": 123,
"is_custom": true,
"created_at": "<string>",
"created_by_user_id": 123,
"created_by_user_name": "<string>"
},
"deleted_at": "2026-01-15T09:30:00Z",
"created_at": "2026-01-15T09:30:00Z",
"updated_at": "2026-01-15T09:30:00Z"
}
]
}
],
"pagination": {
"currentPage": 1,
"pageSize": 25,
"totalPages": 4,
"totalResults": 97
}
}

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.