For the complete documentation index, see llms.txt. This page is also available as Markdown.

Collections

List my collections

get

Returns a paginated list of the authenticated user's collections.

Query parameters
pagenumber · nullableOptional
limitnumber · nullableOptional
sortBystring · enumOptionalPossible values:
sortOrderstring · enumOptionalPossible values:
searchTextstringOptional
Header parameters
X-Semble-ClientstringOptional

A short identifier for your integration (e.g. my-plugin, mcp). Please set this if you are building an integration — it helps Semble understand which tools people use. Values are lowercased before being recorded, so MyPlugin and myplugin are the same client. After lowercasing the value must match ^[a-z0-9][a-z0-9_-]{0,31}$; values that do not are ignored, and the client is inferred from the auth method instead.

Example: my-pluginPattern: ^[A-Za-z0-9][A-Za-z0-9_-]{0,31}$
Responses
200

200

application/json
get/network.cosmik.collection.listMine
GET /xrpc/network.cosmik.collection.listMine HTTP/1.1
Host: api.semble.so
Accept: */*
200

200

{
  "collections": [
    {
      "id": "text",
      "uri": "text",
      "name": "text",
      "author": {
        "id": "text",
        "name": "text",
        "handle": "text",
        "avatarUrl": "text",
        "bannerUrl": "text",
        "description": "text",
        "isFollowing": true,
        "isSubscribed": true,
        "subscriptionScopes": [
          "CARD"
        ],
        "followsYou": true,
        "followerCount": 1,
        "followingCount": 1,
        "followedCollectionsCount": 1,
        "urlCardCount": 1,
        "collectionCount": 1,
        "connectionCount": 1,
        "connectionsByType": {
          "total": 1,
          "ANY_ADDITIONAL_PROPERTY": 1
        },
        "labels": [
          {
            "$type": "com.atproto.label.defs#label",
            "ver": 1,
            "src": "text",
            "uri": "text",
            "cid": "text",
            "val": "text",
            "neg": true,
            "cts": "text",
            "exp": "text",
            "sig": null
          }
        ]
      },
      "description": "text",
      "accessType": "OPEN",
      "cardCount": 1,
      "createdAt": "text",
      "updatedAt": "text",
      "isFollowing": true,
      "isSubscribed": true,
      "subscriptionScopes": [
        "CARD"
      ],
      "followerCount": 1
    }
  ],
  "pagination": {
    "currentPage": 1,
    "totalPages": 1,
    "totalCount": 1,
    "hasMore": true,
    "limit": 1
  },
  "sorting": {
    "sortOrder": "asc",
    "sortBy": "name"
  }
}

Create a collection

post

Creates a new collection for the authenticated user.

Header parameters
X-Semble-ClientstringOptional

A short identifier for your integration (e.g. my-plugin, mcp). Please set this if you are building an integration — it helps Semble understand which tools people use. Values are lowercased before being recorded, so MyPlugin and myplugin are the same client. After lowercasing the value must match ^[a-z0-9][a-z0-9_-]{0,31}$; values that do not are ignored, and the client is inferred from the auth method instead.

Example: my-pluginPattern: ^[A-Za-z0-9][A-Za-z0-9_-]{0,31}$
Body
namestringRequired
descriptionstringOptional
accessTypestring · enumOptionalPossible values:
Responses
200

200

application/json
collectionIdstringRequired
post/network.cosmik.collection.create
POST /xrpc/network.cosmik.collection.create HTTP/1.1
Host: api.semble.so
Content-Type: application/json
Accept: */*
Content-Length: 56

{
  "name": "text",
  "description": "text",
  "accessType": "OPEN"
}
200

200

{
  "collectionId": "text"
}

Get collections containing a URL

get

Returns collections that contain a specific URL.

Query parameters
pagenumber · nullableOptional
limitnumber · nullableOptional
sortBystring · enumOptionalPossible values:
sortOrderstring · enumOptionalPossible values:
urlstringRequired
Header parameters
X-Semble-ClientstringOptional

A short identifier for your integration (e.g. my-plugin, mcp). Please set this if you are building an integration — it helps Semble understand which tools people use. Values are lowercased before being recorded, so MyPlugin and myplugin are the same client. After lowercasing the value must match ^[a-z0-9][a-z0-9_-]{0,31}$; values that do not are ignored, and the client is inferred from the auth method instead.

