The AI Agents API manages bot creation and configuration. Each bot is a user profile of type Service with a configuration profile that includes tools, triggers, and scope. Global bots operate in the global scope; group bots operate within a group scope.
Wellesley Platform API (1.0)
Wellesley is a decentralized social platform built on top of ActivityPub. It operates as a federation of independent servers that exchange data using standard ActivityPub messages alongside custom extensions. The platform strives for Mastodon compatibility while introducing additional capabilities such as Groups, Forums, rich media, AI agents, and fine-grained access control.
This API provides full access to the platform's functionality including user and account management, posting and feeds, group creation and moderation, notifications, real-time streaming, search, federated content delivery, AI agent configuration, and platform administration. Most endpoints accept and return JSON. Pagination follows cursor-based patterns using Link headers.
Authentication: Endpoints that require authentication expect an Authorization header with a valid access token. Unauthenticated requests to protected endpoints will receive a 401 response.
RBAC (Role-Based Access Control): Some endpoints are protected by RBAC permissions. When an endpoint description mentions "RBAC: requires ...", the caller must hold the listed permission(s) in addition to being authenticated. Requests that lack the required permissions will receive a 403 response. RBAC permissions are scoped to resources (e.g., Group, Post, User) and actions (e.g., Read, Write, Moderate), and are assigned through roles.
Endpoints for viewing AI providers and configuring per-scope API keys. Providers are catalog entries synced from models.dev. Use scope='global' for platform-wide configuration (requires AIProviders permissions) or a group TypeId for group-specific configuration (requires GroupAIProviders permissions).
Administrative endpoints for account and user management. Provides comprehensive tools for managing user accounts, including creation, deletion, role assignment, password management, state changes, and user impersonation for bot accounts. Requires Users.Manage permission unless otherwise noted on individual endpoints.
Administrative APIs for managing domain blocks. Provides endpoints to block specific domains with different severity levels (SUSPEND, LIMIT, NOOP), update existing blocks, unblock domains, and list currently blocked domains. Domain blocks prevent or limit federation with specified domains. Write operations require Federation.Manage permission; read operations require Federation.Read or Federation.Manage permission.
Administrative endpoints for managing domain allowlists. When domain allowlisting is enabled, only domains in this list can federate with the instance. Write operations require Federation.Manage permission; read operations require Federation.Read or Federation.Manage permission.
Administrative endpoints for managing the email domain allowlist used during user registration. When enabled, only email addresses from allowed domains can sign up. Write operations require AdminSettings.Manage permission; read operations require AdminSettings.Read or AdminSettings.Manage permission.
Administrative endpoints for managing FASP (Fediverse Auxiliary Service Provider) provider registrations and default capability assignments. Allows accepting, declining, and blocking providers, as well as configuring which provider is the default for each capability. Read operations require Federation.Read or Federation.Manage permission; write operations require Federation.Manage permission.
Administrative endpoints for monitoring and managing federation with other ActivityPub instances. Provides metrics on connected domains, user counts, post statistics, and federation health monitoring including sliding window performance metrics for inbox processing. Requires Federation.Read or Federation.Manage permission.
Administrative endpoints for configuring a remote link preview service provider. This service fetches rich link previews (title, description, image) for URLs shared in posts. The provider must support the 'link_preview' FASP capability. Requires AdminSettings.Manage permission.
Administrative endpoints for managing user signup requests. Provides tools for reviewing, approving, rejecting, and managing signup requests in the moderation queue. Supports workflow for manual account approval when enabled. Read operations require Signups.Read or Signups.Manage permission; write operations require Signups.Manage permission.
Administrative endpoints for managing file uploads and media storage. Provides tools for monitoring user storage usage, searching uploaded files, and managing upload processing jobs. Supports queue management for async upload processing workflows. Requires Uploads.Read permission.
Endpoints for managing forum categories within groups. Categories organize forum discussions into topics, allowing structured content browsing. Each forum must have at least one category. Most management operations require the GroupForum.Manage RBAC permission (group admin/moderator). Read operations are accessible according to group visibility settings.
Administrative endpoints for managing vector embeddings used in AI-powered features such as semantic search and content recommendations. Provides tools for enabling/disabling embeddings, configuring the embedding model, estimating costs, and managing batch recalculation jobs. Requires AdminSettings.Manage permission.
Administration endpoints for managing FASP (Fediverse Auxiliary Service Provider) registrations and capabilities. Handles the FASP registration workflow: providers register via POST, admins confirm registration, and capabilities are activated or deactivated. Also provides debug and backfill request tools. The registration endpoint is publicly accessible; all other endpoints require the Federation.Manage RBAC permission.
FASP (Fediverse Auxiliary Service Provider) data sharing endpoints implementing the FASP data sharing protocol v0. Allows FASP providers to subscribe to content lifecycle events and trends, request backfills of historical data, and manage their subscriptions. All requests are authenticated using FASP Ed25519 HTTP signature verification, not user authentication. Not intended to be called directly by client applications.
Debug endpoints for FASP (Fediverse Auxiliary Service Provider) integration testing. Allows FASP providers to submit debug callback responses and administrators to view and manage callback logs. The POST endpoint uses FASP Ed25519 HTTP signature authentication; the GET and DELETE endpoints are currently unauthenticated and intended for admin use only.
Endpoints for managing discussion forums within groups. Each group can have one forum that organizes discussions into categories and tags. Forums are auto-created on first access if the group does not already have one. Management operations (update, delete) require the GroupForum.Manage RBAC permission (group admin/moderator). Read operations follow group visibility settings.
Endpoints for managing applications available to groups. Applications are installable modules that extend group functionality. Group admins can add or remove applications from their groups. The global apps list shows all available applications at the GROUP entry point, while per-group lists show only applications installed for that specific group. Management operations require the GroupApps.Manage RBAC permission.
API endpoints for managing channels within groups. Channels are specialized accounts that enable organized content distribution within groups. They support hierarchical organization with primary and auto-subscribe channels, privacy controls inherited from parent groups, and both scoped (group-specific) and global usernames for discovery. Group admins manage channels while members follow.
Request
Retrieves a complete list of all channels within the specified group. Requires group membership to access. Returns both public and private channels visible to the authenticated user. The response includes channel metadata such as privacy settings, auto-subscribe status, and whether each channel is designated as the primary channel. Channels are returned in creation order.
RBAC: requires GroupChannels.Read
- Mock serverhttps://docs.wellesley.social/_mock/openapi/api/v1/groups/{groupId}/channels
- Simple setup, all in one. Digital Oceanhttps://dust.allroads.social/api/v1/groups/{groupId}/channels
- Simple setup, db is separate. Digital Oceanhttps://meteor.allroads.social/api/v1/groups/{groupId}/channels
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://docs.wellesley.social/_mock/openapi/api/v1/groups/gr_01hz1f0kw36f82k9s4nzpc4s33n/channels?appMetaHas=string&appMetaLacks=string&full=true&kind=channel' \
-H 'Authorization: YOUR_API_KEY_HERE'Complete list of group channels successfully retrieved
Registration mode:
- REGULAR - just regular state
- SENSITIVE - all media attachments are flagged as sensitive, i.e. all user's posts should be marked as sensitive, old posts and all future ones.
- LIMITED - all user's old and future posts should be set maximum to followers only unless user set it to direct himself. non-followers should not be notified, i.e. if user mentions non-follower we do not create notification.
- SUSPENDED - User can login, but cannot do anything in his account except to read, cannot change anything, cannot create new posts or comments etc. All his posts are marked as deleted, but we do not delete them just yet. User is scheduled to be deleted in one month. During this month it is possible to restore it via admin.
Entity type: USER, BOT, APPLICATION, GROUP_CHANNEL
Group ID if this is a group channel, group user or category.
- PUBLIC - Channel is visible to everyone and can be followed by anyone.
- PRIVATE - Channel is visible only to group members and can only be followed by group members.
Types that an Actor can be assigned. Coincide with ActivityPub Actor types:
- APPLICATION: Apps will have this type
- GROUP: Interest Groups and Generic Groups wil have this type
- ORGANIZATION: Formal Organizations such as Companies, Institutions, etc. will have this type
- PERSON: Individual people will have this type
- SERVICE: Bots, Services, and other automated tools which are not also Apps will have this type
User's summary or bio
Software platform type (wellesley, mastodon, threads.net)
Sync state for remote users:
- SHALLOW_SYNCED - Profile fetched, only first page of outbox loaded
- SYNC_IN_PROGRESS - Deep sync is currently running
- DEEP_SYNCED - Full outbox has been fetched
- DEEP_SYNC_FAILED - Deep sync attempted but failed (retryable)
When the last deep sync completed (null if never deep-synced)
Follow approval mode: AUTO_APPROVE, MANUALLY_APPROVES, or UNKNOWN
Whether this is a channel or a user. Deprecated: use 'entityType' instead.
[ { "id": "us_01hxcvk1hjexere4pvtrj0ymqq", "username": "john_smith", "domain": "wlsly1.net", "local": true, "displayName": "John Smith", "uri": "https://wlsly1.net/users/john_smith", "avatar": { … }, "createdAt": "2022-03-10T16:15:50Z", "state": "REGULAR", "relationship": { … }, "entityType": "USER", "appMeta": {}, "groupId": "us_01hxcvk1hjexere4pvtrj0ymqq", "groupPrivacy": "PUBLIC", "groupUserName": "string", "actorType": "Application", "channel": true, "summary": "Pixels are my paint, code is my canvas, creativity is my brush.", "stats": { … }, "fields": { … }, "header": { … }, "deleted": true, "emojis": [ … ], "location": { … }, "timezone": { … }, "birthday": { … }, "software": "wellesley", "groupAvatar": { … }, "groupName": "string", "groupDisplayName": "string", "syncState": "SHALLOW_SYNCED", "deepSyncedAt": "2022-03-10T16:15:50Z", "followApproval": "AUTO_APPROVE", "groupPrimary": true, "groupAutoSubscribe": true } ]
Request
Creates a new channel within the specified group. Requires group administrator privileges. The channel's privacy is constrained by the parent group's privacy settings (private groups can only have private channels). The first channel created is automatically designated as both primary and auto-subscribe. Channels can have both scoped usernames (group-specific) and optional global usernames (platform-wide). Note: Avatar and header images must be set via the update endpoint after creation.
RBAC: requires GroupChannels.Manage
Channel identifier scoped to the group. Must be unique within the group. Used to generate the channel's username in format 'groupname:channelname' for private channels.
Human-readable display name for the channel. Shown in channel listings and UI.
Brief description of the channel's purpose and content (max 1024 characters)
- PUBLIC - Channel is visible to everyone and can be followed by anyone.
- PRIVATE - Channel is visible only to group members and can only be followed by group members.
Whether this channel should be the primary channel for the group. Only one primary channel allowed per group. The first channel created is automatically made primary.
Whether this channel should be an auto-subscribe channel. Auto-subscribe channels are automatically followed by new group members. The first channel created is automatically made auto-subscribe.
Global username for public channels. Must be unique across the entire platform. Allows the channel to be accessed via '@globalUsername' in addition to the scoped username. Only available for public channels in public groups.
Theme color for the channel in 6-character HEX format with # prefix
When creating an auto-subscribe channel, whether to subscribe all existing group members. Default: true.
- Mock serverhttps://docs.wellesley.social/_mock/openapi/api/v1/groups/{groupId}/channels
- Simple setup, all in one. Digital Oceanhttps://dust.allroads.social/api/v1/groups/{groupId}/channels
- Simple setup, db is separate. Digital Oceanhttps://meteor.allroads.social/api/v1/groups/{groupId}/channels
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://docs.wellesley.social/_mock/openapi/api/v1/groups/gr_01hz1f0kw36f82k9s4nzpc4s33n/channels \
-H 'Authorization: YOUR_API_KEY_HERE' \
-H 'Content-Type: application/json' \
-d '{
"username": "news",
"displayName": "Group News",
"summary": "Read group news and announcements here",
"privacy": "PUBLIC",
"isPrimary": false,
"isAutoSubscribe": true,
"globalUsername": "platform-news",
"color": "#FF5733",
"subscribeExistingMembers": true,
"kind": "channel"
}'Channel created successfully with all configured properties
Registration mode:
- REGULAR - just regular state
- SENSITIVE - all media attachments are flagged as sensitive, i.e. all user's posts should be marked as sensitive, old posts and all future ones.
- LIMITED - all user's old and future posts should be set maximum to followers only unless user set it to direct himself. non-followers should not be notified, i.e. if user mentions non-follower we do not create notification.
- SUSPENDED - User can login, but cannot do anything in his account except to read, cannot change anything, cannot create new posts or comments etc. All his posts are marked as deleted, but we do not delete them just yet. User is scheduled to be deleted in one month. During this month it is possible to restore it via admin.
Entity type: USER, BOT, APPLICATION, GROUP_CHANNEL
Group ID if this is a group channel, group user or category.
- PUBLIC - Channel is visible to everyone and can be followed by anyone.
- PRIVATE - Channel is visible only to group members and can only be followed by group members.
Types that an Actor can be assigned. Coincide with ActivityPub Actor types:
- APPLICATION: Apps will have this type
- GROUP: Interest Groups and Generic Groups wil have this type
- ORGANIZATION: Formal Organizations such as Companies, Institutions, etc. will have this type
- PERSON: Individual people will have this type
- SERVICE: Bots, Services, and other automated tools which are not also Apps will have this type
User's summary or bio
Software platform type (wellesley, mastodon, threads.net)
Sync state for remote users:
- SHALLOW_SYNCED - Profile fetched, only first page of outbox loaded
- SYNC_IN_PROGRESS - Deep sync is currently running
- DEEP_SYNCED - Full outbox has been fetched
- DEEP_SYNC_FAILED - Deep sync attempted but failed (retryable)
When the last deep sync completed (null if never deep-synced)
Follow approval mode: AUTO_APPROVE, MANUALLY_APPROVES, or UNKNOWN
{ "id": "us_01hxcvk1hjexere4pvtrj0ymqq", "username": "john_smith", "domain": "wlsly1.net", "local": true, "displayName": "John Smith", "uri": "https://wlsly1.net/users/john_smith", "avatar": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "createdAt": "2022-03-10T16:15:50Z", "state": "REGULAR", "relationship": { "following": "PENDING", "followed": "PENDING", "blocked": true, "blockedBy": true, "muted": { … }, "note": "string" }, "entityType": "USER", "appMeta": {}, "groupId": "us_01hxcvk1hjexere4pvtrj0ymqq", "groupPrivacy": "PUBLIC", "groupUserName": "string", "actorType": "Application", "channel": true, "summary": "Pixels are my paint, code is my canvas, creativity is my brush.", "stats": { "posts": 0, "postsLast24h": 0, "totalStorageBytes": 0, "comments": 0, "avgPostsPerDay": 0.1, "avgBytesPerDay": 0.1, "followers": 0, "following": 0, "followingHidden": true, "totalEvents": 0 }, "fields": { "property1": { … }, "property2": { … } }, "header": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "deleted": true, "emojis": [ { … } ], "location": { "geo": { … }, "name": "string", "autoUpdate": true, "show": true }, "timezone": { "ianaTimezone": "string", "autoUpdate": true, "show": true }, "birthday": { "date": "2022-03-10T16:15:50Z", "show": "NONE" }, "software": "wellesley", "groupAvatar": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "groupName": "string", "groupDisplayName": "string", "syncState": "SHALLOW_SYNCED", "deepSyncedAt": "2022-03-10T16:15:50Z", "followApproval": "AUTO_APPROVE", "groupPrimary": true, "groupAutoSubscribe": true }
Request
Retrieves all channels designated as auto-subscribe for the specified group. Auto-subscribe channels are automatically followed by new members upon joining. Requires group membership to access. Returns an empty array if no auto-subscribe channels are configured. The response includes full channel information including privacy settings and follow status.
RBAC: requires GroupChannels.Read
- Mock serverhttps://docs.wellesley.social/_mock/openapi/api/v1/groups/{groupId}/channels/auto-subscribe
- Simple setup, all in one. Digital Oceanhttps://dust.allroads.social/api/v1/groups/{groupId}/channels/auto-subscribe
- Simple setup, db is separate. Digital Oceanhttps://meteor.allroads.social/api/v1/groups/{groupId}/channels/auto-subscribe
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://docs.wellesley.social/_mock/openapi/api/v1/groups/gr_01hz1f0kw36f82k9s4nzpc4s33n/channels/auto-subscribe \
-H 'Authorization: YOUR_API_KEY_HERE'List of auto-subscribe channels successfully retrieved
Registration mode:
- REGULAR - just regular state
- SENSITIVE - all media attachments are flagged as sensitive, i.e. all user's posts should be marked as sensitive, old posts and all future ones.
- LIMITED - all user's old and future posts should be set maximum to followers only unless user set it to direct himself. non-followers should not be notified, i.e. if user mentions non-follower we do not create notification.
- SUSPENDED - User can login, but cannot do anything in his account except to read, cannot change anything, cannot create new posts or comments etc. All his posts are marked as deleted, but we do not delete them just yet. User is scheduled to be deleted in one month. During this month it is possible to restore it via admin.
Entity type: USER, BOT, APPLICATION, GROUP_CHANNEL
Group ID if this is a group channel, group user or category.
- PUBLIC - Channel is visible to everyone and can be followed by anyone.
- PRIVATE - Channel is visible only to group members and can only be followed by group members.
Types that an Actor can be assigned. Coincide with ActivityPub Actor types:
- APPLICATION: Apps will have this type
- GROUP: Interest Groups and Generic Groups wil have this type
- ORGANIZATION: Formal Organizations such as Companies, Institutions, etc. will have this type
- PERSON: Individual people will have this type
- SERVICE: Bots, Services, and other automated tools which are not also Apps will have this type
Follow approval mode: AUTO_APPROVE, MANUALLY_APPROVES, or UNKNOWN
Whether this is a channel or a user. Deprecated: use 'entityType' instead.
[ { "id": "us_01hxcvk1hjexere4pvtrj0ymqq", "username": "john_smith", "domain": "wlsly1.net", "local": true, "displayName": "John Smith", "uri": "https://wlsly1.net/users/john_smith", "avatar": { … }, "createdAt": "2022-03-10T16:15:50Z", "state": "REGULAR", "relationship": { … }, "entityType": "USER", "appMeta": {}, "groupId": "us_01hxcvk1hjexere4pvtrj0ymqq", "groupPrivacy": "PUBLIC", "groupUserName": "string", "actorType": "Application", "channel": true, "deleted": true, "groupAvatar": { … }, "groupName": "string", "groupDisplayName": "string", "followApproval": "AUTO_APPROVE", "groupPrimary": true, "groupAutoSubscribe": true } ]
- Mock serverhttps://docs.wellesley.social/_mock/openapi/api/v1/groups/{groupId}/channels/lookup
- Simple setup, all in one. Digital Oceanhttps://dust.allroads.social/api/v1/groups/{groupId}/channels/lookup
- Simple setup, db is separate. Digital Oceanhttps://meteor.allroads.social/api/v1/groups/{groupId}/channels/lookup
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://docs.wellesley.social/_mock/openapi/api/v1/groups/gr_01hz1f0kw36f82k9s4nzpc4s33n/channels/lookup?full=true&username=string'Channel information successfully retrieved
One of account's users. Can be multiple per account
Registration mode:
- REGULAR - just regular state
- SENSITIVE - all media attachments are flagged as sensitive, i.e. all user's posts should be marked as sensitive, old posts and all future ones.
- LIMITED - all user's old and future posts should be set maximum to followers only unless user set it to direct himself. non-followers should not be notified, i.e. if user mentions non-follower we do not create notification.
- SUSPENDED - User can login, but cannot do anything in his account except to read, cannot change anything, cannot create new posts or comments etc. All his posts are marked as deleted, but we do not delete them just yet. User is scheduled to be deleted in one month. During this month it is possible to restore it via admin.
Entity type: USER, BOT, APPLICATION, GROUP_CHANNEL
Group ID if this is a group channel, group user or category.
- PUBLIC - Channel is visible to everyone and can be followed by anyone.
- PRIVATE - Channel is visible only to group members and can only be followed by group members.
Types that an Actor can be assigned. Coincide with ActivityPub Actor types:
- APPLICATION: Apps will have this type
- GROUP: Interest Groups and Generic Groups wil have this type
- ORGANIZATION: Formal Organizations such as Companies, Institutions, etc. will have this type
- PERSON: Individual people will have this type
- SERVICE: Bots, Services, and other automated tools which are not also Apps will have this type
Follow approval mode: AUTO_APPROVE, MANUALLY_APPROVES, or UNKNOWN
- User
- UserFull
{ "id": "us_01hxcvk1hjexere4pvtrj0ymqq", "username": "john_smith", "domain": "wlsly1.net", "local": true, "displayName": "John Smith", "uri": "https://wlsly1.net/users/john_smith", "avatar": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "createdAt": "2022-03-10T16:15:50Z", "state": "REGULAR", "relationship": { "following": "PENDING", "followed": "PENDING", "blocked": true, "blockedBy": true, "muted": { … }, "note": "string" }, "entityType": "USER", "appMeta": {}, "groupId": "us_01hxcvk1hjexere4pvtrj0ymqq", "groupPrivacy": "PUBLIC", "groupUserName": "string", "actorType": "Application", "channel": true, "deleted": true, "groupAvatar": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "groupName": "string", "groupDisplayName": "string", "followApproval": "AUTO_APPROVE", "groupPrimary": true, "groupAutoSubscribe": true }
Request
Retrieves the designated primary channel for the specified group. Access control is based on both group and channel privacy settings. Public groups with public primary channels are accessible to everyone. Private groups or private channels require group membership. Returns 404 if no primary channel is designated or if access is denied due to privacy settings.
- Mock serverhttps://docs.wellesley.social/_mock/openapi/api/v1/groups/{groupId}/channels/primary
- Simple setup, all in one. Digital Oceanhttps://dust.allroads.social/api/v1/groups/{groupId}/channels/primary
- Simple setup, db is separate. Digital Oceanhttps://meteor.allroads.social/api/v1/groups/{groupId}/channels/primary
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://docs.wellesley.social/_mock/openapi/api/v1/groups/gr_01hz1f0kw36f82k9s4nzpc4s33n/channels/primaryPrimary channel information successfully retrieved
Registration mode:
- REGULAR - just regular state
- SENSITIVE - all media attachments are flagged as sensitive, i.e. all user's posts should be marked as sensitive, old posts and all future ones.
- LIMITED - all user's old and future posts should be set maximum to followers only unless user set it to direct himself. non-followers should not be notified, i.e. if user mentions non-follower we do not create notification.
- SUSPENDED - User can login, but cannot do anything in his account except to read, cannot change anything, cannot create new posts or comments etc. All his posts are marked as deleted, but we do not delete them just yet. User is scheduled to be deleted in one month. During this month it is possible to restore it via admin.
Entity type: USER, BOT, APPLICATION, GROUP_CHANNEL
Group ID if this is a group channel, group user or category.
- PUBLIC - Channel is visible to everyone and can be followed by anyone.
- PRIVATE - Channel is visible only to group members and can only be followed by group members.
Types that an Actor can be assigned. Coincide with ActivityPub Actor types:
- APPLICATION: Apps will have this type
- GROUP: Interest Groups and Generic Groups wil have this type
- ORGANIZATION: Formal Organizations such as Companies, Institutions, etc. will have this type
- PERSON: Individual people will have this type
- SERVICE: Bots, Services, and other automated tools which are not also Apps will have this type
User's summary or bio
Software platform type (wellesley, mastodon, threads.net)
Sync state for remote users:
- SHALLOW_SYNCED - Profile fetched, only first page of outbox loaded
- SYNC_IN_PROGRESS - Deep sync is currently running
- DEEP_SYNCED - Full outbox has been fetched
- DEEP_SYNC_FAILED - Deep sync attempted but failed (retryable)
When the last deep sync completed (null if never deep-synced)
Follow approval mode: AUTO_APPROVE, MANUALLY_APPROVES, or UNKNOWN
{ "id": "us_01hxcvk1hjexere4pvtrj0ymqq", "username": "john_smith", "domain": "wlsly1.net", "local": true, "displayName": "John Smith", "uri": "https://wlsly1.net/users/john_smith", "avatar": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "createdAt": "2022-03-10T16:15:50Z", "state": "REGULAR", "relationship": { "following": "PENDING", "followed": "PENDING", "blocked": true, "blockedBy": true, "muted": { … }, "note": "string" }, "entityType": "USER", "appMeta": {}, "groupId": "us_01hxcvk1hjexere4pvtrj0ymqq", "groupPrivacy": "PUBLIC", "groupUserName": "string", "actorType": "Application", "channel": true, "summary": "Pixels are my paint, code is my canvas, creativity is my brush.", "stats": { "posts": 0, "postsLast24h": 0, "totalStorageBytes": 0, "comments": 0, "avgPostsPerDay": 0.1, "avgBytesPerDay": 0.1, "followers": 0, "following": 0, "followingHidden": true, "totalEvents": 0 }, "fields": { "property1": { … }, "property2": { … } }, "header": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "deleted": true, "emojis": [ { … } ], "location": { "geo": { … }, "name": "string", "autoUpdate": true, "show": true }, "timezone": { "ianaTimezone": "string", "autoUpdate": true, "show": true }, "birthday": { "date": "2022-03-10T16:15:50Z", "show": "NONE" }, "software": "wellesley", "groupAvatar": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "groupName": "string", "groupDisplayName": "string", "syncState": "SHALLOW_SYNCED", "deepSyncedAt": "2022-03-10T16:15:50Z", "followApproval": "AUTO_APPROVE", "groupPrimary": true, "groupAutoSubscribe": true }
Request
Retrieves all public channels from a public group. This endpoint is accessible to everyone, including non-members and unauthenticated users, but only works for public groups. Private groups will return an error regardless of their channels' privacy settings. Useful for discovery and browsing group content before joining. Channels with global usernames are included with their platform-wide identifiers.
- Mock serverhttps://docs.wellesley.social/_mock/openapi/api/v1/groups/{groupId}/channels/public
- Simple setup, all in one. Digital Oceanhttps://dust.allroads.social/api/v1/groups/{groupId}/channels/public
- Simple setup, db is separate. Digital Oceanhttps://meteor.allroads.social/api/v1/groups/{groupId}/channels/public
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://docs.wellesley.social/_mock/openapi/api/v1/groups/gr_01hz1f0kw36f82k9s4nzpc4s33n/channels/publicOK
Registration mode:
- REGULAR - just regular state
- SENSITIVE - all media attachments are flagged as sensitive, i.e. all user's posts should be marked as sensitive, old posts and all future ones.
- LIMITED - all user's old and future posts should be set maximum to followers only unless user set it to direct himself. non-followers should not be notified, i.e. if user mentions non-follower we do not create notification.
- SUSPENDED - User can login, but cannot do anything in his account except to read, cannot change anything, cannot create new posts or comments etc. All his posts are marked as deleted, but we do not delete them just yet. User is scheduled to be deleted in one month. During this month it is possible to restore it via admin.
Entity type: USER, BOT, APPLICATION, GROUP_CHANNEL
Group ID if this is a group channel, group user or category.
- PUBLIC - Channel is visible to everyone and can be followed by anyone.
- PRIVATE - Channel is visible only to group members and can only be followed by group members.
Types that an Actor can be assigned. Coincide with ActivityPub Actor types:
- APPLICATION: Apps will have this type
- GROUP: Interest Groups and Generic Groups wil have this type
- ORGANIZATION: Formal Organizations such as Companies, Institutions, etc. will have this type
- PERSON: Individual people will have this type
- SERVICE: Bots, Services, and other automated tools which are not also Apps will have this type
Follow approval mode: AUTO_APPROVE, MANUALLY_APPROVES, or UNKNOWN
Whether this is a channel or a user. Deprecated: use 'entityType' instead.
[ { "id": "us_01hxcvk1hjexere4pvtrj0ymqq", "username": "john_smith", "domain": "wlsly1.net", "local": true, "displayName": "John Smith", "uri": "https://wlsly1.net/users/john_smith", "avatar": { … }, "createdAt": "2022-03-10T16:15:50Z", "state": "REGULAR", "relationship": { … }, "entityType": "USER", "appMeta": {}, "groupId": "us_01hxcvk1hjexere4pvtrj0ymqq", "groupPrivacy": "PUBLIC", "groupUserName": "string", "actorType": "Application", "channel": true, "deleted": true, "groupAvatar": { … }, "groupName": "string", "groupDisplayName": "string", "followApproval": "AUTO_APPROVE", "groupPrimary": true, "groupAutoSubscribe": true } ]
Request
Modifies properties of an existing channel. Requires group administrator privileges. Only included fields are updated; null fields preserve existing values. Privacy changes are constrained by the parent group's privacy (cannot make a channel public in a private group). Changes to auto-subscribe status affect auto-follow behavior for new members.
RBAC: requires GroupChannels.Manage
New display name for the channel. Updates how the channel appears in UI.
New channel description (max 1024 characters)
- PUBLIC - Channel is visible to everyone and can be followed by anyone.
- PRIVATE - Channel is visible only to group members and can only be followed by group members.
Whether this channel should be an auto-subscribe channel (auto-followed by new members)
Upload ID for the channel avatar image. Must be a previously uploaded image. Set to null to remove the avatar.
Upload ID for the channel header/banner image. Must be a previously uploaded image. Set to null to remove the header.
New group-scoped username (channel slug). Must be unique within the group. Used to generate the channel's scoped username in format 'groupname:channelname'. This is the channel identifier within the group context.
Global username for the channel. Must be unique platform-wide. Only available for public channels in public groups. Null or omitted means no change. To remove the global username, use the dedicated PUT /channels/{channelId}/username endpoint.
Theme color for the channel in 6-character HEX format with # prefix
- Mock serverhttps://docs.wellesley.social/_mock/openapi/api/v1/groups/{groupId}/channels/{channelId}
- Simple setup, all in one. Digital Oceanhttps://dust.allroads.social/api/v1/groups/{groupId}/channels/{channelId}
- Simple setup, db is separate. Digital Oceanhttps://meteor.allroads.social/api/v1/groups/{groupId}/channels/{channelId}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PUT \
https://docs.wellesley.social/_mock/openapi/api/v1/groups/gr_01hz1f0kw36f82k9s4nzpc4s33n/channels/us_01hxcvk1hjexere4pvtrj0ymqq \
-H 'Authorization: YOUR_API_KEY_HERE' \
-H 'Content-Type: application/json' \
-d '{
"displayName": "Group Announcements",
"summary": "Important announcements and updates",
"privacy": "PRIVATE",
"isAutoSubscribe": true,
"avatarId": "us_01hxcvk1hjexere4pvtrj0ymqq",
"headerId": "us_01hxcvk1hjexere4pvtrj0ymqq",
"fields": {
"property1": {
"value": "string",
"verifiedAt": "2022-03-10T16:15:50Z"
},
"property2": {
"value": "string",
"verifiedAt": "2022-03-10T16:15:50Z"
}
},
"location": {
"geo": {
"latitude": 0.1,
"longitude": 0.1,
"altitude": 0.1,
"accuracy": 0.1,
"verticalAccuracy": 0.1,
"speed": 0.1,
"bearing": 0.1,
"timestamp": 0
},
"name": "string",
"autoUpdate": true,
"show": true
},
"timezone": {
"ianaTimezone": "string",
"autoUpdate": true,
"show": true
},
"groupUsername": "news",
"globalUsername": "platform-news",
"color": "#FF5733",
"subscribeExistingMembers": true
}'Channel properties updated successfully
Registration mode:
- REGULAR - just regular state
- SENSITIVE - all media attachments are flagged as sensitive, i.e. all user's posts should be marked as sensitive, old posts and all future ones.
- LIMITED - all user's old and future posts should be set maximum to followers only unless user set it to direct himself. non-followers should not be notified, i.e. if user mentions non-follower we do not create notification.
- SUSPENDED - User can login, but cannot do anything in his account except to read, cannot change anything, cannot create new posts or comments etc. All his posts are marked as deleted, but we do not delete them just yet. User is scheduled to be deleted in one month. During this month it is possible to restore it via admin.
Entity type: USER, BOT, APPLICATION, GROUP_CHANNEL
Group ID if this is a group channel, group user or category.
- PUBLIC - Channel is visible to everyone and can be followed by anyone.
- PRIVATE - Channel is visible only to group members and can only be followed by group members.
Types that an Actor can be assigned. Coincide with ActivityPub Actor types:
- APPLICATION: Apps will have this type
- GROUP: Interest Groups and Generic Groups wil have this type
- ORGANIZATION: Formal Organizations such as Companies, Institutions, etc. will have this type
- PERSON: Individual people will have this type
- SERVICE: Bots, Services, and other automated tools which are not also Apps will have this type
User's summary or bio
Software platform type (wellesley, mastodon, threads.net)
Sync state for remote users:
- SHALLOW_SYNCED - Profile fetched, only first page of outbox loaded
- SYNC_IN_PROGRESS - Deep sync is currently running
- DEEP_SYNCED - Full outbox has been fetched
- DEEP_SYNC_FAILED - Deep sync attempted but failed (retryable)
When the last deep sync completed (null if never deep-synced)
Follow approval mode: AUTO_APPROVE, MANUALLY_APPROVES, or UNKNOWN
{ "id": "us_01hxcvk1hjexere4pvtrj0ymqq", "username": "john_smith", "domain": "wlsly1.net", "local": true, "displayName": "John Smith", "uri": "https://wlsly1.net/users/john_smith", "avatar": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "createdAt": "2022-03-10T16:15:50Z", "state": "REGULAR", "relationship": { "following": "PENDING", "followed": "PENDING", "blocked": true, "blockedBy": true, "muted": { … }, "note": "string" }, "entityType": "USER", "appMeta": {}, "groupId": "us_01hxcvk1hjexere4pvtrj0ymqq", "groupPrivacy": "PUBLIC", "groupUserName": "string", "actorType": "Application", "channel": true, "summary": "Pixels are my paint, code is my canvas, creativity is my brush.", "stats": { "posts": 0, "postsLast24h": 0, "totalStorageBytes": 0, "comments": 0, "avgPostsPerDay": 0.1, "avgBytesPerDay": 0.1, "followers": 0, "following": 0, "followingHidden": true, "totalEvents": 0 }, "fields": { "property1": { … }, "property2": { … } }, "header": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "deleted": true, "emojis": [ { … } ], "location": { "geo": { … }, "name": "string", "autoUpdate": true, "show": true }, "timezone": { "ianaTimezone": "string", "autoUpdate": true, "show": true }, "birthday": { "date": "2022-03-10T16:15:50Z", "show": "NONE" }, "software": "wellesley", "groupAvatar": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "groupName": "string", "groupDisplayName": "string", "syncState": "SHALLOW_SYNCED", "deepSyncedAt": "2022-03-10T16:15:50Z", "followApproval": "AUTO_APPROVE", "groupPrimary": true, "groupAutoSubscribe": true }
- Mock serverhttps://docs.wellesley.social/_mock/openapi/api/v1/groups/{groupId}/channels/{channelId}
- Simple setup, all in one. Digital Oceanhttps://dust.allroads.social/api/v1/groups/{groupId}/channels/{channelId}
- Simple setup, db is separate. Digital Oceanhttps://meteor.allroads.social/api/v1/groups/{groupId}/channels/{channelId}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://docs.wellesley.social/_mock/openapi/api/v1/groups/gr_01hz1f0kw36f82k9s4nzpc4s33n/channels/us_01hxcvk1hjexere4pvtrj0ymqq?full=true'Channel information successfully retrieved
One of account's users. Can be multiple per account
Registration mode:
- REGULAR - just regular state
- SENSITIVE - all media attachments are flagged as sensitive, i.e. all user's posts should be marked as sensitive, old posts and all future ones.
- LIMITED - all user's old and future posts should be set maximum to followers only unless user set it to direct himself. non-followers should not be notified, i.e. if user mentions non-follower we do not create notification.
- SUSPENDED - User can login, but cannot do anything in his account except to read, cannot change anything, cannot create new posts or comments etc. All his posts are marked as deleted, but we do not delete them just yet. User is scheduled to be deleted in one month. During this month it is possible to restore it via admin.
Entity type: USER, BOT, APPLICATION, GROUP_CHANNEL
Group ID if this is a group channel, group user or category.
- PUBLIC - Channel is visible to everyone and can be followed by anyone.
- PRIVATE - Channel is visible only to group members and can only be followed by group members.
Types that an Actor can be assigned. Coincide with ActivityPub Actor types:
- APPLICATION: Apps will have this type
- GROUP: Interest Groups and Generic Groups wil have this type
- ORGANIZATION: Formal Organizations such as Companies, Institutions, etc. will have this type
- PERSON: Individual people will have this type
- SERVICE: Bots, Services, and other automated tools which are not also Apps will have this type
Follow approval mode: AUTO_APPROVE, MANUALLY_APPROVES, or UNKNOWN
- User
- UserFull
{ "id": "us_01hxcvk1hjexere4pvtrj0ymqq", "username": "john_smith", "domain": "wlsly1.net", "local": true, "displayName": "John Smith", "uri": "https://wlsly1.net/users/john_smith", "avatar": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "createdAt": "2022-03-10T16:15:50Z", "state": "REGULAR", "relationship": { "following": "PENDING", "followed": "PENDING", "blocked": true, "blockedBy": true, "muted": { … }, "note": "string" }, "entityType": "USER", "appMeta": {}, "groupId": "us_01hxcvk1hjexere4pvtrj0ymqq", "groupPrivacy": "PUBLIC", "groupUserName": "string", "actorType": "Application", "channel": true, "deleted": true, "groupAvatar": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "groupName": "string", "groupDisplayName": "string", "followApproval": "AUTO_APPROVE", "groupPrimary": true, "groupAutoSubscribe": true }
- Mock serverhttps://docs.wellesley.social/_mock/openapi/api/v1/groups/{groupId}/channels/{channelId}
- Simple setup, all in one. Digital Oceanhttps://dust.allroads.social/api/v1/groups/{groupId}/channels/{channelId}
- Simple setup, db is separate. Digital Oceanhttps://meteor.allroads.social/api/v1/groups/{groupId}/channels/{channelId}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X DELETE \
https://docs.wellesley.social/_mock/openapi/api/v1/groups/gr_01hz1f0kw36f82k9s4nzpc4s33n/channels/us_01hxcvk1hjexere4pvtrj0ymqq \
-H 'Authorization: YOUR_API_KEY_HERE'Request
Toggles whether a channel is designated as an auto-subscribe channel. Requires group admin privileges. Auto-subscribe channels are automatically followed by new group members upon joining. Multiple channels can be marked as auto-subscribe. This setting helps onboard new members by ensuring they receive content from essential channels immediately.
RBAC: requires GroupChannels.Manage
- Mock serverhttps://docs.wellesley.social/_mock/openapi/api/v1/groups/{groupId}/channels/{channelId}/auto-subscribe
- Simple setup, all in one. Digital Oceanhttps://dust.allroads.social/api/v1/groups/{groupId}/channels/{channelId}/auto-subscribe
- Simple setup, db is separate. Digital Oceanhttps://meteor.allroads.social/api/v1/groups/{groupId}/channels/{channelId}/auto-subscribe
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PUT \
'https://docs.wellesley.social/_mock/openapi/api/v1/groups/gr_01hz1f0kw36f82k9s4nzpc4s33n/channels/us_01hxcvk1hjexere4pvtrj0ymqq/auto-subscribe?isAutoSubscribe=true&subscribeExistingMembers=true' \
-H 'Authorization: YOUR_API_KEY_HERE'Auto-subscribe channel status successfully updated
Registration mode:
- REGULAR - just regular state
- SENSITIVE - all media attachments are flagged as sensitive, i.e. all user's posts should be marked as sensitive, old posts and all future ones.
- LIMITED - all user's old and future posts should be set maximum to followers only unless user set it to direct himself. non-followers should not be notified, i.e. if user mentions non-follower we do not create notification.
- SUSPENDED - User can login, but cannot do anything in his account except to read, cannot change anything, cannot create new posts or comments etc. All his posts are marked as deleted, but we do not delete them just yet. User is scheduled to be deleted in one month. During this month it is possible to restore it via admin.
Entity type: USER, BOT, APPLICATION, GROUP_CHANNEL
Group ID if this is a group channel, group user or category.
- PUBLIC - Channel is visible to everyone and can be followed by anyone.
- PRIVATE - Channel is visible only to group members and can only be followed by group members.
Types that an Actor can be assigned. Coincide with ActivityPub Actor types:
- APPLICATION: Apps will have this type
- GROUP: Interest Groups and Generic Groups wil have this type
- ORGANIZATION: Formal Organizations such as Companies, Institutions, etc. will have this type
- PERSON: Individual people will have this type
- SERVICE: Bots, Services, and other automated tools which are not also Apps will have this type
User's summary or bio
Software platform type (wellesley, mastodon, threads.net)
Sync state for remote users:
- SHALLOW_SYNCED - Profile fetched, only first page of outbox loaded
- SYNC_IN_PROGRESS - Deep sync is currently running
- DEEP_SYNCED - Full outbox has been fetched
- DEEP_SYNC_FAILED - Deep sync attempted but failed (retryable)
When the last deep sync completed (null if never deep-synced)
Follow approval mode: AUTO_APPROVE, MANUALLY_APPROVES, or UNKNOWN
{ "id": "us_01hxcvk1hjexere4pvtrj0ymqq", "username": "john_smith", "domain": "wlsly1.net", "local": true, "displayName": "John Smith", "uri": "https://wlsly1.net/users/john_smith", "avatar": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "createdAt": "2022-03-10T16:15:50Z", "state": "REGULAR", "relationship": { "following": "PENDING", "followed": "PENDING", "blocked": true, "blockedBy": true, "muted": { … }, "note": "string" }, "entityType": "USER", "appMeta": {}, "groupId": "us_01hxcvk1hjexere4pvtrj0ymqq", "groupPrivacy": "PUBLIC", "groupUserName": "string", "actorType": "Application", "channel": true, "summary": "Pixels are my paint, code is my canvas, creativity is my brush.", "stats": { "posts": 0, "postsLast24h": 0, "totalStorageBytes": 0, "comments": 0, "avgPostsPerDay": 0.1, "avgBytesPerDay": 0.1, "followers": 0, "following": 0, "followingHidden": true, "totalEvents": 0 }, "fields": { "property1": { … }, "property2": { … } }, "header": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "deleted": true, "emojis": [ { … } ], "location": { "geo": { … }, "name": "string", "autoUpdate": true, "show": true }, "timezone": { "ianaTimezone": "string", "autoUpdate": true, "show": true }, "birthday": { "date": "2022-03-10T16:15:50Z", "show": "NONE" }, "software": "wellesley", "groupAvatar": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "groupName": "string", "groupDisplayName": "string", "syncState": "SHALLOW_SYNCED", "deepSyncedAt": "2022-03-10T16:15:50Z", "followApproval": "AUTO_APPROVE", "groupPrimary": true, "groupAutoSubscribe": true }
Request
Sets the specified channel as the primary channel for the group. Requires group administrator privileges. Only one channel can be designated as primary per group. The primary channel serves as the main communication channel and is prominently displayed in group interfaces. Any existing primary channel designation is automatically removed.
RBAC: requires GroupChannels.Manage
- Mock serverhttps://docs.wellesley.social/_mock/openapi/api/v1/groups/{groupId}/channels/{channelId}/primary
- Simple setup, all in one. Digital Oceanhttps://dust.allroads.social/api/v1/groups/{groupId}/channels/{channelId}/primary
- Simple setup, db is separate. Digital Oceanhttps://meteor.allroads.social/api/v1/groups/{groupId}/channels/{channelId}/primary
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PUT \
https://docs.wellesley.social/_mock/openapi/api/v1/groups/gr_01hz1f0kw36f82k9s4nzpc4s33n/channels/us_01hxcvk1hjexere4pvtrj0ymqq/primary \
-H 'Authorization: YOUR_API_KEY_HERE'Channel successfully designated as primary, previous primary channel designation removed
Registration mode:
- REGULAR - just regular state
- SENSITIVE - all media attachments are flagged as sensitive, i.e. all user's posts should be marked as sensitive, old posts and all future ones.
- LIMITED - all user's old and future posts should be set maximum to followers only unless user set it to direct himself. non-followers should not be notified, i.e. if user mentions non-follower we do not create notification.
- SUSPENDED - User can login, but cannot do anything in his account except to read, cannot change anything, cannot create new posts or comments etc. All his posts are marked as deleted, but we do not delete them just yet. User is scheduled to be deleted in one month. During this month it is possible to restore it via admin.
Entity type: USER, BOT, APPLICATION, GROUP_CHANNEL
Group ID if this is a group channel, group user or category.
- PUBLIC - Channel is visible to everyone and can be followed by anyone.
- PRIVATE - Channel is visible only to group members and can only be followed by group members.
Types that an Actor can be assigned. Coincide with ActivityPub Actor types:
- APPLICATION: Apps will have this type
- GROUP: Interest Groups and Generic Groups wil have this type
- ORGANIZATION: Formal Organizations such as Companies, Institutions, etc. will have this type
- PERSON: Individual people will have this type
- SERVICE: Bots, Services, and other automated tools which are not also Apps will have this type
User's summary or bio
Software platform type (wellesley, mastodon, threads.net)
Sync state for remote users:
- SHALLOW_SYNCED - Profile fetched, only first page of outbox loaded
- SYNC_IN_PROGRESS - Deep sync is currently running
- DEEP_SYNCED - Full outbox has been fetched
- DEEP_SYNC_FAILED - Deep sync attempted but failed (retryable)
When the last deep sync completed (null if never deep-synced)
Follow approval mode: AUTO_APPROVE, MANUALLY_APPROVES, or UNKNOWN
{ "id": "us_01hxcvk1hjexere4pvtrj0ymqq", "username": "john_smith", "domain": "wlsly1.net", "local": true, "displayName": "John Smith", "uri": "https://wlsly1.net/users/john_smith", "avatar": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "createdAt": "2022-03-10T16:15:50Z", "state": "REGULAR", "relationship": { "following": "PENDING", "followed": "PENDING", "blocked": true, "blockedBy": true, "muted": { … }, "note": "string" }, "entityType": "USER", "appMeta": {}, "groupId": "us_01hxcvk1hjexere4pvtrj0ymqq", "groupPrivacy": "PUBLIC", "groupUserName": "string", "actorType": "Application", "channel": true, "summary": "Pixels are my paint, code is my canvas, creativity is my brush.", "stats": { "posts": 0, "postsLast24h": 0, "totalStorageBytes": 0, "comments": 0, "avgPostsPerDay": 0.1, "avgBytesPerDay": 0.1, "followers": 0, "following": 0, "followingHidden": true, "totalEvents": 0 }, "fields": { "property1": { … }, "property2": { … } }, "header": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "deleted": true, "emojis": [ { … } ], "location": { "geo": { … }, "name": "string", "autoUpdate": true, "show": true }, "timezone": { "ianaTimezone": "string", "autoUpdate": true, "show": true }, "birthday": { "date": "2022-03-10T16:15:50Z", "show": "NONE" }, "software": "wellesley", "groupAvatar": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "groupName": "string", "groupDisplayName": "string", "syncState": "SHALLOW_SYNCED", "deepSyncedAt": "2022-03-10T16:15:50Z", "followApproval": "AUTO_APPROVE", "groupPrimary": true, "groupAutoSubscribe": true }
Request
Assigns, updates, or removes a global username for a public channel. Requires group administrator privileges. Global usernames provide platform-wide discovery and must be unique across the entire system. Only public channels in public groups can have global usernames. Setting the username to null removes any existing global username assignment.
RBAC: requires GroupChannels.Manage
- Mock serverhttps://docs.wellesley.social/_mock/openapi/api/v1/groups/{groupId}/channels/{channelId}/username
- Simple setup, all in one. Digital Oceanhttps://dust.allroads.social/api/v1/groups/{groupId}/channels/{channelId}/username
- Simple setup, db is separate. Digital Oceanhttps://meteor.allroads.social/api/v1/groups/{groupId}/channels/{channelId}/username
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PUT \
https://docs.wellesley.social/_mock/openapi/api/v1/groups/gr_01hz1f0kw36f82k9s4nzpc4s33n/channels/us_01hxcvk1hjexere4pvtrj0ymqq/username \
-H 'Authorization: YOUR_API_KEY_HERE' \
-H 'Content-Type: application/json' \
-d '{
"globalUsername": "platform-updates"
}'OK
Registration mode:
- REGULAR - just regular state
- SENSITIVE - all media attachments are flagged as sensitive, i.e. all user's posts should be marked as sensitive, old posts and all future ones.
- LIMITED - all user's old and future posts should be set maximum to followers only unless user set it to direct himself. non-followers should not be notified, i.e. if user mentions non-follower we do not create notification.
- SUSPENDED - User can login, but cannot do anything in his account except to read, cannot change anything, cannot create new posts or comments etc. All his posts are marked as deleted, but we do not delete them just yet. User is scheduled to be deleted in one month. During this month it is possible to restore it via admin.
Entity type: USER, BOT, APPLICATION, GROUP_CHANNEL
Group ID if this is a group channel, group user or category.
- PUBLIC - Channel is visible to everyone and can be followed by anyone.
- PRIVATE - Channel is visible only to group members and can only be followed by group members.
Types that an Actor can be assigned. Coincide with ActivityPub Actor types:
- APPLICATION: Apps will have this type
- GROUP: Interest Groups and Generic Groups wil have this type
- ORGANIZATION: Formal Organizations such as Companies, Institutions, etc. will have this type
- PERSON: Individual people will have this type
- SERVICE: Bots, Services, and other automated tools which are not also Apps will have this type
User's summary or bio
Software platform type (wellesley, mastodon, threads.net)
Sync state for remote users:
- SHALLOW_SYNCED - Profile fetched, only first page of outbox loaded
- SYNC_IN_PROGRESS - Deep sync is currently running
- DEEP_SYNCED - Full outbox has been fetched
- DEEP_SYNC_FAILED - Deep sync attempted but failed (retryable)
When the last deep sync completed (null if never deep-synced)
Follow approval mode: AUTO_APPROVE, MANUALLY_APPROVES, or UNKNOWN
{ "id": "us_01hxcvk1hjexere4pvtrj0ymqq", "username": "john_smith", "domain": "wlsly1.net", "local": true, "displayName": "John Smith", "uri": "https://wlsly1.net/users/john_smith", "avatar": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "createdAt": "2022-03-10T16:15:50Z", "state": "REGULAR", "relationship": { "following": "PENDING", "followed": "PENDING", "blocked": true, "blockedBy": true, "muted": { … }, "note": "string" }, "entityType": "USER", "appMeta": {}, "groupId": "us_01hxcvk1hjexere4pvtrj0ymqq", "groupPrivacy": "PUBLIC", "groupUserName": "string", "actorType": "Application", "channel": true, "summary": "Pixels are my paint, code is my canvas, creativity is my brush.", "stats": { "posts": 0, "postsLast24h": 0, "totalStorageBytes": 0, "comments": 0, "avgPostsPerDay": 0.1, "avgBytesPerDay": 0.1, "followers": 0, "following": 0, "followingHidden": true, "totalEvents": 0 }, "fields": { "property1": { … }, "property2": { … } }, "header": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "deleted": true, "emojis": [ { … } ], "location": { "geo": { … }, "name": "string", "autoUpdate": true, "show": true }, "timezone": { "ianaTimezone": "string", "autoUpdate": true, "show": true }, "birthday": { "date": "2022-03-10T16:15:50Z", "show": "NONE" }, "software": "wellesley", "groupAvatar": { "uploadId": "up_kjhwieuy2387928371", "uploaderId": "us_97234khddqdkuhqwij", "ownerId": "us_97234khddqdkuhqwij", "attachedToId": "pt_97234khddqdkuhqwij", "uploadType": "video", "meta": { … }, "size": 0, "files": [ … ], "tags": [ … ], "error": "string", "cached": true, "logs": "string", "remote": true, "createdAt": "2022-03-10T16:15:50Z", "updatedAt": "2022-03-10T16:15:50Z" }, "groupName": "string", "groupDisplayName": "string", "syncState": "SHALLOW_SYNCED", "deepSyncedAt": "2022-03-10T16:15:50Z", "followApproval": "AUTO_APPROVE", "groupPrimary": true, "groupAutoSubscribe": true }
API endpoints for managing group invitations. Group owners and admins can invite users to join their groups. Invitees can accept or reject invitations. Creating invitations requires the GroupMembers.Invite RBAC permission. Accepting, rejecting, and viewing personal invitations require standard authentication.
API endpoints for group join workflows. Users can request to join a group, and group admins can approve or reject join requests. Join behavior depends on the group's join mode: OPEN (instant), APPROVAL (requires admin approval), or INVITE_ONLY (requires invitation). Groups may also have entry questions that must be answered before joining. Admin operations (listing, approving, rejecting requests) require the GroupMembers.Manage RBAC permission. All endpoints require authentication.
API endpoints for managing group membership. Provides functionality to add, update, and remove members from groups, as well as retrieve membership information. Supports both local and federated groups through ActivityPub protocol. Access control is enforced based on group privacy settings and user permissions.
API endpoints for managing group entry questions. Groups can require prospective members to answer questions before joining. Questions support multiple types (text, single choice, multiple choice) and are used to screen members when the group's join mode is set to QUESTIONS. Answers are validated and generate a token that can be used during the join process.
API endpoints for managing community rules within groups. Rules define the expected conduct and content policies that members must follow. Each rule consists of text (the rule itself), a hint (explanation or context), and an ordering value for display sequence. Rules are scoped to specific groups and can be managed by users with appropriate permissions.
Login method management for authenticated accounts. Allows adding or removing email/password and phone number as authentication methods. Adding a login method requires email or SMS verification. Removing a method is blocked if it is the last remaining login identifier. All changes are audited. All endpoints require authentication.
User muting functionality for hiding content from specific users without blocking them. Muting a user hides their posts from your timelines and notifications, but does not prevent them from following you or interacting with your content. Mutes can be temporary (with an expiration duration) or permanent. All endpoints require authentication.
User notification management for retrieving, counting, and updating notification status. Notifications are generated by user interactions such as follows, mentions, reposts, and likes. Supports filtering by notification type and status (read/unread). All endpoints require authentication.
Password management endpoints for changing and recovering account passwords. Supports two flows: authenticated password change (requires current password and email confirmation) and unauthenticated password recovery (sends reset code to account email). All password changes invalidate other active sessions for security.
Phone number change management for authenticated users. Implements a secure 4-step phone change flow: (1) request change and receive SMS code on current phone, (2) verify current phone ownership, (3) submit new phone number and receive SMS code, (4) verify new phone number. All endpoints require authentication.
Endpoints for managing Pins (top-level posts) and Highlights (pinned replies). Top-level pins are shown first in the profile scope and are limited by admin setting Maximum number of pinned posts. Replies can be pinned as highlights under their root post. Pin and unpin actions are federated via ActivityPub.
Endpoints for managing platform-wide and group-specific data storage. Unlike application data, this provides direct data management not tied to specific applications. Supports flexible ownership models including platform-level, group-level, and user-level data with appropriate access controls.
Endpoints for creating, reading, updating, and deleting posts, as well as managing comments, likes, bookmarks, reposts, subscriptions, and votes. Most endpoints require authentication; read-only feed and post endpoints are accessible to guests via @PermitAll. Post mutations are federated via ActivityPub.
Endpoints for retrieving Role-Based Access Control (RBAC) configurations and managing roles, resources, permissions and role-to-user assignments. Scoped Role Definition (RBACRole):
- Represents roles within the RBAC system.
- Each role has a unique
roleId, aname, an optionaldescription, and ascope. - The
scopedefines the domain or area in which the role is valid. - The
scopecan be Global (hardcoded), currently the only one is "global" - The
scopealso can be dynamic, currently we use Group Ids, like "gr_05hxcvk1hjexere4pvtrj0hggt" - Roles come with assigned permissions (
RBACPermissions) that define what actions the role can perform on system resources. - Metadata such as
createdAtandupdatedAttimestamps track the role's lifecycle events.
Permissions (RBACPermissions):
- Encapsulates resource-specific access controls.
- Each permission object specifies the
resource(e.g., "user", "document") and an associated list of allowedRBACAccesstypes. RBACAccessenumerates the supported actions:Read,Add,Modify,Delete.
Role Assignments to Actors (RBACActorRole):
- Maps actors (e.g., users, services) to specific roles.
- Tracks the association through
actorId(representing the unique entity being assigned) androleId(specific role ID). - Includes timestamps to record when the assignment was created or updated.
API to retrieve followers and following collections for remote (federated) users. Fetches collection data from remote ActivityPub servers, resolves actor URIs to user profiles, and returns them in the local user format. Supports pagination via offset/limit parameters. All endpoints are publicly accessible (@PermitAll) and operate on remote users only -- local users are rejected.
Authentication session management endpoints. Allows users to view active sessions across devices, revoke individual sessions or all other sessions, and permanently delete session records. Sessions are tracked in both the database and Redis for real-time state synchronization. All endpoints require authentication. The current session cannot be revoked or deleted.
Endpoints for uploading, retrieving, and managing media files. The upload flow is two-step: first create an upload via POST to get an upload URL, then PUT the actual file content to that URL. Most endpoints require authentication. Class-level @RBACAuthorize requires authentication by default; public endpoints use @PermitAll.
User profile management endpoints. Handles user creation, retrieval by ID or username, profile updates, deletion, and social graph queries (followers/following). Supports both authenticated and guest access with varying levels of detail. Guest users receive basic profile data; authenticated users can access relationship statuses and full profiles.