AthenousDevelopers

Collaborate

Workspaces, members, and invitations. Integrators call https://public-api.athenous.io with X-Api-Key. The app calls https://api.athenous.io with the signed-in session. Paths start at /api/v1/collaborate.

Authentication

Send X-Api-Key: ath_… on the public host. The key needs api (or the legacy default scope) and a Pro, Agency, or Enterprise plan. A key limited to Posts or Ads can still call Collaborate. The account email on the key is the caller. Member userId values are that email.

The app host accepts Authorization: Bearer or the athenous_token cookie, and requires Origin: https://app.athenous.io. The bearer token is the JWT from POST /api/v1/auth/cli/token when the key includes cli.

curl -sS "https://public-api.athenous.io/api/v1/collaborate/workspaces" \
  -H "X-Api-Key: $ATHENOUS_API_KEY"

Seats and roles

The owner counts as a seat. Each pending invitation counts too. The cap follows the workspace owner's plan.

PlanSeats
free, starter1
pro3
agency5
enterpriseUnlimited
RoleWhat it can do
OWNEREverything an admin can do, plus delete the workspace and transfer ownership. Assigned only by creating the workspace or by transfer.
ADMINUpdate the workspace, add and remove members, change roles, invite, cancel, and resend.
MEMBERRead the workspace, its members, and its pending invitations. Default role on an invite.
VIEWERSame read access as a member. Cannot manage people or edit the workspace.

Workspaces

MethodPathWhoResult
POST/api/v1/collaborate/workspacesAny signed-in account201. You become OWNER. Body name (1–255) and optional description.
GET/api/v1/collaborate/workspacesAny signed-in accountArray of workspaces you own or belong to.
GET/api/v1/collaborate/workspaces/{id}MemberOne workspace.
PUT/api/v1/collaborate/workspaces/{id}Owner or adminUpdate name and description.
DELETE/api/v1/collaborate/workspaces/{id}Owner{"deleted": true}.
POST/api/v1/collaborate/workspaces/{id}/transfer-ownershipOwnerBody newOwnerUserId (must already be a member) and optional previousOwnerNewRole. That role defaults to ADMIN and cannot be OWNER.
curl -sS -X POST "https://public-api.athenous.io/api/v1/collaborate/workspaces" \
  -H "X-Api-Key: $ATHENOUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Client North","description":"Organic and paid for this client"}'

Members

MethodPathWhoResult
GET/api/v1/collaborate/workspaces/{id}/membersMemberArray of members.
POST/api/v1/collaborate/workspaces/{id}/membersOwner or admin201. Body userId (account email) and optional role (ADMIN, MEMBER, or VIEWER). Counts toward the seat cap.
PATCH/api/v1/collaborate/workspaces/{id}/members/{memberUserId}/roleOwner or adminBody {"role":"ADMIN"}. Cannot change the owner, and cannot assign OWNER.
DELETE/api/v1/collaborate/workspaces/{id}/members/{memberUserId}Owner or admin, or yourself{"deleted": true}. The owner cannot be removed. Sending your own id leaves the workspace.

Invitations

An invitation is pending for 7 days. Resend sets a new 7-day expiry. An expired invitation has to be cancelled and created again. emailSent is present on create and resend. It is true when Athenous delivered the mail.

MethodPathWhoResult
GET/api/v1/collaborate/workspaces/{id}/invitationsMemberPending invitations for this workspace.
POST/api/v1/collaborate/workspaces/{id}/invitationsOwner or admin201. Body email and optional role. OWNER is stored as MEMBER. A pending invite for that email is rejected. Counts toward the seat cap.
DELETE/api/v1/collaborate/workspaces/{id}/invitations/{invitationId}Owner or adminCancel a pending invitation. {"deleted": true}.
POST/api/v1/collaborate/workspaces/{id}/invitations/{invitationId}/resendOwner or adminPending invitations only. Extends expiresAt by 7 days.
GET/api/v1/collaborate/invitationsThe inviteePending invitations for the signed-in email.
POST/api/v1/collaborate/invitations/{id}/acceptThe inviteeJoin the workspace. The pending invite already counted as a seat.
POST/api/v1/collaborate/invitations/{id}/declineThe inviteeMark the invitation declined.
curl -sS -X POST "https://public-api.athenous.io/api/v1/collaborate/workspaces/$WORKSPACE_ID/invitations" \
  -H "X-Api-Key: $ATHENOUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"email":"sam@example.com","role":"MEMBER"}'

Fields

Workspace

FieldTypeDescription
idUUIDWorkspace id.
ownerIdstringAccount email of the owner.
namestring1 to 255 characters.
descriptionstringEmpty string when none was stored.
createdAtstringISO-8601 UTC.
updatedAtstringISO-8601 UTC.
currentUserRolestring or nullOWNER, ADMIN, MEMBER, or VIEWER.
memberIdUUID or nullYour membership row.

Member

FieldTypeDescription
idUUIDMembership id.
workspaceIdUUIDWorkspace this membership belongs to.
userIdstringAccount email.
rolestringOWNER, ADMIN, MEMBER, or VIEWER.
joinedAtstringWhen this person joined.

Invitation

FieldTypeDescription
idUUIDInvitation id.
workspaceIdUUIDWorkspace being joined.
emailstringInvitee email.
rolestringRole they will receive on accept.
invitedByUserIdstringEmail of the person who sent it.
statusstringPENDING, ACCEPTED, DECLINED, EXPIRED, or CANCELLED.
createdAtstringWhen it was created.
expiresAtstringWhen a pending invitation stops being acceptable.
respondedAtstring or nullWhen it was accepted, declined, or expired.
emailSentbooleanPresent on create and resend only.

Errors

A missing or invalid key or token returns 401. A key without api, or a plan below Pro, returns 403. The public host allows 100 requests per minute per key, or 500 when the key includes batch. A call to api.athenous.io without Origin: https://app.athenous.io returns 403 with {"detail":"Origin not allowed"}.

Validation and rule failures return 400. Unknown ids return 404. Those bodies use timestamp, status, error, message, and path. A body that fails field checks also includes errors[] with field and message.

{
  "timestamp": "2026-10-30T10:00:00Z",
  "status": 400,
  "error": "Bad Request",
  "message": "Team seat limit reached (3 / 3). Remove a member or revoke a pending invite.",
  "path": "/api/v1/collaborate/workspaces/WORKSPACE_ID/invitations"
}