Stop AI agentsfromdouble-bookingyour calendar.
Your agents can all see an open slot. They cannot see each other. Openavail gives every agent one place to ask, one set of rules to follow, and one receipt for every calendar decision.
Transport
REST + MCP
Decision
Deterministic
Hold TTL
Atomic
Audit
Queryable
Incoming calendar writes
Same owner. Same slot. Different agents.
Decision receipt
personal-asst wins by meeting class priority.
3 other agents receive a deterministic answer: reject, counter-propose, or preempt.
Calendar write
1
approved event reaches Google
Calendar APIs know state.
Agents create intent.
Direct provider access works until two agents check the same free slot, make different promises, and race to write. The calendar accepts the winner. It does not explain why.
01
The slot looked free
Two agents checked the same window before either write landed.
02
The promises diverged
Sales, recruiting, and a personal assistant each made a different commitment.
03
The human cleaned it up
The calendar owner found the conflict later, with no useful receipt for why it happened.
Write gate
Every agent enters the same decision path.
1 · Check
4 agents ask
Ask before writing
Availability, owner context, and priority rules resolve before Google Calendar changes.
Output
live slot state
2 · Hold
1 hold opens
Reserve atomically
The winning request receives a short-lived hold so no other agent can promise the slot.
Output
hld_8XnPq7r3
3 · Commit
1 event writes
Write with a receipt
The approved booking writes once. Every other agent gets a deterministic answer.
Output
dec_8XnPq7r3
One narrow place where every agent has to ask.
Openavail turns calendar access into an explicit decision: accept, reject, counter, or preempt. The result is useful for agents and readable for humans.
Decision receipt
signed- Winner
- personal-asst
- Reason
- meeting class priority
- Others
- reject · counter · preempt
- Audit
- dec_8XnPq7r3
If your agent speaks HTTP, it can speak Openavail.
REST is the baseline. MCP tools and the TypeScript SDK sit on top of the same deterministic availability and hold flow.
▸ REQUEST
curl -X POST https://api.openavail.com/v1/availability \
-H "Authorization: Bearer ak_01HXYZ..." \
-H "Idempotency-Key: board-prep-0900" \
-d '{
"owner_email": "[email protected]",
"meeting_class": "critical",
"duration_minutes": 30,
"window": {
"start": "2026-06-04T09:00:00Z",
"end": "2026-06-04T17:00:00Z"
}
}'◂ RESPONSE
{
"decision": "accepted",
"hold_id": "hld_8XnPq7r3",
"expires_at": "2026-06-04T09:05:00Z",
"audit_id": "dec_8XnPq7r3",
"reason": "meeting class priority"
}