Channels API

Channels are the core communication containers in LVNG. They hold messages, members, and digital twin assignments. Every message belongs to a channel, and channels belong to workspaces. All endpoints require JWT authentication and are rate-limited to 300 requests per minute.

Base path: /api/v2/channels

Channel CRUD

Create, read, update, and delete channels within a workspace.

GET/api/v2/channelsAuthenticated

List channels in a workspace. Includes aggregate counts for messages and members.

Query Parameters

workspace_idstringrequired

UUID of the workspace to list channels from.

typestring

Filter by channel_type (e.g. text, voice, thread).

is_archivedboolean

Filter by archived status.

limitinteger

Maximum channels to return.

offsetinteger

Number of channels to skip.

Request

cURL
400">curl -X 400">GET 400">class="text-emerald-400">"https:400">class="text-zinc-500">//api.lvng.ai/api/v2/channels?workspace_id=550e8400-e29b-41d4-a716-446655440000&limit=25" \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_JWT_TOKEN"

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"channels": [
    {
      400">class="text-emerald-400">"id": 400">class="text-emerald-400">"6ba7b810-9dad-11d1-80b4-00c04fd430c8",
      400">class="text-emerald-400">"workspace_id": 400">class="text-emerald-400">"550e8400-e29b-41d4-a716-446655440000",
      400">class="text-emerald-400">"name": 400">class="text-emerald-400">"general",
      400">class="text-emerald-400">"display_name": 400">class="text-emerald-400">"General",
      400">class="text-emerald-400">"description": 400">class="text-emerald-400">"Main workspace channel",
      400">class="text-emerald-400">"channel_type": 400">class="text-emerald-400">"text",
      400">class="text-emerald-400">"topic": null,
      400">class="text-emerald-400">"is_archived": false,
      400">class="text-emerald-400">"message_count": 1423,
      400">class="text-emerald-400">"member_count": 8,
      400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-01-15T10:00:00.000Z",
      400">class="text-emerald-400">"updated_at": 400">class="text-emerald-400">"2026-03-19T12:00:00.000Z"
    },
    {
      400">class="text-emerald-400">"id": 400">class="text-emerald-400">"6ba7b811-9dad-11d1-80b4-00c04fd430c8",
      400">class="text-emerald-400">"workspace_id": 400">class="text-emerald-400">"550e8400-e29b-41d4-a716-446655440000",
      400">class="text-emerald-400">"name": 400">class="text-emerald-400">"engineering",
      400">class="text-emerald-400">"display_name": 400">class="text-emerald-400">"Engineering",
      400">class="text-emerald-400">"description": 400">class="text-emerald-400">"Dev team discussions",
      400">class="text-emerald-400">"channel_type": 400">class="text-emerald-400">"text",
      400">class="text-emerald-400">"topic": 400">class="text-emerald-400">"Sprint 23 planning",
      400">class="text-emerald-400">"is_archived": false,
      400">class="text-emerald-400">"message_count": 892,
      400">class="text-emerald-400">"member_count": 5,
      400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-02-01T09:00:00.000Z",
      400">class="text-emerald-400">"updated_at": 400">class="text-emerald-400">"2026-03-18T16:30:00.000Z"
    }
  ],
  400">class="text-emerald-400">"pagination": {
    400">class="text-emerald-400">"limit": 25,
    400">class="text-emerald-400">"offset": 0,
    400">class="text-emerald-400">"total": 2,
    400">class="text-emerald-400">"hasMore": false
  }
}
POST/api/v2/channelsAuthenticated

Create a new channel. Creator is auto-added as member for private channels.

Body Parameters

workspace_idstringrequired

UUID of the workspace.

namestringrequired

URL-safe channel name (lowercase, hyphens).

display_namestring

Human-readable display name.

descriptionstring

Channel description.

channel_typestringrequired

Channel type: text, voice, thread, or dm.

topicstring

Current topic displayed in the channel header.

parent_channel_idstring

UUID of parent channel (for sub-channels).

Request

cURL
400">curl -X 400">POST https:400">class="text-zinc-500">//api.lvng.ai/api/v2/channels \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_JWT_TOKEN" \
  -H 400">class="text-emerald-400">"Content-Type: application/json" \
  -d '{
    400">class="text-emerald-400">"workspace_id": 400">class="text-emerald-400">"550e8400-e29b-41d4-a716-446655440000",
    400">class="text-emerald-400">"name": 400">class="text-emerald-400">"product-launches",
    400">class="text-emerald-400">"display_name": 400">class="text-emerald-400">"Product Launches",
    400">class="text-emerald-400">"description": 400">class="text-emerald-400">"Coordinate product launch activities",
    400">class="text-emerald-400">"channel_type": 400">class="text-emerald-400">"text"
  }'

