---
title: "Speakers"
description: "Speakers: available fields, filters, associations, and API operations."
lastModified: "2026-08-21"
---

**Path:** `events/{event_id}/speakers`  
**Methods:** GET collection/record, POST, PATCH. There is no DELETE operation.

**GET**

- Fields: `event-id`, `external-id`, `honorific`, `first-name`, `middle-name`, `last-name`, `full-name`, `job-title`, `company-name`, `bio`, `photo-url`, `highlight-position`, `position`, `created-at`, `updated-at`.  
- Filters: `external_id`, `first_name`, `middle_name`, `last_name`, `honorific`, `job_title`, `company_name`, `featured`, `session_id`.  
- Associations:  
  - `speaker_assignments` → response `speaker-assignments`: `id`, `timeslot-id`, `role`, `position`;  
  - `custom_fields` → response `custom-fields`: `definition-key`, `definition-title`, `field-type`, `values`.

```
GET .../speakers?featured=true&session_id=5501&include=speaker_assignments,custom_fields
```

**POST/PATCH writable fields:** `external_id`, `honorific`, `first_name`, `middle_name`, `last_name`, `job_title`, `company_name`, `bio` (raw JSON or HTML string), `highlight_position`, `position`.

**Additional inputs:** `custom_fields_attributes` (raw JSON), `photo` (raw value; HTTP URL or base64 data URI).

```json
{
  "external_id": "SPEAKER-42",
  "first_name": "Taylor",
  "last_name": "Ng",
  "job_title": "CEO",
  "company_name": "Example Ltd",
  "bio": "Taylor leads Example Ltd.",
  "photo": "https://example.com/taylor.jpg"
}
```

Speaker biography content is normalized and sanitized. An empty `photo` value on PATCH removes the current image.