Example: my-pluginPattern: ^[A-Za-z0-9][A-Za-z0-9_-]{0,31}$
Responses
200

200

application/json
get/network.cosmik.collection.getForUrl
GET /xrpc/network.cosmik.collection.getForUrl?url=text HTTP/1.1
Host: api.semble.so
Accept: */*
200

200

{
  "collections": [
    {
      "id": "text",
      "uri": "text",
      "name": "text",
      "author": {
        "id": "text",
        "name": "text",
        "handle": "text",
        "avatarUrl": "text",
        "bannerUrl": "text",
        "description": "text",
        "isFollowing": true,
        "isSubscribed": true,
        "subscriptionScopes": [
          "CARD"
        ],
        "followsYou": true,
        "followerCount": 1,
        "followingCount": 1,
        "followedCollectionsCount": 1,
        "urlCardCount": 1,
        "collectionCount": 1,
        "connectionCount": 1,
        "connectionsByType": {
          "total": 1,
          "ANY_ADDITIONAL_PROPERTY": 1
        },
        "labels": [
          {
            "$type": "com.atproto.label.defs#label",
            "ver": 1,
            "src": "text",
            "uri": "text",
            "cid": "text",
            "val": "text",
            "neg": true,
            "cts": "text",
            "exp": "text",
            "sig": null
          }
        ]
      },
      "description": "text",
      "accessType": "OPEN",
      "cardCount": 1,
      "createdAt": "text",
      "updatedAt": "text",
      "isFollowing": true,
      "isSubscribed": true,
      "subscriptionScopes": [
        "CARD"
      ],
      "followerCount": 1
    }
  ],
  "pagination": {
    "currentPage": 1,
    "totalPages": 1,
    "totalCount": 1,
    "hasMore": true,
    "limit": 1
  },
  "sorting": {
    "sortOrder": "asc",
    "sortBy": "name"
  }
}

Search collections

get

Full-text search across collection names and descriptions, optionally filtered by user or access type.

Query parameters
pagenumber · nullableOptional
limitnumber · nullableOptional
sortBystring · enumOptionalPossible values:
sortOrderstring · enumOptionalPossible values:
searchTextstringOptional
identifierstringOptional
accessTypestring · enumOptionalPossible values:
Header parameters
X-Semble-ClientstringOptional

A short identifier for your integration (e.g. my-plugin, mcp). Please set this if you are building an integration — it helps Semble understand which tools people use. Values are lowercased before being recorded, so MyPlugin and myplugin are the same client. After lowercasing the value must match ^[a-z0-9][a-z0-9_-]{0,31}$; values that do not are ignored, and the client is inferred from the auth method instead.

Example: my-pluginPattern: ^[A-Za-z0-9][A-Za-z0-9_-]{0,31}$
Responses
200

200

application/json
get/network.cosmik.collection.search
GET /xrpc/network.cosmik.collection.search HTTP/1.1
Host: api.semble.so
Accept: */*
200

200

{
  "collections": [
    {
      "id": "text",
      "uri": "text",
      "name": "text",
      "author": {
        "id": "text",
        "name": "text",
        "handle": "text",
        "avatarUrl": "text",
        "bannerUrl": "text",
        "description": "text",
        "isFollowing": true,
        "isSubscribed": true,
        "subscriptionScopes": [
          "CARD"
        ],
        "followsYou": true,
        "followerCount": 1,
        "followingCount": 1,
        "followedCollectionsCount": 1,
        "urlCardCount": 1,
        "collectionCount": 1,
        "connectionCount": 1,
        "connectionsByType": {
          "total": 1,
          "ANY_ADDITIONAL_PROPERTY": 1
        },
        "labels": [
          {
            "$type": "com.atproto.label.defs#label",
            "ver": 1,
            "src": "text",
            "uri": "text",
            "cid": "text",
            "val": "text",
            "neg": true,
            "cts": "text",
            "exp": "text",
            "sig": null
          }
        ]
      },
      "description": "text",
      "accessType": "OPEN",
      "cardCount": 1,
      "createdAt": "text",
      "updatedAt": "text",
      "isFollowing": true,
      "isSubscribed": true,
      "subscriptionScopes": [
        "CARD"
      ],
      "followerCount": 1
    }
  ],
  "pagination": {
    "currentPage": 1,
    "totalPages": 1,
    "totalCount": 1,
    "hasMore": true,
    "limit": 1
  },
  "sorting": {
    "sortOrder": "asc",
    "sortBy": "name"
  }
}