Response 201

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"channel": {
    400">class="text-emerald-400">"id": 400">class="text-emerald-400">"f47ac10b-58cc-4372-a567-0e02b2c3d479",
    400">class="text-emerald-400">"workspace_id": 400">class="text-emerald-400">"550e8400-e29b-41d4-a716-446655440000",
    400">class="text-emerald-400">"name": 400">class="text-emerald-400">"product-launches",
    400">class="text-emerald-400">"display_name": 400">class="text-emerald-400">"Product Launches",
    400">class="text-emerald-400">"description": 400">class="text-emerald-400">"Coordinate product launch activities",
    400">class="text-emerald-400">"channel_type": 400">class="text-emerald-400">"text",
    400">class="text-emerald-400">"topic": null,
    400">class="text-emerald-400">"is_archived": false,
    400">class="text-emerald-400">"parent_channel_id": null,
    400">class="text-emerald-400">"created_by": 400">class="text-emerald-400">"a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11",
    400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-03-19T15:30:00.000Z",
    400">class="text-emerald-400">"updated_at": 400">class="text-emerald-400">"2026-03-19T15:30:00.000Z"
  }
}
GET/api/v2/channels/:idAuthenticated

Get a channel with member count and message count. Checks access permissions.

Path Parameters

idstringrequired

UUID of the channel.

Request

cURL
400">curl -X 400">GET https:400">class="text-zinc-500">//api.lvng.ai/api/v2/channels/6ba7b810-9dad-11d1-80b4-00c04fd430c8 \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_JWT_TOKEN"

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"channel": {
    400">class="text-emerald-400">"id": 400">class="text-emerald-400">"6ba7b810-9dad-11d1-80b4-00c04fd430c8",
    400">class="text-emerald-400">"workspace_id": 400">class="text-emerald-400">"550e8400-e29b-41d4-a716-446655440000",
    400">class="text-emerald-400">"name": 400">class="text-emerald-400">"general",
    400">class="text-emerald-400">"display_name": 400">class="text-emerald-400">"General",
    400">class="text-emerald-400">"description": 400">class="text-emerald-400">"Main workspace channel",
    400">class="text-emerald-400">"channel_type": 400">class="text-emerald-400">"text",
    400">class="text-emerald-400">"topic": null,
    400">class="text-emerald-400">"is_archived": false,
    400">class="text-emerald-400">"member_count": 8,
    400">class="text-emerald-400">"message_count": 1423,
    400">class="text-emerald-400">"created_by": 400">class="text-emerald-400">"a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11",
    400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-01-15T10:00:00.000Z",
    400">class="text-emerald-400">"updated_at": 400">class="text-emerald-400">"2026-03-19T12:00:00.000Z"
  }
}
PATCH/api/v2/channels/:idAuthenticated

Update channel properties. Requires owner, admin, or creator role.

Path Parameters

idstringrequired

UUID of the channel.

Body Parameters

display_namestring

Updated display name.

descriptionstring

Updated description.

topicstring

Updated channel topic.

is_archivedboolean

Set to true to archive the channel.

Request

cURL
400">curl -X 400">PATCH https:400">class="text-zinc-500">//api.lvng.ai/api/v2/channels/6ba7b810-9dad-11d1-80b4-00c04fd430c8 \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_JWT_TOKEN" \
  -H 400">class="text-emerald-400">"Content-Type: application/json" \
  -d '{
    400">class="text-emerald-400">"display_name": 400">class="text-emerald-400">"General Discussion",
    400">class="text-emerald-400">"topic": 400">class="text-emerald-400">"Weekly standup notes and general chat"
  }'

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"channel": {
    400">class="text-emerald-400">"id": 400">class="text-emerald-400">"6ba7b810-9dad-11d1-80b4-00c04fd430c8",
    400">class="text-emerald-400">"workspace_id": 400">class="text-emerald-400">"550e8400-e29b-41d4-a716-446655440000",
    400">class="text-emerald-400">"name": 400">class="text-emerald-400">"general",
    400">class="text-emerald-400">"display_name": 400">class="text-emerald-400">"General Discussion",
    400">class="text-emerald-400">"description": 400">class="text-emerald-400">"Main workspace channel",
    400">class="text-emerald-400">"channel_type": 400">class="text-emerald-400">"text",
    400">class="text-emerald-400">"topic": 400">class="text-emerald-400">"Weekly standup notes and general chat",
    400">class="text-emerald-400">"is_archived": false,
    400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-01-15T10:00:00.000Z",
    400">class="text-emerald-400">"updated_at": 400">class="text-emerald-400">"2026-03-19T15:35:00.000Z"
  }
}
DELETE/api/v2/channels/:idAuthenticated

