Scheduling
Busy to free intervals API
Inverts busy intervals into free gaps within a window, merging overlapping busy blocks and returning the complement plus total free/busy minutes. Answers 'What are my free gaps given these meetings?', 'How much free vs busy time is in this window?'.
Price$0.02per request
MethodPOST
Route/v1/scheduling/invert-intervals
StatusLive
MIME typeapplication/json
Rate limit120/minute
Cache0s public
schedulingintervalsfree-busycomplementcalendaravailabilitymergeagents
API URL
Integration docshttps://x402.hexl.dev/v1/scheduling/invert-intervalsExample request
{
"windowStart": "2026-06-04T09:00:00Z",
"windowEnd": "2026-06-04T12:00:00Z",
"busy": [
{
"start": "2026-06-04T09:30:00Z",
"end": "2026-06-04T10:00:00Z"
},
{
"start": "2026-06-04T10:00:00Z",
"end": "2026-06-04T10:30:00Z"
}
]
}Example response
{
"free": [
{
"start": "2026-06-04T09:00:00.000Z",
"end": "2026-06-04T09:30:00.000Z"
},
{
"start": "2026-06-04T10:30:00.000Z",
"end": "2026-06-04T12:00:00.000Z"
}
],
"busyMerged": [
{
"start": "2026-06-04T09:30:00.000Z",
"end": "2026-06-04T10:30:00.000Z"
}
],
"freeMinutes": 120,
"busyMinutes": 60,
"windowMinutes": 180,
"interpretation": "2 free gap(s) totaling 2h; 1h busy."
}Input schema
{
"type": "object",
"required": [
"windowStart",
"windowEnd",
"busy"
],
"properties": {
"windowStart": {
"type": "string",
"examples": [
"2026-06-04T09:00:00Z"
]
},
"windowEnd": {
"type": "string",
"examples": [
"2026-06-04T12:00:00Z"
]
},
"busy": {
"type": "array",
"items": {
"type": "object"
}
}
}
}Output schema
{
"type": "object",
"additionalProperties": true
}