Invite link endpoints
Create, list and turn off shareable invite links to a workspace or a channel, preview one without signing in, and join with it.
Updated
Paths are relative to https://api.fishcamp.space/api/v1. Listing, creating and turning off links are admin actions
that need the X-Workspace-Id header and a person (requests with an API key get 403 forbidden). Previewing a link
needs no token; joining needs a signed-in person. How invite links work in the app is in
People and roles.
The invite link object
{
"id": "d4e5f6a7-b8c9-4d0e-8f1a-2b3c4d5e6f7a",
"code": "Rk7mPq2xWz9T",
"url": "https://fishcamp.space/join/Rk7mPq2xWz9T",
"channelId": null,
"channelName": null,
"createdBy": { "id": "7a1c2e3f-4b5d-4e6f-8a9b-0c1d2e3f4a5b", "name": "Maya Lopes" },
"expiresAt": "2026-12-05T14:00:00.000Z",
"maxUses": null,
"uses": 4,
"createdAt": "2026-11-05T14:00:00.000Z"
}| Field | Description |
|---|---|
code | 12 letters and digits: the part of the link after /join/. |
url | The link to share. |
channelId, channelName | The channel the link leads to, or null for a link to the workspace. |
createdBy | The admin who created it, or null. |
expiresAt | When it stops working, or null if it never expires. |
maxUses, uses | How many people can join with it (null for no limit), and how many already did. |
List invite links
GET /workspace/invite-linksAdmins. The workspace's active links, newest first, up to 100. Links that were turned off, expired, used up, or that lead to an archived channel aren't listed, and links to a private channel only show up for admins who are in it.
Create an invite link
POST /workspace/invite-linksAdmins. Limit: 20 per minute.
| Field | Type | Required | Description |
|---|---|---|---|
channelId | string | No | A channel to lead to: people who join are also added to it, even if it's private. Default: null, the workspace only. |
expiresInDays | 1, 7, 30 or null | No | Days until it expires; null never expires. Default: 30. |
maxUses | integer or null | No | From 1 to 1,000 people; null has no limit. Default: null. |
reuse | boolean | No | Default true: if you already created an active link to the same place with the same settings, and it's still as good as a new one (almost all of its time left and, with a use limit, no uses yet), you get that link back. false always creates a new one. |
curl -X POST "https://api.fishcamp.space/api/v1/workspace/invite-links" \
-H "Authorization: Bearer YOUR_SESSION_TOKEN" \
-H "X-Workspace-Id: YOUR_WORKSPACE_ID" \
-H "Content-Type: application/json" \
-d '{"channelId": "0b6f3c55-2a51-4e0a-a3d6-6a3f1f2e9d10", "expiresInDays": 7, "maxUses": 25}'Returns 201 Created with the link. For a channel link, you must be able to see the channel: a private channel only
if you're in it. A channel you can't see, or that was archived, answers 404. Direct messages, and values of
expiresInDays or maxUses outside the list above, get 422.
Turn off an invite link
DELETE /workspace/invite-links/:linkIdAdmins. The link stops working at once. Returns 204, or 404 if it doesn't exist or is already off. People who
joined with it stay.
Preview an invite link
GET /invite-links/:codeNo token. Limit: 30 per minute. This is what the join page shows before anyone signs in.
{
"workspaceName": "Northstar Studio",
"channelName": "design-crit",
"invitedBy": "Maya Lopes",
"memberCount": 12,
"status": "active"
}status is active, expired, revoked (turned off, or its channel was archived) or used_up. An unknown code
answers 404.
Join with an invite link
POST /invite-links/:code/joinPeople, signed in. Limit: 20 per minute. No body. Adds the person to the workspace as a Member and, for a channel link, to the channel. The channel gets a "joined with an invite link" pill.
{
"workspaceId": "9b2f6c1d-3e4a-4f5b-8c7d-1a2b3c4d5e6f",
"slug": "northstar-studio",
"channelId": "0b6f3c55-2a51-4e0a-a3d6-6a3f1f2e9d10",
"joinedWorkspace": true
}joinedWorkspace is false when the person was already a member. That doesn't use the link up, except for a channel
link with a use limit: a member who joins the channel through it uses one. Someone already in the workspace (and, for
a channel link, in the channel) gets 200 even after the link stopped working, and nothing changes.
| Error | When |
|---|---|
410 invite_link_expired | The link expired. |
410 invite_link_revoked | The link was turned off, or its channel was archived. |
410 invite_link_used_up | The link reached its limit of uses, also for a member joining the channel through it. |
404 not_found | The code doesn't exist. |
401 unauthorized | Nobody is signed in. |
To invite one person by email instead, see Invite someone.
Workspace endpoints
List and create workspaces, list the people in a workspace, invite someone by email, and manage roles and invites through the REST API.
Channel endpoints
List, create, update and archive channels, switch voice, camera, screen and transcription, open direct messages and add people through the REST API.