Followers
Full code example
https://github.com/lens-protocol/api-examples/blob/master/src/follow/followers.ts
This query returns the wallet addresses which are following a profile
API Design
query Followers {
followers(request: {
profileId: "0x01",
limit: 10
}) {
items {
wallet {
address
defaultProfile {
id
name
bio
attributes {
displayType
traitType
key
value
}
followNftAddress
metadata
isDefault
handle
picture {
... on NftImage {
contractAddress
tokenId
uri
verified
}
... on MediaSet {
original {
url
mimeType
}
}
}
coverPicture {
... on NftImage {
contractAddress
tokenId
uri
verified
}
... on MediaSet {
original {
url
mimeType
}
}
}
ownedBy
dispatcher {
address
canUseRelay
}
stats {
totalFollowers
totalFollowing
totalPosts
totalComments
totalMirrors
totalPublications
totalCollects
}
followModule {
... on FeeFollowModuleSettings {
type
contractAddress
amount {
asset {
name
symbol
decimals
address
}
value
}
recipient
}
... on ProfileFollowModuleSettings {
type
}
... on RevertFollowModuleSettings {
type
}
}
}
}
totalAmountOfTimesFollowed
}
pageInfo {
prev
next
totalCount
}
}
}
{
"data": {
"followers": {
"items": [
{
"wallet": {
"address": "0x2376e9C7C604D1827bA9aCb1293Dc8b4DA2f0DB3",
"defaultProfile": {
"id": "0x14",
"name": null,
"bio": null,
"attributes": [
{
"displayType": null,
"traitType": null,
"key": "custom_field",
"value": "yes this is custom"
}
],
"followNftAddress": null,
"metadata": "ipfs://QmSfyMcnh1wnJHrAWCBjZHapTS859oNSsuDFiAPPdAHgHP",
"isDefault": true,
"handle": "no12",
"picture": null,
"coverPicture": null,
"ownedBy": "0x2376e9C7C604D1827bA9aCb1293Dc8b4DA2f0DB3",
"dispatcher": null,
"stats": {
"totalFollowers": 1,
"totalFollowing": 4,
"totalPosts": 0,
"totalComments": 0,
"totalMirrors": 0,
"totalPublications": 0,
"totalCollects": 0
},
"followModule": null
}
},
"totalAmountOfTimesFollowed": 1
},
{
"wallet": {
"address": "0xD020E01C0c90Ab005A01482d34B808874345FD82",
"defaultProfile": null,
"totalAmountOfProfiles": 0
},
"totalAmountOfTimesFollowed": 2
},
{
"wallet": {
"address": "0xEEA0C1f5ab0159dba749Dc0BAee462E5e293daaF",
"defaultProfile": {
"id": "0x032f1a",
"name": null,
"bio": null,
"attributes": [
{
"displayType": null,
"traitType": null,
"key": "custom_field",
"value": "yes this is custom"
}
],
"followNftAddress": null,
"metadata": "ipfs://QmSfyMcnh1wnJHrAWCBjZHapTS859oNSsuDFiAPPdAHgHP",
"isDefault": true,
"handle": "foobar222",
"picture": null,
"coverPicture": null,
"ownedBy": "0xEEA0C1f5ab0159dba749Dc0BAee462E5e293daaF",
"dispatcher": {
"address": "0xEEA0C1f5ab0159dba749Dc0BAee462E5e293daaF",
"canUseRelay": false
},
"stats": {
"totalFollowers": 0,
"totalFollowing": 1,
"totalPosts": 4,
"totalComments": 0,
"totalMirrors": 0,
"totalPublications": 4,
"totalCollects": 0
},
"followModule": {
"type": "FeeFollowModule",
"contractAddress": "0xBc20957342419BE3449DB77f89DEAdcb95cb32f5",
"amount": {
"asset": {
"name": "WETH",
"symbol": "WETH",
"decimals": 18,
"address": "0x3C68CE8504087f89c640D02d133646d98e64ddd9"
},
"value": "0.01"
},
"recipient": "0xEEA0C1f5ab0159dba749Dc0BAee462E5e293daaF"
}
}
},
"totalAmountOfTimesFollowed": 3
},
{
"wallet": {
"address": "0x3A5bd1E37b099aE3386D13947b6a90d97675e5e3",
"defaultProfile": {
"id": "0x02b047",
"name": null,
"bio": null,
"attributes": [
{
"displayType": null,
"traitType": null,
"key": "custom_field",
"value": "yes this is custom"
}
],
"followNftAddress": null,
"metadata": "ipfs://QmSfyMcnh1wnJHrAWCBjZHapTS859oNSsuDFiAPPdAHgHP",
"isDefault": true,
"handle": "yoginth",
"picture": null,
"coverPicture": null,
"ownedBy": "0x3A5bd1E37b099aE3386D13947b6a90d97675e5e3",
"dispatcher": null,
"stats": {
"totalFollowers": 3,
"totalFollowing": 3,
"totalPosts": 0,
"totalComments": 0,
"totalMirrors": 2,
"totalPublications": 2,
"totalCollects": 0
},
"followModule": null
}
},
"totalAmountOfTimesFollowed": 3
},
{
"wallet": {
"address": "0x9260363c60A6782c2B6a702594B75F6e7CC096aC",
"defaultProfile": {
"id": "0x032e41",
"name": null,
"bio": null,
"attributes": [
{
"displayType": null,
"traitType": null,
"key": "custom_field",
"value": "yes this is custom"
}
],
"followNftAddress": null,
"metadata": "ipfs://QmSfyMcnh1wnJHrAWCBjZHapTS859oNSsuDFiAPPdAHgHP",
"isDefault": true,
"handle": "gaming",
"picture": null,
"coverPicture": null,
"ownedBy": "0x9260363c60A6782c2B6a702594B75F6e7CC096aC",
"dispatcher": null,
"stats": {
"totalFollowers": 0,
"totalFollowing": 4,
"totalPosts": 0,
"totalComments": 0,
"totalMirrors": 0,
"totalPublications": 0,
"totalCollects": 0
},
"followModule": null
}
},
"totalAmountOfTimesFollowed": 1
}
],
"pageInfo": {
"prev": "{\"offset\":0}",
"next": "{\"offset\":5}",
"totalCount": 5
}
}
}
}
type Query {
followers(request: FollowersRequest!): PaginatedFollowersResult!
}
You will see the paging result behavior repeated a lot in the API, this is to allow you to fetch a certain amount and then page it for the most optimal request speed. Every time something is wrapped in a paging result you will always get returned a pageInfo
which holds the cursors for the previous and next alongside the total count which exists in the database. These cursors are just pointers for the server to get to the next result and do not need to be understood by your client or server. If you ever want to then page to the next result you can pass the previous and next cursor in the request cursor property.
Using LensClient SDK
const result = await lensClient.profile.allFollowers({
profileId: "",
});
Updated 6 months ago