The first accepted request creates the event.
DEVELOPER API
Create an event once. Open it safely anywhere.
Use a server-side API key to create field events, then issue a short-lived, one-time embed session whenever an authorised user needs the owner workspace.
QUICK START
Authenticate from your backend
Send your API key in the Authorization: Bearer … header. Store it in a server-side secret manager or private environment variable.
Customer portal-issued API keys will carry tenant scope. The X-Integration-Id header identifies the integration/client until the DB-backed authentication migration lands, and the live API currently requires it.
Do not put it in client-side JavaScript, mobile app bundles, HTML, URLs, local storage or cookies. Your server calls the API; the browser receives only the one-time embed URL when needed.
POST/api/v1/integrations/events
Create an event
Choose a stable Idempotency-Key for the logical create operation and reuse that same value when retrying. A retry then returns the original event rather than creating a duplicate.
# Run this from your server, CI job or secure terminal.
curl --request POST \
"$CFM_API_ORIGIN/api/v1/integrations/events" \
--header "Authorization: Bearer $CFM_API_KEY" \
--header "X-Integration-Id: $CFM_INTEGRATION_ID" \
--header "Idempotency-Key: event-2026-09-09-river-festival" \
--header "Content-Type: application/json" \
--data '{
"ownerName": "Operations desk",
"title": "River festival volunteer team",
"eventType": "Community Event",
"operationalArea": "Town centre and showgrounds",
"description": "Check in at the operations tent.",
"startsAt": "2026-09-12T22:00:00.000Z",
"closesAt": "2026-09-13T06:00:00.000Z",
"retentionDays": 30,
"centreLat": -38.0816,
"centreLng": 142.808,
"authorityConfirmed": true
}'A replay with the same idempotency key returns the original result.
POST/api/v1/integrations/events/{id}/embed-sessions
Open the owner workspace
After creating an event, request a short-lived, one-time embed session from your server. The event must belong to the account authenticated by the Bearer key.
# Run this from your server, CI job or secure terminal.
curl --request POST \
"$CFM_API_ORIGIN/api/v1/integrations/events/$CFM_EVENT_ID/embed-sessions" \
--header "Authorization: Bearer $CFM_API_KEY" \
--header "X-Integration-Id: $CFM_INTEGRATION_ID"
# The response contains embedUrl and expiresAt.
# Send only embedUrl to the authorised browser. It can be opened once.- 1Your server requests a session
Call the endpoint with the event ID and server-side Bearer key.
- 2Return only the embed URL
Do not proxy the API key, permanent owner link or response headers to the client.
- 3Open only the returned launch URL in the browser
The URL is short-lived and one-time. Request a new session instead of storing or replaying it.
Building an integration is optional
People can continue to create a hosted event directly without an API subscription or developer setup.
Create a free event