Members

List and search site members

Returns a paginated list of members for the site. Use query parameters to filter by email, status (active/blocked), verified, or paid flags. Supports full-text search on email and display name via the q parameter.

Use this when you need to find members by criteria or browse all members. If you already have a specific member's ID and need their access group memberships, use getMember instead — listMembers does not include group assignments in the response.

Each member in the response includes: id (UUID), email, displayName, status (active or blocked), verified flag, paid flag, and timestamps (registeredAt, lastLoginAt, createdAt, updatedAt).

Results use cursor-based pagination. Pass the nextCursor value from the response as the after query parameter to fetch the next page. Default page size is 50, maximum is 100.

GET /members

List and search site members

curl --request GET \
  --url 'https://api.sotion.so/api/v1/members' \
  --header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
  "data": [
    {
      "id": "<uuid>",
      "email": "<email>",
      "displayName": "<string>",
      "status": "active",
      "verified": true,
      "paid": true,
      "registeredAt": "<date-time>",
      "lastLoginAt": "<date-time>",
      "createdAt": "<date-time>",
      "updatedAt": "<date-time>"
    }
  ],
  "pagination": {
    "hasMore": true,
    "nextCursor": "<uuid>"
  }
}

Paginated list of members.

Authorizations

  • Authorization string required header

    Per-site API key (prefix: so_...). Each key is scoped to exactly one Sotion site — the site context is determined entirely by the key. No site ID is needed in any URL. Pass as: Authorization: Bearer so_...

Query Parameters

  • after string (uuid)

    Cursor for pagination. Pass the nextCursor value from a previous response to get the next page of results.

  • email string (email)

    Filter by exact email address. Use this to look up a specific member when you know their email but not their UUID.

  • limit integer

    Number of items to return per page (1-100). Default: 50.

  • order string enum

    Sort direction. Default: 'desc' (newest first).

  • paid string enum

    Filter by paid status. 'true' = paying customer, 'false' = free.

  • q string

    Full-text search across email and display name. Case-insensitive substring match. Use this to find members when you only have a partial name or email.

  • sort string enum

    Field to sort results by. Default: 'createdAt'.

  • status string enum

    Filter by member status. 'active' = can access the site, 'blocked' = denied access.

  • verified string enum

    Filter by email verification status. 'true' = verified, 'false' = not verified.

Response

application/json
  • X-RateLimit-Limit integer response header

    Maximum requests allowed in the current window.

  • X-RateLimit-Remaining integer response header

    Requests remaining in the current window.

  • X-RateLimit-Reset integer response header

    Unix timestamp (seconds) when the rate limit window resets.

  • X-Request-Id string (uuid) response header

    Unique request identifier for support and debugging.

  • data[] object array
    + Show Child Attributes
    • id string (uuid)

      Unique identifier (UUID) for the member.

    • email string (email)

      Member's email address (normalized to lowercase).

    • displayName string nullable

      Display name shown to the member, null if not set.

    • status string enum enum

      'active' means the member can access the site. 'blocked' means the member is denied access. Allowed values: active, blocked.

    • verified boolean nullable

      Whether the member has verified their email by clicking a login link. Null if unknown.

    • paid boolean nullable

      Whether this member is marked as a paying customer. Set manually or via the API.

    • registeredAt string (date-time) nullable

      When the member first registered (clicked a login link or was added).

    • lastLoginAt string (date-time) nullable

      When the member last logged in via a login link.

    • createdAt string (date-time) nullable

      When the member record was created.

    • updatedAt string (date-time) nullable

      When the member record was last modified.

  • pagination object
    + Show Child Attributes
    • hasMore boolean

      True if there are more items after this page.

    • nextCursor string (uuid) nullable

      Pass this value as the 'after' query parameter to fetch the next page. Null when there are no more pages.