Delete a channel. CASCADE deletes all related data (messages, members, pins). Broadcasts socket event.

Path Parameters

idstringrequired

UUID of the channel to delete.

Request

cURL
400">curl -X 400">DELETE https:400">class="text-zinc-500">//api.lvng.ai/api/v2/channels/f47ac10b-58cc-4372-a567-0e02b2c3d479 \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_JWT_TOKEN"

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"message": 400">class="text-emerald-400">"Channel deleted successfully"
}

Channel Members

Manage channel membership. Members are validated against workspace membership before being added. Supports individual adds, bulk adds, role updates, and email-based invites.

GET/api/v2/channels/:id/membersAuthenticated

List all members of a channel. LEFT JOINs user profiles for display details.

Path Parameters

idstringrequired

UUID of the channel.

Request

cURL
400">curl -X 400">GET https:400">class="text-zinc-500">//api.lvng.ai/api/v2/channels/6ba7b810-9dad-11d1-80b4-00c04fd430c8/members \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_JWT_TOKEN"

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"members": [
    {
      400">class="text-emerald-400">"user_id": 400">class="text-emerald-400">"a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11",
      400">class="text-emerald-400">"display_name": 400">class="text-emerald-400">"Matty Squarzoni",
      400">class="text-emerald-400">"email": 400">class="text-emerald-400">"matty@lvng.ai",
      400">class="text-emerald-400">"avatar_url": 400">class="text-emerald-400">"https:400">class="text-zinc-500">//storage.lvng.ai/avatars/a0eebc99.jpg",
      400">class="text-emerald-400">"role": 400">class="text-emerald-400">"admin",
      400">class="text-emerald-400">"joined_at": 400">class="text-emerald-400">"2026-01-15T10:00:00.000Z"
    },
    {
      400">class="text-emerald-400">"user_id": 400">class="text-emerald-400">"b1ffc99a-0d1c-5fa9-cc7e-7cc0ce491b22",
      400">class="text-emerald-400">"display_name": 400">class="text-emerald-400">"Sarah Chen",
      400">class="text-emerald-400">"email": 400">class="text-emerald-400">"sarah@lvng.ai",
      400">class="text-emerald-400">"avatar_url": null,
      400">class="text-emerald-400">"role": 400">class="text-emerald-400">"member",
      400">class="text-emerald-400">"joined_at": 400">class="text-emerald-400">"2026-01-16T09:30:00.000Z"
    }
  ],
  400">class="text-emerald-400">"count": 2
}
POST/api/v2/channels/:id/membersAuthenticated

Add a user to the channel. Validates workspace membership first.

Path Parameters

idstringrequired

UUID of the channel.

Body Parameters

user_idstringrequired

UUID of the user to add.

Request

cURL
400">curl -X 400">POST https:400">class="text-zinc-500">//api.lvng.ai/api/v2/channels/6ba7b810-9dad-11d1-80b4-00c04fd430c8/members \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_JWT_TOKEN" \
  -H 400">class="text-emerald-400">"Content-Type: application/json" \
  -d '{
    400">class="text-emerald-400">"user_id": 400">class="text-emerald-400">"c2aad00b-1e2d-6gb0-dd8f-8dd1df502c33"
  }'

Response 201

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"member": {
    400">class="text-emerald-400">"user_id": 400">class="text-emerald-400">"c2aad00b-1e2d-6gb0-dd8f-8dd1df502c33",
    400">class="text-emerald-400">"channel_id": 400">class="text-emerald-400">"6ba7b810-9dad-11d1-80b4-00c04fd430c8",
    400">class="text-emerald-400">"role": 400">class="text-emerald-400">"member",
    400">class="text-emerald-400">"joined_at": 400">class="text-emerald-400">"2026-03-19T15:40:00.000Z"
  }
}
PATCH/api/v2/channels/:id/members/:userIdAuthenticated