Get a collection by ID

get

Returns a collection and its cards, paginated, by collection ID.

Query parameters
pagenumber · nullableOptional
limitnumber · nullableOptional
sortBystring · enumOptionalPossible values:
sortOrderstring · enumOptionalPossible values:
collectionIdstringRequired
urlTypestring · enumOptionalPossible values:
Header parameters
X-Semble-ClientstringOptional

A short identifier for your integration (e.g. my-plugin, mcp). Please set this if you are building an integration — it helps Semble understand which tools people use. Values are lowercased before being recorded, so MyPlugin and myplugin are the same client. After lowercasing the value must match ^[a-z0-9][a-z0-9_-]{0,31}$; values that do not are ignored, and the client is inferred from the auth method instead.

Example: my-pluginPattern: ^[A-Za-z0-9][A-Za-z0-9_-]{0,31}$
Responses
200

200

application/json
idstringRequired
uristringOptional
namestringRequired
descriptionstringOptional
accessTypestring · enumOptionalPossible values:
cardCountnumberRequired
createdAtstringRequired
updatedAtstringRequired
isFollowingbooleanOptional
isSubscribedbooleanOptional
followerCountnumberOptional
get/network.cosmik.collection.get
GET /xrpc/network.cosmik.collection.get?collectionId=text HTTP/1.1
Host: api.semble.so
Accept: */*
200

200

{
  "id": "text",
  "uri": "text",
  "name": "text",
  "author": {
    "id": "text",
    "name": "text",
    "handle": "text",
    "avatarUrl": "text",
    "bannerUrl": "text",
    "description": "text",
    "isFollowing": true,
    "isSubscribed": true,
    "subscriptionScopes": [
      "CARD"
    ],
    "followsYou": true,
    "followerCount": 1,
    "followingCount": 1,
    "followedCollectionsCount": 1,
    "urlCardCount": 1,
    "collectionCount": 1,
    "connectionCount": 1,
    "connectionsByType": {
      "total": 1,
      "ANY_ADDITIONAL_PROPERTY": 1
    },
    "labels": [
      {
        "$type": "com.atproto.label.defs#label",
        "ver": 1,
        "src": "text",
        "uri": "text",
        "cid": "text",
        "val": "text",
        "neg": true,
        "cts": "text",
        "exp": "text",
        "sig": null
      }
    ]
  },
  "description": "text",
  "accessType": "OPEN",
  "cardCount": 1,
  "createdAt": "text",
  "updatedAt": "text",
  "isFollowing": true,
  "isSubscribed": true,
  "subscriptionScopes": [
    "CARD"
  ],
  "followerCount": 1,
  "urlCards": [
    {
      "id": "text",
      "type": "URL",
      "url": "text",
      "uri": "text",
      "cardContent": {
        "url": "text",
        "title": "text",
        "description": "text",
        "author": "text",
        "publishedDate": "text",
        "siteName": "text",
        "imageUrl": "text",
        "type": "text",
        "retrievedAt": "text",
        "doi": "text",
        "isbn": "text"
      },
      "libraryCount": 1,
      "urlLibraryCount": 1,
      "urlInLibrary": true,
      "urlConnectionCount": 1,
      "urlIsConnected": true,
      "createdAt": "text",
      "updatedAt": "text",
      "author": {
        "id": "text",
        "name": "text",
        "handle": "text",
        "avatarUrl": "text",
        "bannerUrl": "text",
        "description": "text",
        "isFollowing": true,
        "isSubscribed": true,
        "subscriptionScopes": [
          "CARD"
        ],
        "followsYou": true,
        "followerCount": 1,
        "followingCount": 1,
        "followedCollectionsCount": 1,
        "urlCardCount": 1,
        "collectionCount": 1,
        "connectionCount": 1,
        "connectionsByType": {
          "total": 1,
          "ANY_ADDITIONAL_PROPERTY": 1
        },
        "labels": [
          {
            "$type": "com.atproto.label.defs#label",
            "ver": 1,
            "src": "text",
            "uri": "text",
            "cid": "text",
            "val": "text",
            "neg": true,
            "cts": "text",
            "exp": "text",
            "sig": null
          }
        ]
      },
      "note": {
        "id": "text",
        "text": "text"
      }
    }
  ],
  "pagination": {
    "currentPage": 1,
    "totalPages": 1,
    "totalCount": 1,
    "hasMore": true,
    "limit": 1
  },
  "sorting": {
    "sortOrder": "asc",
    "sortBy": "createdAt"
  }
}

Update a collection

post

Updates the name, description, or access type of a collection.

Header parameters
X-Semble-ClientstringOptional

A short identifier for your integration (e.g. my-plugin, mcp). Please set this if you are building an integration — it helps Semble understand which tools people use. Values are lowercased before being recorded, so MyPlugin and myplugin are the same client. After lowercasing the value must match ^[a-z0-9][a-z0-9_-]{0,31}$; values that do not are ignored, and the client is inferred from the auth method instead.

Example: my-pluginPattern: ^[A-Za-z0-9][A-Za-z0-9_-]{0,31}$
Body
collectionIdstringRequired
namestringRequired
descriptionstringOptional
accessTypestring · enumOptionalPossible values:
Responses
200

200

application/json
collectionIdstringRequired
post/network.cosmik.collection.update
POST /xrpc/network.cosmik.collection.update HTTP/1.1
Host: api.semble.so
Content-Type: application/json
Accept: */*
Content-Length: 78

