Bulk sponsor operations
US Region: https://public-api.sessionboard.com · EU Region: https://public-api-eu.sessionboard.com
Create, update, or delete multiple sponsors in a single request (max 100 operations). Requires the write:sponsors scope.
Request example
curl --request POST \ --url 'https://public-api.sessionboard.com/v1/event/{eventId}/sponsors/bulk' \ --header 'x-access-token: <api-token>' \ --header 'Content-Type: application/json' \ --data '{ "operations": [ { "action": "create", "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "data": {} } ]}'const response = await fetch('https://public-api.sessionboard.com/v1/event/{eventId}/sponsors/bulk', { method: 'POST', headers: { "x-access-token": "<api-token>", "Content-Type": "application/json" }, body: JSON.stringify({ "operations": [ { "action": "create", "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "data": {} } ] }),});
const data = await response.json();console.log(data);import requests
response = requests.request( "POST", "https://public-api.sessionboard.com/v1/event/{eventId}/sponsors/bulk", headers={ "x-access-token": "<api-token>", "Content-Type": "application/json" }, json={ "operations": [ { "action": "create", "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "data": {} } ] },)
print(response.json())<?php
$curl = curl_init();
curl_setopt_array($curl, [ CURLOPT_URL => "https://public-api.sessionboard.com/v1/event/{eventId}/sponsors/bulk", CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => '{ "operations": [ { "action": "create", "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "data": {} } ]}', 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}/sponsors/bulk", strings.NewReader(`{ "operations": [ { "action": "create", "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "data": {} } ]}`)) 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}/sponsors/bulk")) .header("x-access-token", "<api-token>") .header("Content-Type", "application/json") .method("POST", HttpRequest.BodyPublishers.ofString("{\n \"operations\": [\n {\n \"action\": \"create\",\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"data\": {}\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
Request body for bulk create/update/delete operations.
Operations are applied in request order, each in its own transaction,
and results[i] describes operations[i]. A failed operation is
rolled back whole and does not stop the ones after it.
operationsobject[]requiredArray of operations to execute (max 100).
- Max items
100
Show child attributes
actionstringrequiredThe operation to perform.
- Allowed values
"create", "update", "delete"
idstring<uuid>Entity ID. Required for
updateanddeleteactions.dataobjectEntity-specific fields. Required for
createandupdateactions. Session create supportsis_abstract(boolean, default false).is_abstractcannot be changed on update.datatakes the same fields as the matching single-record create/update endpoint, includingcustom_fieldsandtranslated_fields. Atranslated_fieldsentry for a language the event has not enabled fails that operation with400and rolls it back — it is no longer accepted and discarded.custom_fieldsis honoured on the contacts, sessions, exhibitors and sponsors bulk endpoints. An unknowninternal_name, a value of the wrong type, or a field owned by an integration fails that operation only — the operations around it in the same batch still commit.Exception — draft sessions.
POST /event/{eventId}/agenda-drafts/{draftId}/sessions/bulkdoes not acceptcustom_fields, and neither does its single-record sibling. A draft session is a scheduling placement of an existing session inside a draft agenda, not a record of its own, so it has no custom fields to write. Set custom fields on the underlying session through/event/{eventId}/sessions.
{ "operations": [ { "action": "create", "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "data": {} } ]}Responses
200application/json
Bulk operation completed
Response body for bulk operations, including per-item results.
batch_idstring<uuid>Unique identifier for this bulk batch.
resultsobject[]Per-operation results in the same order as the request.
Show child attributes
indexintegerZero-based index of the operation in the request array.
actionstringThe action that was performed (create, update, delete).
statusstringWhether this individual operation succeeded or failed.
Most bulk endpoints report
successorerror. The contacts bulk endpoint instead names the outcome:created,associated(the email already existed in the organization and was linked to this event),updated,deleted, orerror. Treat anything other thanerroras a success.- Allowed values
"success", "created", "associated", "updated", "deleted", "error"
idstring<uuid>The ID of the created or affected entity.
errorobject | stringError details, present only when
statusiserror.An object with
codeandmessageon most bulk endpoints. On the contacts bulk endpointerroris a plain string and the code is returned alongside it aserror_code; that difference is longstanding and is kept so existing callers reading the string keep working.Option 1
codestringMachine-readable error code.
messagestringHuman-readable error description.
valid_optionsstring[]Present only when
codeisTYPE_MISMATCHon adropdownfield: every value the field accepts, one array entry per option, in the field's option order. An option label can itself contain a comma ("Banana, Chocolate"), so read this array rather than splitting the list inmessage. Absent on every other error.
Option 2
Human-readable error description (contacts bulk).
string
error_codestringMachine-readable error code. Returned by the contacts bulk endpoint alongside the string
error.
summaryobjectAggregate counts for the batch. This page previously named the object
stats; every bulk endpoint has always returned it assummary.Show child attributes
totalintegerTotal number of operations in the batch.
succeededintegerNumber of operations that succeeded — every row whose
statusis noterror, including the contacts bulk endpoint'screated,associated,updatedanddeleted.failedintegerNumber of operations that failed.
401
Unauthorized
403
Missing write:sponsors scope
429
Rate limit or daily quota exceeded
Response examples
{ "batch_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "results": [ { "index": 123, "action": "<string>", "status": "success", "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a", "error": { "code": "TYPE_MISMATCH", "message": "Field 'product_type' value 'Banana' is not a valid option. Valid options: [\"1\", \"Banana, Chocolate\", \"Blue, Green, Violet\", \"10\"]", "valid_options": [ "1", "Banana, Chocolate", "Blue, Green, Violet", "10" ] }, "error_code": "<string>" } ], "summary": { "total": 123, "succeeded": 123, "failed": 123 }}