Update a member's role within the channel.

Path Parameters

idstringrequired

UUID of the channel.

userIdstringrequired

UUID of the user to update.

Body Parameters

rolestringrequired

New role: admin or member.

Request

cURL
400">curl -X 400">PATCH https:400">class="text-zinc-500">//api.lvng.ai/api/v2/channels/6ba7b810-9dad-11d1-80b4-00c04fd430c8/members/b1ffc99a-0d1c-5fa9-cc7e-7cc0ce491b22 \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_JWT_TOKEN" \
  -H 400">class="text-emerald-400">"Content-Type: application/json" \
  -d '{
    400">class="text-emerald-400">"role": 400">class="text-emerald-400">"admin"
  }'

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"member": {
    400">class="text-emerald-400">"user_id": 400">class="text-emerald-400">"b1ffc99a-0d1c-5fa9-cc7e-7cc0ce491b22",
    400">class="text-emerald-400">"channel_id": 400">class="text-emerald-400">"6ba7b810-9dad-11d1-80b4-00c04fd430c8",
    400">class="text-emerald-400">"role": 400">class="text-emerald-400">"admin",
    400">class="text-emerald-400">"joined_at": 400">class="text-emerald-400">"2026-01-16T09:30:00.000Z"
  }
}
DELETE/api/v2/channels/:id/members/:userIdAuthenticated

Remove a member from the channel.

Path Parameters

idstringrequired

UUID of the channel.

userIdstringrequired

UUID of the user to remove.

Request

cURL
400">curl -X 400">DELETE https:400">class="text-zinc-500">//api.lvng.ai/api/v2/channels/6ba7b810-9dad-11d1-80b4-00c04fd430c8/members/c2aad00b-1e2d-6gb0-dd8f-8dd1df502c33 \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_JWT_TOKEN"

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"message": 400">class="text-emerald-400">"Member removed successfully"
}
POST/api/v2/channels/:id/inviteAuthenticated

Invite a user by email. Looks up the user and adds them if found.

Path Parameters

idstringrequired

UUID of the channel.

Body Parameters

emailstringrequired

Email address to invite.

Request

cURL
400">curl -X 400">POST https:400">class="text-zinc-500">//api.lvng.ai/api/v2/channels/6ba7b810-9dad-11d1-80b4-00c04fd430c8/invite \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_JWT_TOKEN" \
  -H 400">class="text-emerald-400">"Content-Type: application/json" \
  -d '{
    400">class="text-emerald-400">"email": 400">class="text-emerald-400">"alex@example.com"
  }'

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"status": 400">class="text-emerald-400">"added",
  400">class="text-emerald-400">"member": {
    400">class="text-emerald-400">"user_id": 400">class="text-emerald-400">"d3bbe11c-2f3e-7hc1-ee9g-9ee2eg613d44",
    400">class="text-emerald-400">"channel_id": 400">class="text-emerald-400">"6ba7b810-9dad-11d1-80b4-00c04fd430c8",
    400">class="text-emerald-400">"role": 400">class="text-emerald-400">"member",
    400">class="text-emerald-400">"joined_at": 400">class="text-emerald-400">"2026-03-19T15:45:00.000Z"
  }
}
POST/api/v2/channels/:id/members/bulkAuthenticated

Add up to 50 members in a single request. Uses UPSERT to avoid duplicates.

Path Parameters

idstringrequired

UUID of the channel.

Body Parameters

user_idsstring[]required

Array of user UUIDs to add. Maximum 50.

Request

cURL
400">curl -X 400">POST https:400">class="text-zinc-500">//api.lvng.ai/api/v2/channels/6ba7b810-9dad-11d1-80b4-00c04fd430c8/members/bulk \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_JWT_TOKEN" \
  -H 400">class="text-emerald-400">"Content-Type: application/json" \
  -d '{
    400">class="text-emerald-400">"user_ids": [
      400">class="text-emerald-400">"d3bbe11c-2f3e-7hc1-ee9g-9ee2eg613d44",
      400">class="text-emerald-400">"e4ccf22d-3g4f-8id2-ff0h-0ff3fh724e55",
      400">class="text-emerald-400">"f5ddg33e-4h5g-9je3-gg1i-1gg4gi835f66"
    ]
  }'