{
  "collectionId": "text",
  "name": "text",
  "description": "text",
  "accessType": "OPEN"
}
200

200

{
  "collectionId": "text"
}

Delete a collection

post

Permanently deletes a collection owned by the authenticated user.

Header parameters
X-Semble-ClientstringOptional

A short identifier for your integration (e.g. my-plugin, mcp). Please set this if you are building an integration — it helps Semble understand which tools people use. Values are lowercased before being recorded, so MyPlugin and myplugin are the same client. After lowercasing the value must match ^[a-z0-9][a-z0-9_-]{0,31}$; values that do not are ignored, and the client is inferred from the auth method instead.

Example: my-pluginPattern: ^[A-Za-z0-9][A-Za-z0-9_-]{0,31}$
Body
collectionIdstringRequired
Responses
200

200

application/json
collectionIdstringRequired
post/network.cosmik.collection.delete
POST /xrpc/network.cosmik.collection.delete HTTP/1.1
Host: api.semble.so
Content-Type: application/json
Accept: */*
Content-Length: 23

{
  "collectionId": "text"
}
200

200

{
  "collectionId": "text"
}

List a user's collections

get

Returns a paginated list of collections owned by a user, identified by handle or DID.

Query parameters
pagenumber · nullableOptional
limitnumber · nullableOptional
sortBystring · enumOptionalPossible values:
sortOrderstring · enumOptionalPossible values:
identifierstringRequired
searchTextstringOptional
Header parameters
X-Semble-ClientstringOptional

A short identifier for your integration (e.g. my-plugin, mcp). Please set this if you are building an integration — it helps Semble understand which tools people use. Values are lowercased before being recorded, so MyPlugin and myplugin are the same client. After lowercasing the value must match ^[a-z0-9][a-z0-9_-]{0,31}$; values that do not are ignored, and the client is inferred from the auth method instead.

Example: my-pluginPattern: ^[A-Za-z0-9][A-Za-z0-9_-]{0,31}$
Responses
200

200

application/json
get/network.cosmik.collection.listByUser
GET /xrpc/network.cosmik.collection.listByUser?identifier=text HTTP/1.1
Host: api.semble.so
Accept: */*
200

200

