curl --request POST \
--url https://public-api.sessionboard.com/v1/event/{eventId}/contacts/create \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"email": "jsmith@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": "<unknown>"
}
]
}
'import requests
url = "https://public-api.sessionboard.com/v1/event/{eventId}/contacts/create"
payload = {
"email": "jsmith@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": "<unknown>"
}
]
}
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
email: 'jsmith@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: '<unknown>'
}
]
})
};
fetch('https://public-api.sessionboard.com/v1/event/{eventId}/contacts/create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://public-api.sessionboard.com/v1/event/{eventId}/contacts/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'email' => 'jsmith@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' => '<unknown>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-access-token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://public-api.sessionboard.com/v1/event/{eventId}/contacts/create"
payload := strings.NewReader("{\n \"email\": \"jsmith@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\": \"<unknown>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-access-token", "<api-key>")
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))
}HttpResponse<String> response = Unirest.post("https://public-api.sessionboard.com/v1/event/{eventId}/contacts/create")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"jsmith@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\": \"<unknown>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.sessionboard.com/v1/event/{eventId}/contacts/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"jsmith@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\": \"<unknown>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"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": []
}Create a contact
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.
curl --request POST \
--url https://public-api.sessionboard.com/v1/event/{eventId}/contacts/create \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"email": "jsmith@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": "<unknown>"
}
]
}
'import requests
url = "https://public-api.sessionboard.com/v1/event/{eventId}/contacts/create"
payload = {
"email": "jsmith@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": "<unknown>"
}
]
}
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
email: 'jsmith@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: '<unknown>'
}
]
})
};
fetch('https://public-api.sessionboard.com/v1/event/{eventId}/contacts/create', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://public-api.sessionboard.com/v1/event/{eventId}/contacts/create",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'email' => 'jsmith@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' => '<unknown>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-access-token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://public-api.sessionboard.com/v1/event/{eventId}/contacts/create"
payload := strings.NewReader("{\n \"email\": \"jsmith@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\": \"<unknown>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-access-token", "<api-key>")
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))
}HttpResponse<String> response = Unirest.post("https://public-api.sessionboard.com/v1/event/{eventId}/contacts/create")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"jsmith@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\": \"<unknown>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.sessionboard.com/v1/event/{eventId}/contacts/create")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"jsmith@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\": \"<unknown>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"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": []
}Authorizations
Organization API token. Generate from Organization Settings → API Tokens.
Path Parameters
The event ID.
Body
Contact email address (required, must be unique within the event).
First name.
Last name.
Company or organization name.
Job title.
Phone number.
Biography. HTML is allowed and stored as rich text.
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 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.
Language variants to write using the same shape returned on reads. Omit this key on update to leave existing translations unchanged.
Show child attributes
Show child attributes
Response
Contact created
A contact (speaker, attendee, or organizational contact) in Sessionboard.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Deep link to this entity in the Sessionboard admin UI.