Response 201

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"members": [
    {
      400">class="text-emerald-400">"user_id": 400">class="text-emerald-400">"d3bbe11c-2f3e-7hc1-ee9g-9ee2eg613d44",
      400">class="text-emerald-400">"role": 400">class="text-emerald-400">"member",
      400">class="text-emerald-400">"joined_at": 400">class="text-emerald-400">"2026-03-19T15:50:00.000Z"
    },
    {
      400">class="text-emerald-400">"user_id": 400">class="text-emerald-400">"e4ccf22d-3g4f-8id2-ff0h-0ff3fh724e55",
      400">class="text-emerald-400">"role": 400">class="text-emerald-400">"member",
      400">class="text-emerald-400">"joined_at": 400">class="text-emerald-400">"2026-03-19T15:50:00.000Z"
    },
    {
      400">class="text-emerald-400">"user_id": 400">class="text-emerald-400">"f5ddg33e-4h5g-9je3-gg1i-1gg4gi835f66",
      400">class="text-emerald-400">"role": 400">class="text-emerald-400">"member",
      400">class="text-emerald-400">"joined_at": 400">class="text-emerald-400">"2026-03-19T15:50:00.000Z"
    }
  ],
  400">class="text-emerald-400">"added": 3
}

Digital Twins

Assign digital twins to channels. Twins process incoming messages and can respond based on their configuration and knowledge base.

GET/api/v2/channels/:id/twinsAuthenticated

List all digital twins assigned to a channel.

Path Parameters

idstringrequired

UUID of the channel.

Request

cURL
400">curl -X 400">GET https:400">class="text-zinc-500">//api.lvng.ai/api/v2/channels/6ba7b810-9dad-11d1-80b4-00c04fd430c8/twins \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_JWT_TOKEN"

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"twins": [
    {
      400">class="text-emerald-400">"id": 400">class="text-emerald-400">"1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed",
      400">class="text-emerald-400">"name": 400">class="text-emerald-400">"Research Assistant",
      400">class="text-emerald-400">"participation_mode": 400">class="text-emerald-400">"active",
      400">class="text-emerald-400">"assigned_at": 400">class="text-emerald-400">"2026-02-10T14:00:00.000Z"
    }
  ]
}
POST/api/v2/channels/:id/twinsAuthenticated

Assign a digital twin to the channel.

Path Parameters

idstringrequired

UUID of the channel.

Body Parameters

ai_twin_idstringrequired

UUID of the digital twin to assign.

participation_modestring

How the twin participates: active, passive, or on-demand.

Request

cURL
400">curl -X 400">POST https:400">class="text-zinc-500">//api.lvng.ai/api/v2/channels/6ba7b810-9dad-11d1-80b4-00c04fd430c8/twins \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_JWT_TOKEN" \
  -H 400">class="text-emerald-400">"Content-Type: application/json" \
  -d '{
    400">class="text-emerald-400">"ai_twin_id": 400">class="text-emerald-400">"2c0e7dce-ccge-5c3e-0c6e-bc9egcce5cfe",
    400">class="text-emerald-400">"participation_mode": 400">class="text-emerald-400">"active"
  }'

Response 201

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"twin": {
    400">class="text-emerald-400">"ai_twin_id": 400">class="text-emerald-400">"2c0e7dce-ccge-5c3e-0c6e-bc9egcce5cfe",
    400">class="text-emerald-400">"channel_id": 400">class="text-emerald-400">"6ba7b810-9dad-11d1-80b4-00c04fd430c8",
    400">class="text-emerald-400">"participation_mode": 400">class="text-emerald-400">"active",
    400">class="text-emerald-400">"assigned_at": 400">class="text-emerald-400">"2026-03-19T16:00:00.000Z"
  }
}
DELETE/api/v2/channels/:id/twins/:twinIdAuthenticated

Remove a digital twin from the channel.

Path Parameters

idstringrequired

UUID of the channel.

twinIdstringrequired

UUID of the twin to remove.

Request

cURL
400">curl -X 400">DELETE https:400">class="text-zinc-500">//api.lvng.ai/api/v2/channels/6ba7b810-9dad-11d1-80b4-00c04fd430c8/twins/2c0e7dce-ccge-5c3e-0c6e-bc9egcce5cfe \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_JWT_TOKEN"

Response 200

{
  400">class="text-emerald-400">"success": true
}

Pinned Messages

Pin and unpin messages within a channel. Pinned state is stored in the message's metadata column as pinned: true.