{
  "collections": [
    {
      "id": "text",
      "uri": "text",
      "name": "text",
      "author": {
        "id": "text",
        "name": "text",
        "handle": "text",
        "avatarUrl": "text",
        "bannerUrl": "text",
        "description": "text",
        "isFollowing": true,
        "isSubscribed": true,
        "subscriptionScopes": [
          "CARD"
        ],
        "followsYou": true,
        "followerCount": 1,
        "followingCount": 1,
        "followedCollectionsCount": 1,
        "urlCardCount": 1,
        "collectionCount": 1,
        "connectionCount": 1,
        "connectionsByType": {
          "total": 1,
          "ANY_ADDITIONAL_PROPERTY": 1
        },
        "labels": [
          {
            "$type": "com.atproto.label.defs#label",
            "ver": 1,
            "src": "text",
            "uri": "text",
            "cid": "text",
            "val": "text",
            "neg": true,
            "cts": "text",
            "exp": "text",
            "sig": null
          }
        ]
      },
      "description": "text",
      "accessType": "OPEN",
      "cardCount": 1,
      "createdAt": "text",
      "updatedAt": "text",
      "isFollowing": true,
      "isSubscribed": true,
      "subscriptionScopes": [
        "CARD"
      ],
      "followerCount": 1
    }
  ],
  "pagination": {
    "currentPage": 1,
    "totalPages": 1,
    "totalCount": 1,
    "hasMore": true,
    "limit": 1
  },
  "sorting": {
    "sortOrder": "asc",
    "sortBy": "name"
  }
}

Get a collection by AT URI

get

Returns a collection and its cards, looked up by AT Protocol handle and record key.

Query parameters
pagenumber · nullableOptional
limitnumber · nullableOptional
sortBystring · enumOptionalPossible values:
sortOrderstring · enumOptionalPossible values:
handlestringRequired
recordKeystringRequired
urlTypestring · enumOptionalPossible values:
Header parameters
X-Semble-ClientstringOptional

A short identifier for your integration (e.g. my-plugin, mcp). Please set this if you are building an integration — it helps Semble understand which tools people use. Values are lowercased before being recorded, so MyPlugin and myplugin are the same client. After lowercasing the value must match ^[a-z0-9][a-z0-9_-]{0,31}$; values that do not are ignored, and the client is inferred from the auth method instead.

Example: my-pluginPattern: ^[A-Za-z0-9][A-Za-z0-9_-]{0,31}$
Responses
200

200

