API reference

Activity

2 endpoints, served at https://orbitwrite.com/api/v1. Each one lists the credentials it accepts, its parameters and every response it can give.

List a workspace's activity feed#

GET/api/v1/activity

Newest-first collaboration and posting activity — publishes, schedules, approvals, comments, campaigns and team changes. Rows from one composer session collapse into a single entry whose data.accounts lists every channel. Cursor-paged rather than offset-paged: the feed grows at the head, so an offset would re-show rows as new activity lands mid-paging.

Authentication

An API key or OAuth access token as a bearer token, or a signed-in session.

Query parameters

organizationIdstring

Session callers only — an API key already determines the workspace.

At least 1 character.

limitinteger

Between 1 and 100. Defaults to 50.

cursorstring

Opaque cursor from a previous response's nextCursor. Omit for the first page.

typestring | string[]

Filter by event type. Repeat for OR (e.g. ?type=post.published&type=approval.approved).

Responses

200ActivityFeed

A page of activity

Response attributes
entriesActivityEntry[]Required
Child attributes
idstringRequired
typestringRequired
  • "post.created"
  • "post.edited"
  • "post.title_changed"
  • "post.tags_changed"
  • "post.campaign_changed"
  • "post.ungrouped"
  • "post.planned"
  • "post.replanned"
  • "post.unplanned"
  • "post.scheduled"
  • "post.rescheduled"
  • "post.unscheduled"
  • "post.published"
  • "post.failed"
  • "post.returned_to_draft"
  • "post.deleted"
  • "approval.requested"
  • "approval.reviewers_changed"
  • "approval.approved"
  • "approval.rejected"
  • "approval.reset"
  • "approval.removed"
  • "comment.added"
  • "campaign.created"
  • "campaign.completed"
  • "member.invited"
  • "member.joined"
  • "streak.reached"
actorActivityActor | nullRequired

Null for system-generated events (a campaign reaching its end date, a streak milestone).

Child attributes
idstringRequired
namestringRequired
imagestring | nullRequired
targetTypestring | nullRequired
targetIdstring | nullRequired
dataobjectRequired

Display payload; shape varies per type (see ActivityDataMap in @orbitwrite/core/activity). Every field is a copy taken at write time, so a deleted post's activity line still renders.

createdAtstringRequired

ISO 8601.

nextCursorstring | nullRequired

Pass back as cursor for the next page; null on the last page.

400Error

Invalid request

Response attributes
errorstringRequired
issuesany[]
401Error

Not signed in

Response attributes
errorstringRequired
issuesany[]
403Error

Not a member of the organization

Response attributes
errorstringRequired
issuesany[]
GET /api/v1/activity
curl -X GET "https://orbitwrite.com/api/v1/activity" \
  -H "Authorization: Bearer $ORBITWRITE_API_KEY"
Response
{
  "entries": [
    {
      "id": "string",
      "type": "post.created",
      "actor": {
        "id": "string",
        "name": "string",
        "image": "string"
      },
      "targetType": "string",
      "targetId": "string",
      "data": {},
      "createdAt": "string"
    }
  ],
  "nextCursor": "string"
}

List one post's activity#

GET/api/v1/posts/{groupId}/activity

Newest-first history of one post: who created it, content edits (one entry per editing session, naming the channels that changed), title / tag / campaign changes, schedules and reschedules, approval requests and decisions, comments, publishes, failures and deletions. Unpaged — it backs the composer's Info panel, not a history browser.

Authentication

An API key or OAuth access token as a bearer token, or a signed-in session.

Path parameters

groupIdstringRequired

The post's composer group id.

At least 1 character.

Query parameters

limitinteger

Between 1 and 100. Defaults to 20.

Responses

200PostActivityFeed

The post's activity, newest first

Response attributes
entriesActivityEntry[]Required
Child attributes
idstringRequired
typestringRequired
  • "post.created"
  • "post.edited"
  • "post.title_changed"
  • "post.tags_changed"
  • "post.campaign_changed"
  • "post.ungrouped"
  • "post.planned"
  • "post.replanned"
  • "post.unplanned"
  • "post.scheduled"
  • "post.rescheduled"
  • "post.unscheduled"
  • "post.published"
  • "post.failed"
  • "post.returned_to_draft"
  • "post.deleted"
  • "approval.requested"
  • "approval.reviewers_changed"
  • "approval.approved"
  • "approval.rejected"
  • "approval.reset"
  • "approval.removed"
  • "comment.added"
  • "campaign.created"
  • "campaign.completed"
  • "member.invited"
  • "member.joined"
  • "streak.reached"
actorActivityActor | nullRequired

Null for system-generated events (a campaign reaching its end date, a streak milestone).

Child attributes
idstringRequired
namestringRequired
imagestring | nullRequired
targetTypestring | nullRequired
targetIdstring | nullRequired
dataobjectRequired

Display payload; shape varies per type (see ActivityDataMap in @orbitwrite/core/activity). Every field is a copy taken at write time, so a deleted post's activity line still renders.

createdAtstringRequired

ISO 8601.

400Error

Invalid request

Response attributes
errorstringRequired
issuesany[]
401Error

Not signed in

Response attributes
errorstringRequired
issuesany[]
403Error

Not a member of the organization

Response attributes
errorstringRequired
issuesany[]
404Error

The resource does not exist

Response attributes
errorstringRequired
issuesany[]
GET /api/v1/posts/{groupId}/activity
curl -X GET "https://orbitwrite.com/api/v1/posts/{groupId}/activity" \
  -H "Authorization: Bearer $ORBITWRITE_API_KEY"
Response
{
  "entries": [
    {
      "id": "string",
      "type": "post.created",
      "actor": {
        "id": "string",
        "name": "string",
        "image": "string"
      },
      "targetType": "string",
      "targetId": "string",
      "data": {},
      "createdAt": "string"
    }
  ]
}