
Let your AI agent book, reschedule and cancel appointments in one API call. No UI required.
curl -X POST https://orita.online/api/v1/bookings \
-H "Authorization: Bearer orita_your_key" \
-H "Content-Type: application/json" \
-d '{
"eventTypeId": "evt_123",
"date": "2026-08-01",
"time": "14:00",
"clientName": "Juan",
"clientLastname": "García",
"clientEmail": "juan@example.com"
}'Built for the agentic era. Scheduling that works without humans in the loop.
Book, reschedule, cancel. No UI. No clicks. Your agent handles everything programmatically.
Handles timezones, buffer times, and scheduling conflicts automatically. No edge cases.
Works natively with OpenAI Agents, Claude MCP, LangChain, CrewAI, n8n, and Make.
Get your API key, fetch available slots, and book an appointment — all from your terminal.
# 1. Get available slots
curl "https://orita.online/api/v1/slots?eventTypeId=EVT_ID&date=2026-08-01" \
-H "Authorization: Bearer orita_your_key"
# 2. Book the slot
curl -X POST https://orita.online/api/v1/bookings \
-H "Authorization: Bearer orita_your_key" \
-H "Content-Type: application/json" \
-d '{"eventTypeId":"EVT_ID","date":"2026-08-01","time":"14:00","clientName":"Juan","clientLastname":"García","clientEmail":"juan@example.com"}'Orita speaks plain HTTP. If your agent can make a request, it can schedule.
And any other framework that can make an HTTP request.
All requests require Authorization: Bearer orita_your_key header.
Base URL: https://orita.online·Auth: Bearer orita_xxxxxxxx·Format: application/json
Connect Orita directly to Claude Desktop or Cursor via the Model Context Protocol. No code needed — just add your API key and your AI agent can book, check slots, and cancel appointments natively.
{
"mcpServers": {
"orita": {
"url": "https://orita.online/api/mcp",
"headers": {
"Authorization": "Bearer YOUR_ORITA_API_KEY"
}
}
}
}npx @modelcontextprotocol/inspector \ https://orita.online/api/mcp
The inspector will prompt for an Authorization header. Enter Bearer YOUR_ORITA_API_KEY to explore all available tools interactively.
list_professionalsget_slotscreate_bookingcancel_bookingget_bookingMCP endpoint: https://orita.online/api/mcp·Protocol: Streamable HTTP (stateless)·Auth: Bearer orita_xxxxxxxx
Platform accounts can manage a network of professionals with a single API key. Professionals configure their availability in the Orita dashboard — your application accesses them all via API.
POST /api/v1/professionals with name + email. They receive a setup link and configure availability in their dashboard.
GET /api/v1/event-types?providerId=<id> returns all active session types for that professional.
POST /api/v1/bookings with providerId + eventTypeId + date + time. Confirmed immediately.
// 1. Create a professional
const pro = await orita.createProfessional({ name: 'Ana Gómez', email: 'ana@example.com' });
// → { professionalId, profileUrl, dashboardUrl }
// 2. List their event types (after they set up availability)
const types = await orita.getEventTypes({ providerId: pro.professionalId });
// → [{ id, title, duration, location }, ...]
// 3. Get available slots
const slots = await orita.getSlots({
providerId: pro.professionalId,
eventTypeId: types[0].id,
date: '2026-08-05'
});
// → [{ value: '09:00', label: '9:00 AM' }, ...]
// 4. Book
const booking = await orita.book({
providerId: pro.professionalId,
eventTypeId: types[0].id,
date: '2026-08-05',
time: slots[0].value,
customer: { name: 'James Park', email: 'james@email.com' }
});
// → { bookingId: 'bk_18382', status: 'confirmed' }When a professional connects their calendar, Orita checks it in real time before offering a slot. External events are never offered as available.
Connect via OAuth in the Integrations tab. Orita queries FreeBusy before returning slots — dentist appointments, team meetings, personal events are all blocked automatically.
Connect via Microsoft OAuth (requires Azure credentials in your environment). Same FreeBusy sync as Google — Outlook events block slots in real time.
Configure a webhook endpoint in your dashboard Settings → Webhooks tab. Orita will POST a signed JSON payload to your URL on every booking event.
booking.createdbooking.cancelled{
"event": "booking.created",
"timestamp": "2026-08-01T10:00:00.000Z",
"data": {
"bookingId": "uuid",
"eventTypeId": "uuid",
"date": "2026-08-01",
"time": "10:00",
"clientName": "Ana López",
"clientEmail": "ana@example.com",
"status": "Confirmed"
}
}import { createHmac } from 'crypto';
function verify(secret, rawBody, sigHeader) {
const expected =
'sha256=' + createHmac('sha256', secret)
.update(rawBody)
.digest('hex');
return sigHeader === expected;
}
// Express example
app.post('/webhook', express.text({ type: '*/*' }),
(req, res) => {
const ok = verify(
process.env.ORITA_WEBHOOK_SECRET,
req.body,
req.headers['x-orita-signature']
);
if (!ok) return res.status(401).end();
const event = JSON.parse(req.body);
console.log(event.event, event.data);
res.sendStatus(200);
}
);Create Orita professional accounts via API so your users never have to visit the Orita dashboard to sign up.
curl -X POST https://orita.online/api/v1/professionals \
-H "Authorization: Bearer orita_your_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Ana López",
"email": "ana@example.com",
"timezone": "America/Bogota",
"profession": "Psychologist"
}'{
"professionalId": "uuid",
"username": "ana-lopez-a1b2c3d4",
"profileUrl": "https://orita.online/u/ana-lopez-a1b2c3d4",
"dashboardUrl": "https://orita.online/sign-in",
"apiKey": "orita_...",
"message": "Professional created."
}Drop your booking page into any website with a single <iframe> tag. Add ?embed=true to strip all Orita chrome — no logo, no header, no footer.
<iframe
src="https://orita.online/p/{username}?embed=true"
width="480"
height="640"
frameborder="0"
style="border:none; border-radius:12px;">
</iframe>curl -X PUT https://orita.online/api/v1/branding \
-H "Authorization: Bearer orita_your_key" \
-H "Content-Type: application/json" \
-d '{
"brandName": "Consulta con Ana",
"brandColor": "#7c3aed",
"brandLogoUrl": "https://tu-sitio.com/logo.png"
}'Header, footer, and "Powered by Orita" are all hidden. Your clients see only your booking form.
Set a brand color (hex) and logo URL. Your accent color is applied to buttons and highlights automatically.
Drop it into Notion, Webflow, WordPress, Squarespace, Framer, or any custom HTML page.
Dashboard: Configure branding in Settings → Branding tab. Your embed URL: https://orita.online/p/{username}?embed=true