application/json
idstringRequired
uristringOptional
namestringRequired
descriptionstringOptional
accessTypestring · enumOptionalPossible values:
cardCountnumberRequired
createdAtstringRequired
updatedAtstringRequired
isFollowingbooleanOptional
isSubscribedbooleanOptional
followerCountnumberOptional
get/network.cosmik.collection.getByAtUri
GET /xrpc/network.cosmik.collection.getByAtUri?handle=text&recordKey=text HTTP/1.1
Host: api.semble.so
Accept: */*
200

200

{
  "id": "text",
  "uri": "text",
  "name": "text",
  "author": {
    "id": "text",
    "name": "text",
    "handle": "text",
    "avatarUrl": "text",
    "bannerUrl": "text",
    "description": "text",
    "isFollowing": true,
    "isSubscribed": true,
    "subscriptionScopes": [
      "CARD"
    ],
    "followsYou": true,
    "followerCount": 1,
    "followingCount": 1,
    "followedCollectionsCount": 1,
    "urlCardCount": 1,
    "collectionCount": 1,
    "connectionCount": 1,
    "connectionsByType": {
      "total": 1,
      "ANY_ADDITIONAL_PROPERTY": 1
    },
    "labels": [
      {
        "$type": "com.atproto.label.defs#label",
        "ver": 1,
        "src": "text",
        "uri": "text",
        "cid": "text",
        "val": "text",
        "neg": true,
        "cts": "text",
        "exp": "text",
        "sig": null
      }
    ]
  },
  "description": "text",
  "accessType": "OPEN",
  "cardCount": 1,
  "createdAt": "text",
  "updatedAt": "text",
  "isFollowing": true,
  "isSubscribed": true,
  "subscriptionScopes": [
    "CARD"
  ],
  "followerCount": 1,
  "urlCards": [
    {
      "id": "text",
      "type": "URL",
      "url": "text",
      "uri": "text",
      "cardContent": {
        "url": "text",
        "title": "text",
        "description": "text",
        "author": "text",
        "publishedDate": "text",
        "siteName": "text",
        "imageUrl": "text",
        "type": "text",
        "retrievedAt": "text",
        "doi": "text",
        "isbn": "text"
      },
      "libraryCount": 1,
      "urlLibraryCount": 1,
      "urlInLibrary": true,
      "urlConnectionCount": 1,
      "urlIsConnected": true,
      "createdAt": "text",
      "updatedAt": "text",
      "author": {
        "id": "text",
        "name": "text",
        "handle": "text",
        "avatarUrl": "text",
        "bannerUrl": "text",
        "description": "text",
        "isFollowing": true,
        "isSubscribed": true,
        "subscriptionScopes": [
          "CARD"
        ],
        "followsYou": true,
        "followerCount": 1,
        "followingCount": 1,
        "followedCollectionsCount": 1,
        "urlCardCount": 1,
        "collectionCount": 1,
        "connectionCount": 1,
        "connectionsByType": {
          "total": 1,
          "ANY_ADDITIONAL_PROPERTY": 1
        },
        "labels": [
          {
            "$type": "com.atproto.label.defs#label",
            "ver": 1,
            "src": "text",
            "uri": "text",
            "cid": "text",
            "val": "text",
            "neg": true,
            "cts": "text",
            "exp": "text",
            "sig": null
          }
        ]
      },
      "note": {
        "id": "text",
        "text": "text"
      }
    }
  ],
  "pagination": {
    "currentPage": 1,
    "totalPages": 1,
    "totalCount": 1,
    "hasMore": true,
    "limit": 1
  },
  "sorting": {
    "sortOrder": "asc",
    "sortBy": "createdAt"
  }
}

List open collections with a contributor

get

Returns open collections that a given user has contributed cards to.

Query parameters
pagenumber · nullableOptional
limitnumber · nullableOptional
sortBystring · enumOptionalPossible values:
sortOrderstring · enumOptionalPossible values:
identifierstringRequired
Header parameters
X-Semble-ClientstringOptional

A short identifier for your integration (e.g. my-plugin, mcp). Please set this if you are building an integration — it helps Semble understand which tools people use. Values are lowercased before being recorded, so MyPlugin and myplugin are the same client. After lowercasing the value must match ^[a-z0-9][a-z0-9_-]{0,31}$; values that do not are ignored, and the client is inferred from the auth method instead.

Example: my-pluginPattern: ^[A-Za-z0-9][A-Za-z0-9_-]{0,31}$
Responses
200

200

application/json
get/network.cosmik.collection.listContributed
GET /xrpc/network.cosmik.collection.listContributed?identifier=text HTTP/1.1
Host: api.semble.so
Accept: */*
200

200

{
  "collections": [
    {
      "id": "text",
      "uri": "text",
      "name": "text",
      "author": {
        "id": "text",
        "name": "text",
        "handle": "text",
        "avatarUrl": "text",
        "bannerUrl": "text",
        "description": "text",
        "isFollowing": true,
        "isSubscribed": true,
        "subscriptionScopes": [
          "CARD"
        ],
        "followsYou": true,
        "followerCount": 1,
        "followingCount": 1,
        "followedCollectionsCount": 1,
        "urlCardCount": 1,
        "collectionCount": 1,
        "connectionCount": 1,
        "connectionsByType": {
          "total": 1,
          "ANY_ADDITIONAL_PROPERTY": 1
        },
        "labels": [
          {
            "$type": "com.atproto.label.defs#label",
            "ver": 1,
            "src": "text",
            "uri": "text",
            "cid": "text",
            "val": "text",
            "neg": true,
            "cts": "text",
            "exp": "text",
            "sig": null
          }
        ]
      },
      "description": "text",
      "accessType": "OPEN",
      "cardCount": 1,
      "createdAt": "text",
      "updatedAt": "text",
      "isFollowing": true,
      "isSubscribed": true,
      "subscriptionScopes": [
        "CARD"
      ],
      "followerCount": 1
    }
  ],
  "pagination": {
    "currentPage": 1,
    "totalPages": 1,
    "totalCount": 1,
    "hasMore": true,
    "limit": 1
  },
  "sorting": {
    "sortOrder": "asc",
    "sortBy": "name"
  }
}

Get collection followers

get

Returns users who follow a given collection.

Query parameters
collectionIdstringRequired
pagenumber · nullableOptional
limitnumber · nullableOptional
Header parameters
X-Semble-ClientstringOptional

