GoliathDevelopersGet an API key
Reference/Teamgenerated from the gateway manifest

listTeamMembers

List EVERY member of your organization with their membership facts: the roster.

POST/api/v1/callREADreadruns as the key's owner
View as Markdown

List EVERY member of your organization with their membership facts: the roster. Offset-paginated (offset + limit; limit defaults to 50, maximum 100; newest member first), so walk pages until one comes back short rather than treating the first page as the whole team. Each row carries organizationRole (ADMIN | MEMBER: ADMIN is the role every ADMIN-scoped operation requires of the key owner) and organizationMembershipStatus (ACTIVE | SUSPENDED). REMOVED MEMBERS ARE INCLUDED: a suspended person is still a row here, so filter on organizationMembershipStatus before reporting who is on the team, and never read a row's presence as "currently works here". Optional searchTerm is a SUBSTRING match on name and email for a plain term and on the id for a uuid; a phone number is matched ONLY when the term is a complete US number (a partial such as the last four digits is searched as a name/email substring and finds no phone: an empty page there is not evidence nobody has the number). Plain terms rank by similarity; a complete email, phone or uuid keeps newest-first and can also return members whose value contains it. Capabilities are not here: the key owner's own come from getMyCapabilities, and an admin reads a teammate's with getTeamMemberCapabilities. Use listTeammates instead when you only need to pick one active person by a partial name.

curl https://server.goliathdata.com/api/v1/call \
  -H "Authorization: Bearer $GOLIATH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "operationId": "listTeamMembers",
    "variables": {}
  }'
import { GoliathClient } from '@goliath-data/sdk'

const goliath = new GoliathClient({
  apiKey: process.env.GOLIATH_API_KEY!,
  baseUrl: 'https://server.goliathdata.com',
})

const result = await goliath.team.listTeamMembers({})
const res = await fetch('https://server.goliathdata.com/api/v1/call', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.GOLIATH_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    operationId: 'listTeamMembers',
    variables: {}
  }),
})
const { data, errors } = await res.json()

limit is clamped to 100.

Variables

The example sends only what the schema requires. Some operations also need one of several optional variables (one filter or another, say); the description above says which.

searchTermString
offsetInt

Default 0.

limitInt

Default 50.

Response

What comes back under data: a list shows as one entry, and a value as its type.

response shape
{
  "data": {
    "teamQuery": {
      "listTeamMembers": [
        {
          "id": "<ID>",
          "firstName": "…",
          "lastName": "…",
          "email": "…",
          "phoneNumber": "…",
          "organizationRole": "ADMIN",
          "organizationMembershipStatus": "ACTIVE",
          "createdAt": "2026-01-01T00:00:00.000Z"
        }
      ]
    }
  }
}

Errors

Behaviour

A read. It rejects an Idempotency-Key header with 400 bad_request.