Skip to main content
Cativa organizes content in a four-level hierarchy. Understanding this hierarchy is essential to know which endpoint to call and what can be created via API versus what’s configured by the admin in the dashboard.

The hierarchy

Every tenant has exactly one Community (the customer’s whole site). Inside it, the admin creates multiple Spaces, each with its own Groups. Groups contain Posts, Comments and, optionally, Courses.
The difference between Space and Group is easy to remember: Space is the thematic division shown in the main navigation; Group is where conversation happens and where badge-based permissions are applied.

Who creates what

The general rule: structure is the admin’s job, content is the partner’s job.
Endpoints to create Space, Group and Course exist but require admin scope. Partner keys with default scope (recommended) cannot reach them. Ask the tenant admin to set up the structure in the dashboard: that’s the natural flow. The write sections below assume a key with admin scope.

Access control: badge gates the group

Each Group can require one or more badges for a user to enter. This is configured in the dashboard, on each group’s access screen:
The partner does not configure this rule (it lives in the admin) but triggers the transition: by assigning a badge to the user, they gain automatic access to every group that accepts that badge. See Badges as Permissions.

Read endpoints

Even without creating structure, you almost always need to read groups: to show them to the user in your app or to discover IDs before creating posts.

List groups

GET /community/groups returns a paginated list. It accepts a space filter and pagination.
Illustrative response (paginated):
The JSON on this page is illustrative. The authoritative field-by-field schema lives in the API Reference tab (Group tag).

Group detail

GET /community/groups/{groupId} returns the full group, including allowedBadges (the badges that unlock entry) and the caller’s own flags (isInGroup, isModerator).

List members

GET /community/groups/{groupId}/members returns paginated members, with role, moderator flag, and access expiration date (when present).

Group CRUD (admin scope)

Create a group

Illustrative response (201 Created):
allowedBadges on create already binds the group to the badges that unlock entry, without touching the dashboard. Combine it with badge assignment to automate access end to end.

Members: join, leave, invite, and remove

Join and leave

join respects access control: if the group requires a badge the user doesn’t have, it returns 403.

Invite and remove

Invite by email when you only have the email; use userId when you’ve already resolved the user.

Bulk fill

To populate a group at once, without inviting one by one:
add/by-allowed-badges adds every user who already holds one of the group’s allowedBadges. It’s how you “reconcile” the group after configuring badges.

Per-member expiration

Set a date when that member’s access automatically expires:

Create posts and comments

Posts live inside a Group. You need the groupId first: fetch it via the listing or store it at onboarding.
The post author is always the user associated with the authenticated credential. You do not (and cannot) send authorId in the body.
The user tied to the credential must have access to the group (at least one matching badge, or membership in the open group). Without access, the call returns 403 forbidden. To comment, post to POST /community/posts/{postId}/comments:
Same access rule: the user must be able to see the post.

Common errors

The user lacks a badge that unlocks the group. Assign the right badge first (see Badges as Permissions) or confirm the group is open.
The group doesn’t exist in that tenant, or it’s secret and hidden from discovery. Confirm the groupId from the listing.
Creating/editing/deleting a group and bulk-adding require admin scope. Ask the tenant admin for the right credential.

Anti-pattern: one group per customer via API

Don’t model “one group per customer”. Groups are static entities defined by the admin: they represent discussion communities, not ephemeral containers. To customize access per customer, use badges: create a single “VIP Members” group and assign the Premium badge to the right customers.

Next steps

Badges as Permissions

How to use badges to grant access without creating new structure.

Webhooks

Receive events when posts are created, users join groups, etc.