CorrectICS

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

Download OpenAPI 3.0 Spec

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 with stage, errors[], and warnings[].
  • Rate limit breaches return HTTP 429 with Retry-After, X-RateLimit-Limit, and X-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.

QueryDescription
policyValidation profile (rfc default, or google, outlook, apple).
autofix1 enables safe autofixes (insert VERSION, UID, etc.).
uid_hostDomain suffix used when generating UIDs during autofix.
HeaderDescription
x-correctics-autofixAlternate way to enable autofixes.
x-correctics-uid-hostAlternate way to specify UID host.
x-correctics-clockISO 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

StatusMeaningNotes
200Validation succeededWarnings may still be present.
422Validation failedSee stage, errors[], warnings[].
400Invalid bulk archiveZIP could not be parsed.
413Bulk limit exceededToo many files or >5 MiB uncompressed.
429Rate limit reachedRespect Retry-After before retrying.
500Internal errorRetry 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.