API reference
15 endpoints, served at https://orbitwrite.com/api/v1. Each one lists the credentials it accepts, its parameters and every response it can give.
/api/v1/inbox/inboxesPOST/api/v1/inbox/inboxesPUT/api/v1/inbox/inboxes/orderGET/api/v1/inbox/statusPUT/api/v1/inbox/statusPOST/api/v1/inbox/presenceGET/api/v1/inbox/teamGET/api/v1/inbox/settingsPUT/api/v1/inbox/settingsGET/api/v1/inbox/assignmentPUT/api/v1/inbox/assignmentPOST/api/v1/inbox/assignment/distributeGET/api/v1/inbox/inboxes/{inboxId}PATCH/api/v1/inbox/inboxes/{inboxId}DEL/api/v1/inbox/inboxes/{inboxId}Requires teamInbox:read. The workspace's routable inboxes with their sources and membership.
An API key or OAuth access token as a bearer token, or a signed-in session.
organizationIdstringSession callers only — an API key already determines the workspace.
At least 1 character.
200objectThe team inboxes
inboxesTeamInbox[]RequiredidstringRequirednamestringRequireddescriptionstring | nullRequiredmethodstringRequired"manual""round_robin""balanced"skillsEnabledbooleanRequiredawayReassignbooleanRequiredrrAssignWhenAwaybooleanRequiredpositionnumberRequiredRouting order: a new conversation goes to the first team inbox, lowest position first, with a source that matches it. Set with PUT /inbox/inboxes/order.
wrapUpMinutesnumberRequiredcreatedAtstringRequiredupdatedAtstringRequiredsourcesTeamInboxSource[]Requiredcurl -X GET "https://orbitwrite.com/api/v1/inbox/inboxes" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY"{
"inboxes": [
{
"id": "string",
"name": "string",
"description": "string",
"method": "manual",
"skillsEnabled": true,
"awayReassign": true,
"rrAssignWhenAway": true,
"position": 0,
"wrapUpMinutes": 0,
"createdAt": "string",
"updatedAt": "string",
"sources": [
{
"id": "string",
"accountId": "string",
"platform": "string",
"type": "reply",
"keywords": [
"string"
]
}
],
"members": [
{
"userId": "string",
"tier": "primary",
"capacity": 0,
"skills": [
"string"
]
}
]
}
]
}Requires teamInbox:create (manager+). A team inbox receives what its sources claim — the first team inbox in the routing order (PUT /inbox/inboxes/order; a new one goes last) with a matching source wins — and everything else stays with the workspace's own assignment (/inbox/assignment). A source needs at least one condition: account, platform, type, or keywords.
An API key or OAuth access token as a bearer token, or a signed-in session.
organizationIdstringSession callers only — an API key already determines the workspace.
At least 1 character.
namestringRequiredBetween 1 and 120 characters.
descriptionstring | nullAt most 500 characters.
methodstring"manual""round_robin""balanced"skillsEnabledbooleanawayReassignbooleanrrAssignWhenAwaybooleanwrapUpMinutesintegerBetween 0 and 240.
sourcesobject[]At most 50 items.
200TeamInboxThe created inbox
idstringRequirednamestringRequireddescriptionstring | nullRequiredmethodstringRequired"manual""round_robin""balanced"skillsEnabledbooleanRequiredawayReassignbooleanRequiredrrAssignWhenAwaybooleanRequiredpositionnumberRequiredRouting order: a new conversation goes to the first team inbox, lowest position first, with a source that matches it. Set with PUT /inbox/inboxes/order.
wrapUpMinutesnumberRequiredcreatedAtstringRequiredupdatedAtstringRequiredsourcesTeamInboxSource[]Requiredcurl -X POST "https://orbitwrite.com/api/v1/inbox/inboxes" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "string"
}'{
"id": "string",
"name": "string",
"description": "string",
"method": "manual",
"skillsEnabled": true,
"awayReassign": true,
"rrAssignWhenAway": true,
"position": 0,
"wrapUpMinutes": 0,
"createdAt": "string",
"updatedAt": "string",
"sources": [
{
"id": "string",
"accountId": "string",
"platform": "string",
"type": "reply",
"keywords": [
"string"
]
}
],
"members": [
{
"userId": "string",
"tier": "primary",
"capacity": 0,
"skills": [
"string"
]
}
]
}Requires teamInbox:update (manager+). A new conversation goes to the first team inbox, in this order, with a source that matches it; anything no team inbox claims goes to the workspace's assignment. inboxIds must list every team inbox exactly once.
An API key or OAuth access token as a bearer token, or a signed-in session.
organizationIdstringSession callers only — an API key already determines the workspace.
At least 1 character.
inboxIdsstring[]RequiredAt most 200 items.
200objectThe team inboxes, in their new order
inboxesTeamInbox[]RequiredidstringRequirednamestringRequireddescriptionstring | nullRequiredmethodstringRequired"manual""round_robin""balanced"skillsEnabledbooleanRequiredawayReassignbooleanRequiredrrAssignWhenAwaybooleanRequiredpositionnumberRequiredRouting order: a new conversation goes to the first team inbox, lowest position first, with a source that matches it. Set with PUT /inbox/inboxes/order.
wrapUpMinutesnumberRequiredcreatedAtstringRequiredupdatedAtstringRequiredsourcesTeamInboxSource[]Requiredcurl -X PUT "https://orbitwrite.com/api/v1/inbox/inboxes/order" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"inboxIds": [
"string"
]
}'{
"inboxes": [
{
"id": "string",
"name": "string",
"description": "string",
"method": "manual",
"skillsEnabled": true,
"awayReassign": true,
"rrAssignWhenAway": true,
"position": 0,
"wrapUpMinutes": 0,
"createdAt": "string",
"updatedAt": "string",
"sources": [
{
"id": "string",
"accountId": "string",
"platform": "string",
"type": "reply",
"keywords": [
"string"
]
}
],
"members": [
{
"userId": "string",
"tier": "primary",
"capacity": 0,
"skills": [
"string"
]
}
]
}
]
}Requires a signed-in user. The caller's own status.
A signed-in session only. The Orbitwrite app calls this; an API key is refused.
organizationIdstringSession callers only — an API key already determines the workspace.
At least 1 character.
200TeammateStatusThe caller's status
curl -X GET "https://orbitwrite.com/api/v1/inbox/status" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY"{
"userId": "string",
"status": "active",
"autoAway": true,
"updatedAt": "string"
}Requires inboxStatus:update for your own status; naming another userId needs inboxStatus:manageAny (manager+) and a member of the workspace. A workspace API key has no status of its own, so it must name userId and needs inboxStatus:manageAny. Away/away_reassign gate a teammate out of automatic assignment.
An API key or OAuth access token as a bearer token, or a signed-in session.
organizationIdstringSession callers only — an API key already determines the workspace.
At least 1 character.
userIdstringAt least 1 character.
statusstringRequired"active""away""away_reassign"200TeammateStatusThe updated status
curl -X PUT "https://orbitwrite.com/api/v1/inbox/status" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": "active"
}'{
"userId": "string",
"status": "active",
"autoAway": true,
"updatedAt": "string"
}Requires a signed-in user. Records the caller as active so the auto-away sweep doesn't flag them; resuming after an auto-away clears it immediately.
A signed-in session only. The Orbitwrite app calls this; an API key is refused.
organizationIdstringSession callers only — an API key already determines the workspace.
At least 1 character.
200objectRecorded
okbooleanRequiredcurl -X POST "https://orbitwrite.com/api/v1/inbox/presence" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"organizationId": "string"
}'{
"ok": true
}Requires inboxStatus:read. Every member with their availability and current open-conversation load.
An API key or OAuth access token as a bearer token, or a signed-in session.
organizationIdstringSession callers only — an API key already determines the workspace.
At least 1 character.
200objectThe team pool
curl -X GET "https://orbitwrite.com/api/v1/inbox/team" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY"{
"members": [
{
"userId": "string",
"name": "string",
"avatarUrl": "string",
"status": "active",
"autoAway": true,
"openCount": 0
}
]
}Requires teamInbox:read. Defaults when never configured.
An API key or OAuth access token as a bearer token, or a signed-in session.
organizationIdstringSession callers only — an API key already determines the workspace.
At least 1 character.
200InboxSettingsThe settings
defaultMemberCapacitynumberRequiredautoAwayThresholdMinutesnumberRequiredautoAwayPausesAssignmentbooleanRequiredcollisionHandlingstringRequired"off""warn""soft_lock"curl -X GET "https://orbitwrite.com/api/v1/inbox/settings" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY"{
"defaultMemberCapacity": 0,
"autoAwayThresholdMinutes": 0,
"autoAwayPausesAssignment": true,
"collisionHandling": "off"
}Requires teamInbox:update (manager+). Partial — omitted fields stay.
An API key or OAuth access token as a bearer token, or a signed-in session.
organizationIdstringSession callers only — an API key already determines the workspace.
At least 1 character.
defaultMemberCapacityintegerBetween 1 and 1000.
autoAwayThresholdMinutesintegerBetween 1 and 1440.
autoAwayPausesAssignmentbooleancollisionHandlingstring"off""warn""soft_lock"200InboxSettingsThe updated settings
defaultMemberCapacitynumberRequiredautoAwayThresholdMinutesnumberRequiredautoAwayPausesAssignmentbooleanRequiredcollisionHandlingstringRequired"off""warn""soft_lock"curl -X PUT "https://orbitwrite.com/api/v1/inbox/settings" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"organizationId": "string",
"defaultMemberCapacity": 1,
"autoAwayThresholdMinutes": 1,
"autoAwayPausesAssignment": true,
"collisionHandling": "off"
}'{
"defaultMemberCapacity": 0,
"autoAwayThresholdMinutes": 0,
"autoAwayPausesAssignment": true,
"collisionHandling": "off"
}Requires teamInbox:read. The method and rotation applied to every conversation no team inbox claims, plus waitingCount — how many open conversations have no owner. A workspace that has never changed it reads as the default: round robin across everyone.
An API key or OAuth access token as a bearer token, or a signed-in session.
organizationIdstringSession callers only — an API key already determines the workspace.
At least 1 character.
200InboxAssignmentThe workspace's assignment
methodstringRequired"manual""round_robin""balanced"allMembersbooleanRequiredThe rotation is every workspace member, including people who join later. When false, members is the rotation.
membersTeamInboxMember[]RequiredThe named rotation. Kept while allMembers is on, so switching back restores it.
rrAssignWhenAwaybooleanRequiredwrapUpMinutesnumberRequiredwaitingCountnumberRequiredOpen conversations with no owner right now.
waitingInManualobject[]RequiredOf the waiting conversations, those routing files under a manual inbox, per inbox. POST /inbox/assignment/distribute can't assign these; someone pulls them.
inboxIdstringRequirednamestringRequiredisWorkspacebooleanRequiredThe workspace inbox itself — the workspace's assignment is manual.
countintegerRequiredcurl -X GET "https://orbitwrite.com/api/v1/inbox/assignment" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY"{
"method": "manual",
"allMembers": true,
"members": [
{
"userId": "string",
"tier": "primary",
"capacity": 0,
"skills": [
"string"
]
}
],
"rrAssignWhenAway": true,
"wrapUpMinutes": 0,
"waitingCount": 0,
"waitingInManual": [
{
"inboxId": "string",
"name": "string",
"isWorkspace": true,
"count": 0
}
]
}Requires teamInbox:update (manager+). A patch: omitted fields keep their value. allMembers:true puts every workspace member in the rotation, including people who join later; with it off, members is the rotation and must name someone while the method assigns automatically. Applies to conversations arriving after it — POST /inbox/assignment/distribute hands out the ones already waiting.
An API key or OAuth access token as a bearer token, or a signed-in session.
organizationIdstringSession callers only — an API key already determines the workspace.
At least 1 character.
methodstring"manual""round_robin""balanced"allMembersbooleanmembersobject[]At most 200 items.
rrAssignWhenAwaybooleanwrapUpMinutesintegerBetween 0 and 240.
200InboxAssignmentThe updated assignment
methodstringRequired"manual""round_robin""balanced"allMembersbooleanRequiredThe rotation is every workspace member, including people who join later. When false, members is the rotation.
membersTeamInboxMember[]RequiredThe named rotation. Kept while allMembers is on, so switching back restores it.
rrAssignWhenAwaybooleanRequiredwrapUpMinutesnumberRequiredwaitingCountnumberRequiredOpen conversations with no owner right now.
waitingInManualobject[]RequiredOf the waiting conversations, those routing files under a manual inbox, per inbox. POST /inbox/assignment/distribute can't assign these; someone pulls them.
inboxIdstringRequirednamestringRequiredisWorkspacebooleanRequiredThe workspace inbox itself — the workspace's assignment is manual.
countintegerRequiredcurl -X PUT "https://orbitwrite.com/api/v1/inbox/assignment" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"organizationId": "string",
"method": "manual",
"allMembers": true,
"members": [
{
"userId": "string"
}
],
"rrAssignWhenAway": true,
"wrapUpMinutes": 0
}'{
"method": "manual",
"allMembers": true,
"members": [
{
"userId": "string",
"tier": "primary",
"capacity": 0,
"skills": [
"string"
]
}
],
"rrAssignWhenAway": true,
"wrapUpMinutes": 0,
"waitingCount": 0,
"waitingInManual": [
{
"inboxId": "string",
"name": "string",
"isWorkspace": true,
"count": 0
}
]
}Requires teamInbox:update (manager+). Assigns open conversations that have no owner, oldest first, through the same routing a new arrival gets — the workspace's assignment, or a team inbox's when one claims the conversation. Routing only decides a conversation when it arrives, so this is how a backlog gets owners. Up to 500 a call; waiting is how many still have none (a manual method, or nobody available, assigns nothing), and waitingInManual which of those a manual inbox holds — another call won't assign them.
An API key or OAuth access token as a bearer token, or a signed-in session.
organizationIdstringSession callers only — an API key already determines the workspace.
At least 1 character.
200objectHow many were assigned, and how many still wait
assignedintegerRequiredwaitingintegerRequiredwaitingInManualobject[]RequiredOf the waiting conversations, those routing files under a manual inbox, per inbox. POST /inbox/assignment/distribute can't assign these; someone pulls them.
inboxIdstringRequirednamestringRequiredisWorkspacebooleanRequiredThe workspace inbox itself — the workspace's assignment is manual.
countintegerRequiredcurl -X POST "https://orbitwrite.com/api/v1/inbox/assignment/distribute" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"organizationId": "string"
}'{
"assigned": 0,
"waiting": 0,
"waitingInManual": [
{
"inboxId": "string",
"name": "string",
"isWorkspace": true,
"count": 0
}
]
}Requires teamInbox:read.
An API key or OAuth access token as a bearer token, or a signed-in session.
inboxIdstringRequiredAt least 1 character.
organizationIdstringSession callers only — an API key already determines the workspace.
At least 1 character.
200TeamInboxThe team inbox
idstringRequirednamestringRequireddescriptionstring | nullRequiredmethodstringRequired"manual""round_robin""balanced"skillsEnabledbooleanRequiredawayReassignbooleanRequiredrrAssignWhenAwaybooleanRequiredpositionnumberRequiredRouting order: a new conversation goes to the first team inbox, lowest position first, with a source that matches it. Set with PUT /inbox/inboxes/order.
wrapUpMinutesnumberRequiredcreatedAtstringRequiredupdatedAtstringRequiredsourcesTeamInboxSource[]Requiredcurl -X GET "https://orbitwrite.com/api/v1/inbox/inboxes/{inboxId}" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY"{
"id": "string",
"name": "string",
"description": "string",
"method": "manual",
"skillsEnabled": true,
"awayReassign": true,
"rrAssignWhenAway": true,
"position": 0,
"wrapUpMinutes": 0,
"createdAt": "string",
"updatedAt": "string",
"sources": [
{
"id": "string",
"accountId": "string",
"platform": "string",
"type": "reply",
"keywords": [
"string"
]
}
],
"members": [
{
"userId": "string",
"tier": "primary",
"capacity": 0,
"skills": [
"string"
]
}
]
}Requires teamInbox:update (manager+). sources and members, when present, replace the existing lists.
An API key or OAuth access token as a bearer token, or a signed-in session.
inboxIdstringRequiredAt least 1 character.
organizationIdstringSession callers only — an API key already determines the workspace.
At least 1 character.
namestringBetween 1 and 120 characters.
descriptionstring | nullAt most 500 characters.
methodstring"manual""round_robin""balanced"skillsEnabledbooleanawayReassignbooleanrrAssignWhenAwaybooleanwrapUpMinutesintegerBetween 0 and 240.
sourcesobject[]At most 50 items.
200TeamInboxThe updated inbox
idstringRequirednamestringRequireddescriptionstring | nullRequiredmethodstringRequired"manual""round_robin""balanced"skillsEnabledbooleanRequiredawayReassignbooleanRequiredrrAssignWhenAwaybooleanRequiredpositionnumberRequiredRouting order: a new conversation goes to the first team inbox, lowest position first, with a source that matches it. Set with PUT /inbox/inboxes/order.
wrapUpMinutesnumberRequiredcreatedAtstringRequiredupdatedAtstringRequiredsourcesTeamInboxSource[]Requiredcurl -X PATCH "https://orbitwrite.com/api/v1/inbox/inboxes/{inboxId}" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"organizationId": "string",
"name": "string",
"description": "string",
"method": "manual",
"skillsEnabled": true,
"awayReassign": true,
"rrAssignWhenAway": true,
"wrapUpMinutes": 0,
"sources": [
{
"accountId": "string",
"platform": "bluesky",
"type": "reply",
"keywords": [
"string"
]
}
],
"members": [
{
"userId": "string"
}
]
}'{
"id": "string",
"name": "string",
"description": "string",
"method": "manual",
"skillsEnabled": true,
"awayReassign": true,
"rrAssignWhenAway": true,
"position": 0,
"wrapUpMinutes": 0,
"createdAt": "string",
"updatedAt": "string",
"sources": [
{
"id": "string",
"accountId": "string",
"platform": "string",
"type": "reply",
"keywords": [
"string"
]
}
],
"members": [
{
"userId": "string",
"tier": "primary",
"capacity": 0,
"skills": [
"string"
]
}
]
}Requires teamInbox:delete (manager+). Its conversations keep their owners and go back to the workspace's own assignment.
An API key or OAuth access token as a bearer token, or a signed-in session.
inboxIdstringRequiredAt least 1 character.
organizationIdstringSession callers only — an API key already determines the workspace.
At least 1 character.
200objectDeleted
okbooleanRequiredcurl -X DELETE "https://orbitwrite.com/api/v1/inbox/inboxes/{inboxId}" \
-H "Authorization: Bearer $ORBITWRITE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"organizationId": "string"
}'{
"ok": true
}