{"openapi":"3.1.0","info":{"title":"iCalendar API","version":"1.0.0","description":"Build a valid RFC 5545 iCalendar (.ics) event from simple parameters — and get ready-to-use \"add to calendar\" links for Google, Outlook, Office 365 and Yahoo. Pass a title, start and end (ISO 8601 or unix timestamps, in UTC) — or a duration in minutes, or an all-day flag — plus optional location, description, URL, organizer, an RRULE recurrence (e.g. FREQ=WEEKLY) and a reminder (a VALARM N minutes before). The service returns the fully-formed .ics text with correct escaping and 75-octet line folding, a base64 data: URI you can drop straight into a download link, and the four calendar deep-links. A second endpoint parses raw .ics text back into structured JSON events. Everything is computed locally with no network calls, so it is fast and deterministic. Built for booking and scheduling flows, event pages, email \"add to calendar\" buttons, reminders and no-code automations. A calendar-event builder — distinct from date/time math (datetime), public-holiday data (holidays) and the Jewish calendar (hebcal). No upstream key, no cache.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/ical-api","description":"oanor gateway"}],"tags":[{"name":"iCalendar"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/event":{"get":{"operationId":"get_v1_event","tags":["iCalendar"],"summary":"Build an .ics event + calendar links","description":"","parameters":[{"name":"title","in":"query","required":true,"description":"Event title","schema":{"type":"string"},"example":"Team Meeting"},{"name":"start","in":"query","required":true,"description":"Start (ISO 8601 / unix)","schema":{"type":"string"},"example":"2026-07-01T10:00:00Z"},{"name":"end","in":"query","required":false,"description":"End (or use duration)","schema":{"type":"string"},"example":"2026-07-01T11:00:00Z"},{"name":"duration","in":"query","required":false,"description":"Minutes (if no end)","schema":{"type":"string"}},{"name":"location","in":"query","required":false,"description":"Location","schema":{"type":"string"}},{"name":"description","in":"query","required":false,"description":"Description","schema":{"type":"string"}},{"name":"rrule","in":"query","required":false,"description":"Recurrence (FREQ=WEEKLY…)","schema":{"type":"string"}},{"name":"reminder","in":"query","required":false,"description":"VALARM minutes before","schema":{"type":"string"}},{"name":"all_day","in":"query","required":false,"description":"true for date-only","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"ics":"BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//oanor//iCal API//EN\r\nCALSCALE:GREGORIAN\r\nMETHOD:PUBLISH\r\nBEGIN:VEVENT\r\nUID:1lou9mf-20260701T100000Z@oanor.dev\r\nDTSTAMP:20260601T234048Z\r\nDTSTART:20260701T100000Z\r\nDTEND:20260701T110000Z\r\nSUMMARY:Team Meeting\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n","event":{"end":"2026-07-01T11:00:00.000Z","start":"2026-07-01T10:00:00.000Z","title":"Team Meeting","all_day":false},"links":{"yahoo":"https://calendar.yahoo.com/?v=60&title=Team%20Meeting&st=20260701T100000Z&dur=0100","google":"https://calendar.google.com/calendar/render?action=TEMPLATE&text=Team%20Meeting&dates=20260701T100000Z/20260701T110000Z","outlook":"https://outlook.live.com/calendar/0/deeplink/compose?subject=Team%20Meeting&startdt=2026-07-01T10%3A00%3A00.000Z&enddt=2026-07-01T11%3A00%3A00.000Z&path=/calendar/action/compose","office365":"https://outlook.office.com/calendar/0/deeplink/compose?subject=Team%20Meeting&startdt=2026-07-01T10%3A00%3A00.000Z&enddt=2026-07-01T11%3A00%3A00.000Z&path=/calendar/action/compose"},"data_uri":"data:text/calendar;charset=utf-8;base64,QkVHSU46VkNBTEVOREFSDQpWRVJTSU9OOjIuMA0KUFJPRElEOi0vL29hbm9yLy9pQ2FsIEFQSS8vRU4NCkNBTFNDQUxFOkdSRUdPUklBTg0KTUVUSE9EOlBVQkxJU0gNCkJFR0lOOlZFVkVOVA0KVUlEOjFsb3U5bWYtMjAyNjA3MDFUMTAwMDAwWkBvYW5vci5kZXYNCkRUU1RBTVA6MjAyNjA2MDFUMjM0MDQ4Wg0KRFRTVEFSVDoyMDI2MDcwMVQxMDAwMDBaDQpEVEVORDoyMDI2MDcwMVQxMTAwMDBaDQpTVU1NQVJZOlRlYW0gTWVldGluZw0KRU5EOlZFVkVOVA0KRU5EOlZDQUxFTkRBUg0K"},"meta":{"timestamp":"2026-06-01T23:40:48.186Z","request_id":"9c91e43d-fa9c-4466-b4bd-1c81226968ee"},"status":"ok","message":"Event built","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/parse":{"get":{"operationId":"get_v1_parse","tags":["iCalendar"],"summary":"Parse .ics into JSON events","description":"","parameters":[{"name":"ics","in":"query","required":true,"description":"Raw .ics text","schema":{"type":"string"},"example":"BEGIN:VCALENDAR\nVERSION:2.0\nBEGIN:VEVENT\nSUMMARY:Sample Event\nDTSTART:20260701T100000Z\nDTEND:20260701T110000Z\nLOCATION:Online\nEND:VEVENT\nEND:VCALENDAR"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"events":[{"end":"20260701T110000Z","start":"20260701T100000Z","title":"Sample Event","location":"Online"}],"event_count":1},"meta":{"timestamp":"2026-06-01T23:40:48.285Z","request_id":"d2de02a2-64d8-4c12-8e77-38d93b3db6e9"},"status":"ok","message":"iCalendar parsed","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Spec & calendar links","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Build a valid RFC 5545 iCalendar event from simple parameters, or parse an .ics file back into structured events. /v1/event?title=Standup&start=2026-07-01T10:00:00Z&end=...&location=...&description=...&rrule=FREQ=WEEKLY returns the ready-to-serve .ics text (with proper escaping, 75-octet line folding, an optional VALARM reminder and RRULE recurrence), a base64 data: URI usable directly as a download link, and 'add to calendar' deep-links for Google, Outlook, Office 365 and Yahoo. Pass start/end as ISO 8601 or unix timestamps (UTC), or use duration (minutes) instead of end, or all_day for date-only events. /v1/parse turns raw .ics text (inline or in the body) back into JSON events. Everything is computed locally with no network calls. Ideal for booking and scheduling flows, event pages, email 'add to calendar' buttons, reminders and no-code automations. A calendar-event builder — distinct from date/time math (datetime), public-holiday data (holidays) and the Jewish calendar (hebcal). No key, no cache.","spec":"RFC 5545 (iCalendar)","endpoints":["/v1/event","/v1/parse","/v1/meta"],"calendar_links":["google","outlook","office365","yahoo"]},"meta":{"timestamp":"2026-06-01T23:40:48.378Z","request_id":"2579b11a-57a9-4a9e-8e61-00ca5f880bdb"},"status":"ok","message":"Meta retrieved","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":2280,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":665,"monthly_call_quota":45000,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2120,"monthly_call_quota":232000,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":5550,"monthly_call_quota":860000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/ical-api"}