Calendar and Appointments API
How to check available time slots and create appointments in Omnifox's Calendar module via API.
The Calendar module lets you schedule appointments (meetings, demos, support sessions) linked to a contact, an agent, and optionally a conversation or a CRM deal. The API exposes the same engine that powers public booking links.
Requirements
- A Bearer token for the workspace.
- An existing
calendar_id(GET /api/v1/calendar/calendars) and, if applicable, aservice_id(GET /api/v1/calendar/services).
Main endpoints
GET/POST /api/v1/calendar/calendars— the workspace's calendars (one per agent or resource).GET/POST /api/v1/calendar/services— service/duration types (e.g. "30-min demo").GET /api/v1/calendar/slots— available time slots for a calendar/service within a date range.GET/POST /api/v1/calendar/appointments— list or create appointments.PUT /api/v1/calendar/appointments/{id}— reschedule.POST /api/v1/calendar/appointments/{id}/cancel— cancel.GET/POST /api/v1/calendar/booking-links— public self-service booking links.
Fields to create an appointment
{
"calendar_id": 3,
"service_id": 7,
"contact_id": 55,
"starts_at": "2026-07-20T15:00:00-05:00",
"ends_at": "2026-07-20T15:30:00-05:00",
"title": "Omnifox demo",
"notes": "Customer interested in the CRM module"
}
Only calendar_id and starts_at are required; if you send service_id, the duration is calculated automatically.
Example: check open slots before booking
curl -X GET "https://app.omnifox.io/api/v1/calendar/slots?calendar_id=3&service_id=7&from=2026-07-20&to=2026-07-22" \
-H "Authorization: Bearer YOUR_TOKEN"
Tips
- Always query
/slotsbeforePOST /appointmentsto avoid scheduling conflicts; the create endpoint still validates availability server-side as a safety net. - Attach
deal_idorconversation_idto the appointment so it's traceable in the contact's history and the CRM timeline.
Troubleshooting
- 422 when creating the appointment: the
starts_at/ends_atrange overlaps another appointment on the same calendar. - The slot looked open but creation failed: it may have been booked between your query and your request; re-fetch
/slots. - The appointment doesn't show the contact: verify
contact_idbelongs to the correct workspace.
Related articles
-
How to connect integrations and external apps
Connect Omnifox with your favorite tools from the integrations catalog in just a few steps.
-
Generate and use API keys and webhooks
Create API keys to access Omnifox programmatically and set up webhooks to receive real-time events.
-
Getting started with integrations (webhook / OAuth / API key)
Connect Omnifox with your other tools. Learn when to use a webhook, a gallery OAuth connection, or an API key.
-
The Omnifox REST API: introduction and plan requirements
What the Omnifox REST API is, which plan you need (Crece and up), how to authenticate with the X-API-Key header, and where the docs live.
-
Create a personal API key (PAT)
Learn how to generate your first personal API key in Omnifox to connect integrations, scripts, or external tools to your workspace.