Axsync API v2

Invitations

Pending invitations to join a workspace. They expire after seven days.

The invitation object

FieldTypeDescription
idstringUnique identifier, prefixed with iv_.
email requiredstringInvitee email.
rolestringRole granted on accept.
expires_attimestampExpiry time.
statusstringpending, accepted or expired.

Example

{
  "id": "iv_8f3k2Q9xLm",
  "email": "sam@example.com",
  "role": "editor",
  "expires_at": "2026-10-22T10:00:00Z",
  "status": "pending"
}

GET /workspaces/{workspace_id}/invitations

List invitations. Returns a paginated list of invitations.

Required scope: members:read

Query parameters

FieldTypeDescription
limitintegerPage size, 1–100. Default 25.
cursorstringCursor from the previous page.
sortstringField to sort by, prefix - for descending.
filterstringFilter expression, see Filtering and sorting.

Request

curl -X GET "https://api.axnode.net/v2/workspaces/workspace_id/invitations" \
  -H "Authorization: Bearer $AXSYNC_TOKEN"
const res = await fetch('https://api.axnode.net/v2/workspaces/workspace_id/invitations', {
  method: 'GET',
  headers: { Authorization: `Bearer ${token}` }
});
const data = await res.json();
import requests

res = requests.get(
    'https://api.axnode.net/v2/workspaces/workspace_id/invitations',
    headers={'Authorization': f'Bearer {token}'},
)
data = res.json()

Response 200

{
  "data": [
    {
      "id": "iv_8f3k2Q9xLm",
      "email": "sam@example.com",
      "role": "editor",
      "expires_at": "2026-10-22T10:00:00Z",
      "status": "pending"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

POST /workspaces/{workspace_id}/invitations

Create an invitation. Creates an invitation.

Required scope: members:write

Body parameters

FieldTypeDescription
email requiredstringInvitee email.
rolestringRole granted on accept.
expires_attimestampExpiry time.
statusstringpending, accepted or expired.

Request

curl -X POST "https://api.axnode.net/v2/workspaces/workspace_id/invitations" \
  -H "Authorization: Bearer $AXSYNC_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"email": "sam@example.com"}'
const res = await fetch('https://api.axnode.net/v2/workspaces/workspace_id/invitations', {
  method: 'POST',
  headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({"email": "sam@example.com"})
});
const data = await res.json();
import requests

res = requests.post(
    'https://api.axnode.net/v2/workspaces/workspace_id/invitations',
    headers={'Authorization': f'Bearer {token}'}, json={"email": "sam@example.com"},
)
data = res.json()

Response 201

{
  "id": "iv_8f3k2Q9xLm",
  "email": "sam@example.com",
  "role": "editor",
  "expires_at": "2026-10-22T10:00:00Z",
  "status": "pending"
}

GET /workspaces/{workspace_id}/invitations/{id}

Retrieve an invitation. Retrieves an invitation by its identifier.

Required scope: members:read

Request

curl -X GET "https://api.axnode.net/v2/workspaces/workspace_id/invitations/iv_8f3k2Q9xLm" \
  -H "Authorization: Bearer $AXSYNC_TOKEN"
const res = await fetch('https://api.axnode.net/v2/workspaces/workspace_id/invitations/iv_8f3k2Q9xLm', {
  method: 'GET',
  headers: { Authorization: `Bearer ${token}` }
});
const data = await res.json();
import requests

res = requests.get(
    'https://api.axnode.net/v2/workspaces/workspace_id/invitations/iv_8f3k2Q9xLm',
    headers={'Authorization': f'Bearer {token}'},
)
data = res.json()

Response 200

{
  "id": "iv_8f3k2Q9xLm",
  "email": "sam@example.com",
  "role": "editor",
  "expires_at": "2026-10-22T10:00:00Z",
  "status": "pending"
}

DELETE /workspaces/{workspace_id}/invitations/{id}

Delete an invitation. Permanently deletes an invitation. This cannot be undone.

Required scope: members:write

Request

curl -X DELETE "https://api.axnode.net/v2/workspaces/workspace_id/invitations/iv_8f3k2Q9xLm" \
  -H "Authorization: Bearer $AXSYNC_TOKEN"
const res = await fetch('https://api.axnode.net/v2/workspaces/workspace_id/invitations/iv_8f3k2Q9xLm', {
  method: 'DELETE',
  headers: { Authorization: `Bearer ${token}` }
});
const data = await res.json();
import requests

res = requests.delete(
    'https://api.axnode.net/v2/workspaces/workspace_id/invitations/iv_8f3k2Q9xLm',
    headers={'Authorization': f'Bearer {token}'},
)
data = res.json()

Response 200

{
  "deleted": true,
  "id": "iv_8f3k2Q9xLm"
}

POST /workspaces/{workspace_id}/invitations/{id}/resend

Resend an invitation. Sends the email again and extends the expiry.

Required scope: members:write

Body parameters

FieldTypeDescription
email requiredstringInvitee email.
rolestringRole granted on accept.
expires_attimestampExpiry time.
statusstringpending, accepted or expired.

Request

curl -X POST "https://api.axnode.net/v2/workspaces/workspace_id/invitations/iv_8f3k2Q9xLm/resend" \
  -H "Authorization: Bearer $AXSYNC_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"email": "sam@example.com"}'
const res = await fetch('https://api.axnode.net/v2/workspaces/workspace_id/invitations/iv_8f3k2Q9xLm/resend', {
  method: 'POST',
  headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({"email": "sam@example.com"})
});
const data = await res.json();
import requests

res = requests.post(
    'https://api.axnode.net/v2/workspaces/workspace_id/invitations/iv_8f3k2Q9xLm/resend',
    headers={'Authorization': f'Bearer {token}'}, json={"email": "sam@example.com"},
)
data = res.json()

Response 200

{
  "id": "iv_8f3k2Q9xLm",
  "email": "sam@example.com",
  "role": "editor",
  "expires_at": "2026-10-22T10:00:00Z",
  "status": "pending"
}