Querying members
members returns the people on your board — both ClaimedMember and UnclaimedMember, exposed via the Member interface. See the Members concept for the underlying data model.
All examples require a JWT — get one from the homepage first. The API key needs the members:read scope.
List members
query listMembers($first: Int) {
members(first: $first) {
totalCount
nodes {
id
identification
memberSince
leaveDate
type
status
}
pageInfo {
hasNextPage
endCursor
}
}
}
Sortable fields: memberSince, identification.
Filterable fields: id, identification, status.
Default page size is 25.
Filter by status
Narrow to active members only — exclude former and pending.
query activeMembers($status: MembershipStatus!) {
members(where: { status: { eq: $status } }, first: 50) {
totalCount
nodes {
id
identification
memberSince
}
}
}
MembershipStatus enum values: Internal, PendingApproval, PendingUserAcceptance, Active, Inactive, Former, RejectedByUser.
Search by identification
identification supports case-insensitive contains (custom handler), so you can do a substring search.
query searchByIdentification($q: String!) {
members(where: { identification: { contains: $q } }, first: 25) {
totalCount
nodes {
id
identification
status
}
}
}
Distinguish claimed from unclaimed members
Member is an interface. The type field tells you which subtype each row is, and inline fragments project type-specific data: ClaimedMember carries userId (the platform user it's linked to), UnclaimedMember carries invitationDate.
query memberDetails($first: Int) {
members(first: $first) {
nodes {
id
identification
type
status
memberSince
leaveDate
... on ClaimedMember {
userId
}
... on UnclaimedMember {
invitationDate
}
}
}
}
Recently joined members
Sort by memberSince descending to see the most recent additions.
query recentlyJoined($first: Int) {
members(order: [{ memberSince: DESC }], first: $first) {
nodes {
id
identification
memberSince
type
}
}
}