Skip to main content

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
}
}
}