API reference
5 endpoints, served at https://orbitwrite.com/api/v1. Each one lists the credentials it accepts, its parameters and every response it can give.
The caller's own feeds (with their tokens), plus — for anyone holding calendarFeed:manageAny (owner/admin) — a token-less roster of every feed in the workspace so they can see who created what and revoke if needed.
A signed-in session only. The Orbitwrite app calls this; an API key is refused.
organizationIdstringRequiredAt least 1 character.
200CalendarFeedListThe caller's feeds and (for managers) the workspace roster
subscriptionsCalendarFeed[]RequiredcanManageAllbooleanRequiredWhether the caller holds calendarFeed:manageAny — i.e. may see the roster below and revoke a teammate's feed
allSubscriptionsWorkspaceCalendarFeed[]RequiredRoster of every feed in the workspace (token-less); empty unless canManageAll
idstringRequirednamestring | nullRequiredstatusesstring[]RequiredlastAccessedAtstring | nullRequiredISO 8601.
createdAtstringRequiredISO 8601.
ownerIdstringRequiredownerNamestring | nullRequiredownerEmailstringRequiredcurl -X GET "https://orbitwrite.com/api/v1/calendar-feeds?organizationId=organizationId" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY"{
"subscriptions": [
{
"id": "string",
"name": "string",
"token": "string",
"statuses": [
"string"
],
"lastAccessedAt": "string",
"createdAt": "string"
}
],
"canManageAll": true,
"allSubscriptions": [
{
"id": "string",
"name": "string",
"statuses": [
"string"
],
"lastAccessedAt": "string",
"createdAt": "string",
"ownerId": "string",
"ownerName": "string",
"ownerEmail": "string"
}
]
}Any member can create feeds for themselves. The response includes the feed's token (its URL secret).
A signed-in session only. The Orbitwrite app calls this; an API key is refused.
organizationIdstringRequiredAt least 1 character.
namestringAt most 100 characters. Defaults to "".
statusesstring[]Statuses the feed surfaces. An unknown status is rejected rather than dropped; an empty list means the default view (scheduled + published).
Defaults to [].
"scheduled""planned""published""draft""pending_approval""failed"200CalendarFeedMutationResultThe feed was created
okbooleanRequiredsubscriptionCalendarFeedRequiredcurl -X POST "https://orbitwrite.com/api/v1/calendar-feeds" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"organizationId": "string"
}'{
"ok": true,
"subscription": {
"id": "string",
"name": "string",
"token": "string",
"statuses": [
"string"
],
"lastAccessedAt": "string",
"createdAt": "string"
}
}Partial update scoped to the caller's own feeds — an omitted field is left unchanged. Deliberately not widened by calendarFeed:manageAny: revoking a teammate's feed is a security action, rewriting their private calendar view is not.
A signed-in session only. The Orbitwrite app calls this; an API key is refused.
feedIdstringRequiredAt least 1 character.
organizationIdstringRequiredAt least 1 character.
namestringThe feed's label. Omit to leave it unchanged; send "" to clear it.
At most 100 characters.
statusesstring[]Statuses the feed surfaces. Omit to leave the current filter unchanged; an empty list means the default view (scheduled + published). An unknown status is rejected rather than dropped.
"scheduled""planned""published""draft""pending_approval""failed"200CalendarFeedMutationResultThe updated feed
okbooleanRequiredsubscriptionCalendarFeedRequiredcurl -X PATCH "https://orbitwrite.com/api/v1/calendar-feeds/{feedId}" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"organizationId": "string"
}'{
"ok": true,
"subscription": {
"id": "string",
"name": "string",
"token": "string",
"statuses": [
"string"
],
"lastAccessedAt": "string",
"createdAt": "string"
}
}Members revoke their own feeds; anyone holding calendarFeed:manageAny (owner/admin) can revoke any feed in the workspace. After this the token 404s.
A signed-in session only. The Orbitwrite app calls this; an API key is refused.
feedIdstringRequiredAt least 1 character.
organizationIdstringRequiredAt least 1 character.
200CalendarFeedDeleteResultThe mutation was applied
okbooleanRequiredcurl -X DELETE "https://orbitwrite.com/api/v1/calendar-feeds/{feedId}?organizationId=organizationId" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY"{
"ok": true
}The iCalendar (.ics) feed behind a calendar-feed subscription. The token is the only credential — no session or API key — so calendar clients can poll it anonymously. A .ics suffix on the token is accepted and ignored.
None. This endpoint is public.
tokenstringRequiredAt least 1 character.
200stringThe feed's events as an iCalendar document
curl -X GET "https://orbitwrite.com/api/v1/calendar/{token}" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY""string"