Skip to content

Update a contact

PUT/v1/event/{eventId}/contacts/{contactId}

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

Update an existing contact. Requires the write:contacts scope. Optionally send updated_at for optimistic concurrency control. Sending null for a standard field clears it; omitting a key leaves it unchanged.

Request example

Terminal window
curl --request PUT \
--url 'https://public-api.sessionboard.com/v1/event/{eventId}/contacts/{contactId}' \
--header 'x-access-token: <api-token>' \
--header 'Content-Type: application/json' \
--data '{
"updated_at": "2026-01-15T09:30:00Z",
"first_name": "<string>",
"last_name": "<string>",
"email": "jane@example.com",
"company": "<string>",
"title": "<string>",
"phone": "<string>",
"about": "<string>",
"salutation": "<string>",
"honorific": "<string>",
"address_line_1": "<string>",
"address_line_2": "<string>",
"address_city": "<string>",
"address_state": "<string>",
"address_postal_code": "<string>",
"address_country": "<string>",
"custom_fields": {},
"translated_fields": [
{
"parent_field_internal_name": "<string>",
"translated_language": "<string>",
"value": null
}
]
}'

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
PUT

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.

  • contactIdstringpathrequired

    The contact ID.

Request body

application/jsonrequired

  • updated_atstring<date-time>

    Optional optimistic concurrency control. Send the updated_at value from the last-fetched contact (or from your last write's response); a contact changed since then returns 409 STALE_UPDATE.

  • first_namestring
  • last_namestring
  • emailstring<email>
  • companystring
  • titlestring
  • phonestring
  • aboutstring

    Biography. HTML is allowed and stored as rich text.

  • salutationstring
  • honorificstring
  • address_line_1string
  • address_line_2string
  • address_citystring
  • address_statestring
  • address_postal_codestring
  • address_countrystring

    ISO 3166-1 numeric code (as GET returns), alpha-2 or alpha-3 code, or English country name. Stored and returned as the numeric code. An unknown value returns 400 naming the field and nothing is written.

  • custom_fieldsobject

    Custom field values keyed by field internal name.

    For number, currency, and percent fields, an empty string ("") clears the stored value — identical to sending null. 0 and "0" store an actual zero.

    For checkbox fields, send boolean true or false. On read, a checked box serializes as the string "Yes", an explicitly unchecked one as "No", and a box that was never set as null.

    Fields owned by an integration (for example swoogo_session_id, cvent_session_id, visit_session_id) are hydrated by the connector and reject writes with 400 FIELD_READ_ONLY, naming the field in details.field. Omit them from custom_fields.

  • translated_fieldsTranslatedFieldWrite[]

    Language variants to write using the same shape returned on reads. Omit this key on update to leave existing translations unchanged.

    Show child attributes
    • parent_field_internal_namestringrequired
    • translated_languagestringrequired

      Locale code for the language variant (for example fr or ar). Must be enabled on the event; otherwise the request fails with 400.

    • valueany

      Value for that locale. Same type as the parent field.

{
"updated_at": "2026-01-15T09:30:00Z",
"first_name": "<string>",
"last_name": "<string>",
"email": "jane@example.com",
"company": "<string>",
"title": "<string>",
"phone": "<string>",
"about": "<string>",
"salutation": "<string>",
"honorific": "<string>",
"address_line_1": "<string>",
"address_line_2": "<string>",
"address_city": "<string>",
"address_state": "<string>",
"address_postal_code": "<string>",
"address_country": "<string>",
"custom_fields": {},
"translated_fields": [
{
"parent_field_internal_name": "<string>",
"translated_language": "<string>",
"value": null
}
]
}

Responses

200application/json

Contact updated

A contact (speaker, attendee, or organizational contact) in Sessionboard.

  • idstring
  • friendly_idstring
  • full_namestring
  • first_namestring
  • last_namestring
  • emailstring
  • created_atstring
  • updated_atstring<date-time>

    When the contact last changed, from any source: an admin or portal edit, a sync, or a Public API write (create, update or bulk). Send it back as updated_at on PUT /v1/event/{eventId}/contacts/{contactId} or a bulk update for optimistic concurrency; the write returns the new value.

  • photo_urlstring

    URL of the contact's headshot. Images larger than 2 MB are delivered resized from this URL, scaled to fit within 2400 x 2400 pixels (a PNG may arrive as WebP for clients that accept it). The uploaded file is stored unchanged; for full-resolution originals use the bulk download tools in Sessionboard, such as Download Headshots (Contacts, More menu).

  • company_namestring
  • titlestring
  • aboutstring
  • phone_homestring
  • phone_mobilestring
  • address_line_1string
  • address_line_2string
  • address_citystring
  • address_statestring
  • address_postal_codestring
  • address_countrystring
  • website_urlstring
  • linkedin_urlstring
  • twitter_urlstring
  • facebook_urlstring
  • honorificstring
  • salutationstring
  • pronounsstring
  • genderstring
  • past_companiesstring
  • educational_affiliationstring
  • highest_level_of_educationstring
  • ethnicitystring
  • languagesstring
  • speaker_scorestring
  • organization_contactstring
  • speaker_feestring
  • availabilitystring
  • preferred_session_formatstring
  • annual_revenuestring
  • headcountstring
  • years_in_operationstring
  • organization_structurestring
  • industrystring
  • global_regionstring
  • audience_typestring
  • target_age_rangestring
  • topic_expertisestring
  • brandstring
  • translated_fieldsTranslatedField[]
    Show child attributes
    • idstring
    • namestring
    • typestring
    • parent_field_idstring
    • parent_field_sourcestring
    • parent_field_namestring
    • parent_field_internal_namestring
    • translated_languagestring
    • valuestring
  • custom_fieldsCustomFieldValue[]
    Show child attributes
    • idstring
    • namestring
    • valuestring | boolean | null

      The formatted field value, or null when the field is empty. Numeric field types (number, currency, percent, quantity, formula) serialize a stored zero as its formatted value (for example "0") — null means the field has no value, not that the value is zero.

      checkbox fields serialize as the strings "Yes" (checked) and "No" (explicitly unchecked); a checkbox that was never set is null. Writes take boolean true / false.

      datetime fields serialize as ISO 8601. On event custom fields (GET /v1/events?expand=custom_fields) the value is event-local time with the event's UTC offset (for example 2026-08-15T09:00:00-03:00), falling back to the raw UTC instant (2026-08-15T12:00:00.000Z) when the event has no valid timezone. On session, speaker, sponsor, and exhibitor custom fields the value is the raw UTC instant.

      date (date-only) fields serialize as M-DD-YYYY: month without a leading zero, day with one, four-digit year (for example 9-22-2026 for 22 September 2026, 3-04-2026 for 4 March 2026). This is not ISO 8601; parse it with that exact pattern.

    • typestring
    • internal_namestring
    • created_atstring
  • admin_urlstring<uri> | null

    Deep link to this entity in the Sessionboard admin UI.

401

Unauthorized

403

Missing write:contacts scope

404

Contact not found

409

Stale update — contact modified since last fetch

Response examples

{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"friendly_id": "SPK-42",
"full_name": "Dr. Jane Smith",
"first_name": "Jane",
"last_name": "Smith",
"email": "jane.smith@university.edu",
"created_at": "2023-11-01T10:00:00Z",
"updated_at": "2024-02-15T16:30:00Z",
"photo_url": "https://cdn.sessionboard.com/photos/jane-smith.jpg",
"company_name": "State University",
"title": "Professor of Computer Science",
"about": "Dr. Smith is a leading researcher in distributed systems.",
"address_city": "Austin",
"address_state": "TX",
"address_country": "US",
"honorific": "Dr.",
"pronouns": "she/her",
"topic_expertise": "Distributed Systems, Cloud Computing",
"custom_fields": [],
"translated_fields": []
}

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.