A short identifier for your integration (e.g. my-plugin, mcp). Please set this if you are building an integration — it helps Semble understand which tools people use. Values are lowercased before being recorded, so MyPlugin and myplugin are the same client. After lowercasing the value must match ^[a-z0-9][a-z0-9_-]{0,31}$; values that do not are ignored, and the client is inferred from the auth method instead.

Example: my-pluginPattern: ^[A-Za-z0-9][A-Za-z0-9_-]{0,31}$
Responses
200

200

application/json
get/network.cosmik.collection.getFollowers
GET /xrpc/network.cosmik.collection.getFollowers?collectionId=text HTTP/1.1
Host: api.semble.so
Accept: */*
200

200

{
  "users": [
    {
      "id": "text",
      "name": "text",
      "handle": "text",
      "avatarUrl": "text",
      "bannerUrl": "text",
      "description": "text",
      "isFollowing": true,
      "isSubscribed": true,
      "subscriptionScopes": [
        "CARD"
      ],
      "followsYou": true,
      "followerCount": 1,
      "followingCount": 1,
      "followedCollectionsCount": 1,
      "urlCardCount": 1,
      "collectionCount": 1,
      "connectionCount": 1,
      "connectionsByType": {
        "total": 1,
        "ANY_ADDITIONAL_PROPERTY": 1
      },
      "labels": [
        {
          "$type": "com.atproto.label.defs#label",
          "ver": 1,
          "src": "text",
          "uri": "text",
          "cid": "text",
          "val": "text",
          "neg": true,
          "cts": "text",
          "exp": "text",
          "sig": null
        }
      ]
    }
  ],
  "pagination": {
    "currentPage": 1,
    "totalPages": 1,
    "totalCount": 1,
    "hasMore": true,
    "limit": 1
  }
}

Get collection follower count

get

Returns the total number of followers for a collection.

Query parameters
collectionIdstringRequired
Header parameters
X-Semble-ClientstringOptional

A short identifier for your integration (e.g. my-plugin, mcp). Please set this if you are building an integration — it helps Semble understand which tools people use. Values are lowercased before being recorded, so MyPlugin and myplugin are the same client. After lowercasing the value must match ^[a-z0-9][a-z0-9_-]{0,31}$; values that do not are ignored, and the client is inferred from the auth method instead.

Example: my-pluginPattern: ^[A-Za-z0-9][A-Za-z0-9_-]{0,31}$
Responses
200

200

application/json
countnumberRequired
get/network.cosmik.collection.getFollowerCount
GET /xrpc/network.cosmik.collection.getFollowerCount?collectionId=text HTTP/1.1
Host: api.semble.so
Accept: */*
200

200

{
  "count": 1
}

Recommended collections to save a URL to

get

Returns collections that contain URLs semantically similar to the given URL, ranked by how many similar URLs each contains. Split into the authenticated user's own collections and open collections from across the network (excluding the caller's own). The limit applies to each set independently.

Query parameters
urlstringRequired
limitnumber · nullableOptional
Header parameters
X-Semble-ClientstringOptional

A short identifier for your integration (e.g. my-plugin, mcp). Please set this if you are building an integration — it helps Semble understand which tools people use. Values are lowercased before being recorded, so MyPlugin and myplugin are the same client. After lowercasing the value must match ^[a-z0-9][a-z0-9_-]{0,31}$; values that do not are ignored, and the client is inferred from the auth method instead.

Example: my-pluginPattern: ^[A-Za-z0-9][A-Za-z0-9_-]{0,31}$
Responses
200

200

