CorrectICS API
Validate and inspect .ics
(iCalendar) files using simple HTTP endpoints. You can self-host the
documentation via the OpenAPI spec or start with the examples below.
Base URL: https://api.correctics.com
Common behaviour
- Free tier rate limit: 5 requests/minute per IP, enforced via Durable Object.
- All responses include
X-Request-Id
— reference it if you contact support. - Validation failures return HTTP
422
withstage
,errors[]
, andwarnings[]
. - Rate limit breaches return HTTP
429
withRetry-After
,X-RateLimit-Limit
, andX-RateLimit-Remaining
. - ICS payloads are processed in memory and not persisted; logs only retain request metadata.
POST /api/validate
Validate a single ICS payload supplied as text/plain
. Add query params or headers to enable autofix behaviour.
Query | Description |
---|---|
policy | Validation profile (rfc default, or google , outlook , apple ). |
autofix | 1 enables safe autofixes (insert VERSION, UID, etc.). |
uid_host | Domain suffix used when generating UIDs during autofix. |
Header | Description |
---|---|
x-correctics-autofix | Alternate way to enable autofixes. |
x-correctics-uid-host | Alternate way to specify UID host. |
x-correctics-clock | ISO timestamp for deterministic autofix values. |
curl -X POST https://api.correctics.com/api/validate \
-H "Content-Type: text/plain" \
--data-binary @calendar.ics
Example 200 response
{
"ok": true,
"stage": "rules",
"policy": "rfc",
"errors": [],
"warnings": []
}
Example 422 response
{
"ok": false,
"stage": "rules",
"policy": "rfc",
"errors": [
{ "code": "RFC.EVENT.DTSTART_MISSING", "severity": "fatal", "message": "VEVENT is missing DTSTART" }
],
"warnings": []
}
POST /api/validate-bulk
Validate multiple ICS files by uploading a ZIP archive. The same query params/headers as the single endpoint apply to every file.
- Maximum 50 files per archive.
- Maximum 5 MiB total uncompressed size.
- Only entries ending in
.ics
are processed (others ignored).
zip calendars.zip a.ics b.ics
curl -X POST https://api.correctics.com/api/validate-bulk \
-H "Content-Type: application/zip" \
--data-binary @calendars.zip
The response aggregates per-file results:
{
"ok": false,
"stage": "bulk",
"counts": { "total": 2, "ok": 1, "failed": 1 },
"files": [
{ "name": "a.ics", "status": 200, "result": { "ok": true, "errors": [] } },
{ "name": "b.ics", "status": 422, "result": { "ok": false, "errors": [{ "code": "RFC.VERSION.MISSING" }] } }
]
}
Error reference
Status | Meaning | Notes |
---|---|---|
200 | Validation succeeded | Warnings may still be present. |
422 | Validation failed | See stage , errors[] , warnings[] . |
400 | Invalid bulk archive | ZIP could not be parsed. |
413 | Bulk limit exceeded | Too many files or >5 MiB uncompressed. |
429 | Rate limit reached | Respect Retry-After before retrying. |
500 | Internal error | Retry and include X-Request-Id if reporting. |
Next steps
Higher plan limits, API keys, and webhook integrations are on the roadmap. Follow the validator repo for updates or drop feedback via the contact form.