Create a contact
US Region: https://public-api.sessionboard.com · EU Region: https://public-api-eu.sessionboard.com
Create a new contact in an event. Requires the write:contacts scope. Subject to rate limiting (100 req/15min) and daily write quota (10,000/day per token).
Fields an event marks Required in Record Settings (the Add Contact layout) are not enforced here or by POST /v1/event/{eventId}/contacts/bulk; they apply only to the event's Add Contact form in the app. Validate them in your integration if you rely on them.
Request example
curl --request POST \ --url 'https://public-api.sessionboard.com/v1/event/{eventId}/contacts/create' \ --header 'x-access-token: <api-token>' \ --header 'Content-Type: application/json' \ --data '{ "email": "jane@example.com", "first_name": "<string>", "last_name": "<string>", "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 } ]}'const response = await fetch('https://public-api.sessionboard.com/v1/event/{eventId}/contacts/create', { method: 'POST', headers: { "x-access-token": "<api-token>", "Content-Type": "application/json" }, body: JSON.stringify({ "email": "jane@example.com", "first_name": "<string>", "last_name": "<string>", "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 } ] }),});
const data = await response.json();console.log(data);import requests
response = requests.request( "POST", "https://public-api.sessionboard.com/v1/event/{eventId}/contacts/create", headers={ "x-access-token": "<api-token>", "Content-Type": "application/json" }, json={ "email": "jane@example.com", "first_name": "<string>", "last_name": "<string>", "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": None } ] },)
print(response.json())<?php
$curl = curl_init();
curl_setopt_array($curl, [ CURLOPT_URL => "https://public-api.sessionboard.com/v1/event/{eventId}/contacts/create", CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => '{ "email": "jane@example.com", "first_name": "<string>", "last_name": "<string>", "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 } ]}', CURLOPT_HTTPHEADER => [ "x-access-token: <api-token>", "Content-Type: application/json", ],]);
$response = curl_exec($curl);curl_close($curl);
echo $response;package main
import ( "fmt" "io" "net/http" "strings")
func main() { req, _ := http.NewRequest("POST", "https://public-api.sessionboard.com/v1/event/{eventId}/contacts/create", strings.NewReader(`{ "email": "jane@example.com", "first_name": "<string>", "last_name": "<string>", "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 } ]}`)) req.Header.Add("x-access-token", "<api-token>") req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))}HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://public-api.sessionboard.com/v1/event/{eventId}/contacts/create")) .header("x-access-token", "<api-token>") .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString("{\n \"email\": \"jane@example.com\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"company\": \"<string>\",\n \"title\": \"<string>\",\n \"phone\": \"<string>\",\n \"about\": \"<string>\",\n \"salutation\": \"<string>\",\n \"honorific\": \"<string>\",\n \"address_line_1\": \"<string>\",\n \"address_line_2\": \"<string>\",\n \"address_city\": \"<string>\",\n \"address_state\": \"<string>\",\n \"address_postal_code\": \"<string>\",\n \"address_country\": \"<string>\",\n \"custom_fields\": {},\n \"translated_fields\": [\n {\n \"parent_field_internal_name\": \"<string>\",\n \"translated_language\": \"<string>\",\n \"value\": null\n }\n ]\n}")) .build();
HttpResponse<String> response = HttpClient.newHttpClient() .send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());Try it
Response headers
Authorizations
x-access-tokenstringheaderOrganization API token. Generate from Organization Settings → API Tokens.
AuthorizationBearer <token>headerorOAuth 2.1 access token. Obtained via the OAuth PKCE flow at
/oauth/token.
Send one of these. See Authentication.
Path parameters
eventIdintegerpathrequiredThe event ID.
Request body
emailstring<email>requiredContact email address (required, must be unique within the event).
first_namestringFirst name.
last_namestringLast name.
companystringCompany or organization name.
titlestringJob title.
phonestringPhone number.
aboutstringBiography. HTML is allowed and stored as rich text.
salutationstringhonorificstringaddress_line_1stringaddress_line_2stringaddress_citystringaddress_statestringaddress_postal_codestringaddress_countrystringISO 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
400naming the field and nothing is written.custom_fieldsobjectCustom field values keyed by field internal name.
For
number,currency, andpercentfields, an empty string ("") clears the stored value — identical to sendingnull.0and"0"store an actual zero.For
checkboxfields, send booleantrueorfalse. On read, a checked box serializes as the string"Yes", an explicitly unchecked one as"No", and a box that was never set asnull.Fields owned by an integration (for example
swoogo_session_id,cvent_session_id,visit_session_id) are hydrated by the connector and reject writes with400FIELD_READ_ONLY, naming the field indetails.field. Omit them fromcustom_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_namestringrequiredtranslated_languagestringrequiredLocale code for the language variant (for example
frorar). Must be enabled on the event; otherwise the request fails with400.valueanyValue for that locale. Same type as the parent field.
{ "email": "jane@example.com", "first_name": "<string>", "last_name": "<string>", "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 created
A contact (speaker, attendee, or organizational contact) in Sessionboard.
idstringfriendly_idstringfull_namestringfirst_namestringlast_namestringemailstringcreated_atstringupdated_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_atonPUT /v1/event/{eventId}/contacts/{contactId}or a bulk update for optimistic concurrency; the write returns the new value.photo_urlstringURL 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_namestringtitlestringaboutstringphone_homestringphone_mobilestringaddress_line_1stringaddress_line_2stringaddress_citystringaddress_statestringaddress_postal_codestringaddress_countrystringwebsite_urlstringlinkedin_urlstringtwitter_urlstringfacebook_urlstringhonorificstringsalutationstringpronounsstringgenderstringpast_companiesstringeducational_affiliationstringhighest_level_of_educationstringethnicitystringlanguagesstringspeaker_scorestringorganization_contactstringspeaker_feestringavailabilitystringpreferred_session_formatstringannual_revenuestringheadcountstringyears_in_operationstringorganization_structurestringindustrystringglobal_regionstringaudience_typestringtarget_age_rangestringtopic_expertisestringbrandstringtranslated_fieldsTranslatedField[]Show child attributes
idstringnamestringtypestringparent_field_idstringparent_field_sourcestringparent_field_namestringparent_field_internal_namestringtranslated_languagestringvaluestring
custom_fieldsCustomFieldValue[]Show child attributes
idstringnamestringvaluestring | boolean | nullThe formatted field value, or
nullwhen the field is empty. Numeric field types (number,currency,percent,quantity,formula) serialize a stored zero as its formatted value (for example"0") —nullmeans the field has no value, not that the value is zero.checkboxfields serialize as the strings"Yes"(checked) and"No"(explicitly unchecked); a checkbox that was never set isnull. Writes take booleantrue/false.datetimefields 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 example2026-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 asM-DD-YYYY: month without a leading zero, day with one, four-digit year (for example9-22-2026for 22 September 2026,3-04-2026for 4 March 2026). This is not ISO 8601; parse it with that exact pattern.typestringinternal_namestringcreated_atstring
admin_urlstring<uri> | nullDeep link to this entity in the Sessionboard admin UI.
400
Validation error
401
Unauthorized
403
Insufficient scope or feature not enabled
429
Rate limit or daily quota exceeded
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": []}