POST/api/v2/channels/:id/messages/:messageId/pinAuthenticated

Pin a message. Sets metadata.pinned=true on the message.

Path Parameters

idstringrequired

UUID of the channel.

messageIdstringrequired

UUID of the message to pin.

Request

cURL
400">curl -X 400">POST https:400">class="text-zinc-500">//api.lvng.ai/api/v2/channels/6ba7b810-9dad-11d1-80b4-00c04fd430c8/messages/7c9e6679-7425-40de-944b-e07fc1f90ae7/pin \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_JWT_TOKEN"

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"message": {
    400">class="text-emerald-400">"id": 400">class="text-emerald-400">"7c9e6679-7425-40de-944b-e07fc1f90ae7",
    400">class="text-emerald-400">"channel_id": 400">class="text-emerald-400">"6ba7b810-9dad-11d1-80b4-00c04fd430c8",
    400">class="text-emerald-400">"content": 400">class="text-emerald-400">"Q2 roadmap finalized. All features listed below are confirmed.",
    400">class="text-emerald-400">"metadata": {
      400">class="text-emerald-400">"pinned": true,
      400">class="text-emerald-400">"pinned_by": 400">class="text-emerald-400">"a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11",
      400">class="text-emerald-400">"pinned_at": 400">class="text-emerald-400">"2026-03-19T16:10:00.000Z"
    },
    400">class="text-emerald-400">"updated_at": 400">class="text-emerald-400">"2026-03-19T16:10:00.000Z"
  }
}
DELETE/api/v2/channels/:id/messages/:messageId/pinAuthenticated

Unpin a message. Strips pinned fields from metadata.

Path Parameters

idstringrequired

UUID of the channel.

messageIdstringrequired

UUID of the message to unpin.

Request

cURL
400">curl -X 400">DELETE https:400">class="text-zinc-500">//api.lvng.ai/api/v2/channels/6ba7b810-9dad-11d1-80b4-00c04fd430c8/messages/7c9e6679-7425-40de-944b-e07fc1f90ae7/pin \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_JWT_TOKEN"

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"message": {
    400">class="text-emerald-400">"id": 400">class="text-emerald-400">"7c9e6679-7425-40de-944b-e07fc1f90ae7",
    400">class="text-emerald-400">"channel_id": 400">class="text-emerald-400">"6ba7b810-9dad-11d1-80b4-00c04fd430c8",
    400">class="text-emerald-400">"content": 400">class="text-emerald-400">"Q2 roadmap finalized. All features listed below are confirmed.",
    400">class="text-emerald-400">"metadata": {},
    400">class="text-emerald-400">"updated_at": 400">class="text-emerald-400">"2026-03-19T16:12:00.000Z"
  }
}
GET/api/v2/channels/:id/pinsAuthenticated

List all pinned messages in a channel. Filters by metadata->>pinned='true'.

Path Parameters

idstringrequired

UUID of the channel.

Request

cURL
400">curl -X 400">GET https:400">class="text-zinc-500">//api.lvng.ai/api/v2/channels/6ba7b810-9dad-11d1-80b4-00c04fd430c8/pins \
  -H 400">class="text-emerald-400">"Authorization: Bearer YOUR_JWT_TOKEN"

Response 200

{
  400">class="text-emerald-400">"success": true,
  400">class="text-emerald-400">"pins": [
    {
      400">class="text-emerald-400">"id": 400">class="text-emerald-400">"7c9e6679-7425-40de-944b-e07fc1f90ae7",
      400">class="text-emerald-400">"channel_id": 400">class="text-emerald-400">"6ba7b810-9dad-11d1-80b4-00c04fd430c8",
      400">class="text-emerald-400">"content": 400">class="text-emerald-400">"Q2 roadmap finalized. All features listed below are confirmed.",
      400">class="text-emerald-400">"user_id": 400">class="text-emerald-400">"a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11",
      400">class="text-emerald-400">"metadata": {
        400">class="text-emerald-400">"pinned": true,
        400">class="text-emerald-400">"pinned_by": 400">class="text-emerald-400">"a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11",
        400">class="text-emerald-400">"pinned_at": 400">class="text-emerald-400">"2026-03-19T16:10:00.000Z"
      },
      400">class="text-emerald-400">"created_at": 400">class="text-emerald-400">"2026-03-19T14:30:00.000Z"
    }
  ],
  400">class="text-emerald-400">"count": 1
}