application/json
get/network.cosmik.collection.getRecommendedForUrl
GET /xrpc/network.cosmik.collection.getRecommendedForUrl?url=text HTTP/1.1
Host: api.semble.so
Accept: */*
200

200

{
  "myCollections": [
    {
      "id": "text",
      "uri": "text",
      "name": "text",
      "author": {
        "id": "text",
        "name": "text",
        "handle": "text",
        "avatarUrl": "text",
        "bannerUrl": "text",
        "description": "text",
        "isFollowing": true,
        "isSubscribed": true,
        "subscriptionScopes": [
          "CARD"
        ],
        "followsYou": true,
        "followerCount": 1,
        "followingCount": 1,
        "followedCollectionsCount": 1,
        "urlCardCount": 1,
        "collectionCount": 1,
        "connectionCount": 1,
        "connectionsByType": {
          "total": 1,
          "ANY_ADDITIONAL_PROPERTY": 1
        },
        "labels": [
          {
            "$type": "com.atproto.label.defs#label",
            "ver": 1,
            "src": "text",
            "uri": "text",
            "cid": "text",
            "val": "text",
            "neg": true,
            "cts": "text",
            "exp": "text",
            "sig": null
          }
        ]
      },
      "description": "text",
      "accessType": "OPEN",
      "cardCount": 1,
      "createdAt": "text",
      "updatedAt": "text",
      "isFollowing": true,
      "isSubscribed": true,
      "subscriptionScopes": [
        "CARD"
      ],
      "followerCount": 1
    }
  ],
  "openCollections": [
    {
      "id": "text",
      "uri": "text",
      "name": "text",
      "author": {
        "id": "text",
        "name": "text",
        "handle": "text",
        "avatarUrl": "text",
        "bannerUrl": "text",
        "description": "text",
        "isFollowing": true,
        "isSubscribed": true,
        "subscriptionScopes": [
          "CARD"
        ],
        "followsYou": true,
        "followerCount": 1,
        "followingCount": 1,
        "followedCollectionsCount": 1,
        "urlCardCount": 1,
        "collectionCount": 1,
        "connectionCount": 1,
        "connectionsByType": {
          "total": 1,
          "ANY_ADDITIONAL_PROPERTY": 1
        },
        "labels": [
          {
            "$type": "com.atproto.label.defs#label",
            "ver": 1,
            "src": "text",
            "uri": "text",
            "cid": "text",
            "val": "text",
            "neg": true,
            "cts": "text",
            "exp": "text",
            "sig": null
          }
        ]
      },
      "description": "text",
      "accessType": "OPEN",
      "cardCount": 1,
      "createdAt": "text",
      "updatedAt": "text",
      "isFollowing": true,
      "isSubscribed": true,
      "subscriptionScopes": [
        "CARD"
      ],
      "followerCount": 1
    }
  ]
}

Get collection contributors

get

Returns users who have added cards to a given collection.

Query parameters
collectionIdstringRequired
pagenumber · nullableOptional
limitnumber · nullableOptional
Header parameters
X-Semble-ClientstringOptional

A short identifier for your integration (e.g. my-plugin, mcp). Please set this if you are building an integration — it helps Semble understand which tools people use. Values are lowercased before being recorded, so MyPlugin and myplugin are the same client. After lowercasing the value must match ^[a-z0-9][a-z0-9_-]{0,31}$; values that do not are ignored, and the client is inferred from the auth method instead.

Example: my-pluginPattern: ^[A-Za-z0-9][A-Za-z0-9_-]{0,31}$
Responses
200

200

application/json
get/network.cosmik.collection.getContributors
GET /xrpc/network.cosmik.collection.getContributors?collectionId=text HTTP/1.1
Host: api.semble.so
Accept: */*
200

200

{
  "users": [
    {
      "id": "text",
      "name": "text",
      "handle": "text",
      "avatarUrl": "text",
      "bannerUrl": "text",
      "description": "text",
      "isFollowing": true,
      "isSubscribed": true,
      "subscriptionScopes": [
        "CARD"
      ],
      "followsYou": true,
      "followerCount": 1,
      "followingCount": 1,
      "followedCollectionsCount": 1,
      "urlCardCount": 1,
      "collectionCount": 1,
      "connectionCount": 1,
      "connectionsByType": {
        "total": 1,
        "ANY_ADDITIONAL_PROPERTY": 1
      },
      "labels": [
        {
          "$type": "com.atproto.label.defs#label",
          "ver": 1,
          "src": "text",
          "uri": "text",
          "cid": "text",
          "val": "text",
          "neg": true,
          "cts": "text",
          "exp": "text",
          "sig": null
        }
      ],
      "contributionCount": 1
    }
  ],
  "pagination": {
    "currentPage": 1,
    "totalPages": 1,
    "totalCount": 1,
    "hasMore": true,
    "limit": 1
  }
}

Last updated