---
title: "Search GitHub users"
method: POST
path: "/search/users"
---

# Search GitHub users

`POST /search/users`

Full-text search across user login, name, bio, company, and location using BM25 ranking. Results include relevance scores. Requires SEARCH service. Credits: 1 per result returned + graph relationship credits if includeAttributes is specified.

## Request body

- SearchUsersRequest
  - `query` union, required — Full-text search query across user fields. Searches: login, displayName, bio, company, location, emails, resolvedCountry, resolvedState, resolvedCity (with login weighted 2x). Supports: string (single query), string[] (RRF fusion), null (filter-only)
    - string
    - string[]
  - `maxResults` integer — Maximum number of results to return (default: 100, max: 1000)
  - `first` integer — Alias for maxResults (takes precedence if both provided)
  - `filters` union
    - object — Optional filters for narrowing search results. Supports filtering on: githubId, login, displayName, bio, company, location, emails, resolvedCountry, resolvedState, resolvedCity. Full-text searchable fields (automatically searched): login, displayName, bio, company, location, emails, resolvedCountry, resolvedState, resolvedCity. Filter structure: - Field filters: { field: "fieldName", op: "Eq"|"In", value: string|string[] } - Composite filters: { op: "And"|"Or", filters: [...] } Supported operators: - String fields: Eq (exact match), In (one of array) - Use And/Or to combine multiple filters
      - `field` string, required — Field name to filter on
      - `op` 'Eq' | 'NotEq' | 'In' | 'NotIn' | 'Lt' | 'Lte' | 'Gt' | 'Gte' | 'Glob' | 'NotGlob' | 'IGlob' | 'NotIGlob' | 'Regex' | 'Contains' | 'NotContains' | 'ContainsAny' | 'NotContainsAny' | 'AnyLt' | 'AnyLte' | 'AnyGt' | 'AnyGte' | 'ContainsAllTokens', required — Filter operator
      - `value` union, required — Filter value (type depends on field and operator)
        - string
        - number
        - boolean
        - string[]
        - number[]
    - object — Optional filters for narrowing search results. Supports filtering on: githubId, login, displayName, bio, company, location, emails, resolvedCountry, resolvedState, resolvedCity. Full-text searchable fields (automatically searched): login, displayName, bio, company, location, emails, resolvedCountry, resolvedState, resolvedCity. Filter structure: - Field filters: { field: "fieldName", op: "Eq"|"In", value: string|string[] } - Composite filters: { op: "And"|"Or", filters: [...] } Supported operators: - String fields: Eq (exact match), In (one of array) - Use And/Or to combine multiple filters
      - `op` 'And' | 'Or', required — Composite operator
      - `filters` object[], required — Array of field filters
        - `field` string, required — Field name to filter on
        - `op` 'Eq' | 'NotEq' | 'In' | 'NotIn' | 'Lt' | 'Lte' | 'Gt' | 'Gte' | 'Glob' | 'NotGlob' | 'IGlob' | 'NotIGlob' | 'Regex' | 'Contains' | 'NotContains' | 'ContainsAny' | 'NotContainsAny' | 'AnyLt' | 'AnyLte' | 'AnyGt' | 'AnyGte' | 'ContainsAllTokens', required — Filter operator
        - `value` union, required — Filter value (type depends on field and operator)
          - string
          - number
          - boolean
          - string[]
          - number[]
    - object — Optional filters for narrowing search results. Supports filtering on: githubId, login, displayName, bio, company, location, emails, resolvedCountry, resolvedState, resolvedCity. Full-text searchable fields (automatically searched): login, displayName, bio, company, location, emails, resolvedCountry, resolvedState, resolvedCity. Filter structure: - Field filters: { field: "fieldName", op: "Eq"|"In", value: string|string[] } - Composite filters: { op: "And"|"Or", filters: [...] } Supported operators: - String fields: Eq (exact match), In (one of array) - Use And/Or to combine multiple filters
      - `op` 'And' | 'Or', required — Composite operator
      - `filters` union[], required — Array of filters
        - union
          - object
            - `field` string, required — Field name to filter on
            - `op` 'Eq' | 'NotEq' | 'In' | 'NotIn' | 'Lt' | 'Lte' | 'Gt' | 'Gte' | 'Glob' | 'NotGlob' | 'IGlob' | 'NotIGlob' | 'Regex' | 'Contains' | 'NotContains' | 'ContainsAny' | 'NotContainsAny' | 'AnyLt' | 'AnyLte' | 'AnyGt' | 'AnyGte' | 'ContainsAllTokens', required — Filter operator
            - `value` union, required — Filter value (type depends on field and operator)
              - …
          - object
            - `op` 'And' | 'Or', required — Composite operator
            - `filters` object[], required — Array of field filters
              - …
  - `enablePagination` boolean — Enable cursor-based pagination to fetch results across multiple requests
  - `after` string — Cursor for pagination (from previous response pageInfo.endCursor)
  - `includeAttributes` object — Optional user graph relationships to include (followers, following, owns, stars, contributes, devrank)
    - `followers` object — Include followers with cursor pagination
      - `first` integer, required — Number of items to return (max: 100)
      - `after` string — Cursor for pagination (opaque base64-encoded)
      - `filters` union — Optional filters for users. Supports fields like login, company, location, resolvedCountry, resolvedState, resolvedCity. Operators: Eq, NotEq, In, NotIn, Lt, Lte, Gt, Gte.
        - object
          - `field` string, required — Field name to filter on
          - `op` 'Eq' | 'NotEq' | 'In' | 'NotIn' | 'Lt' | 'Lte' | 'Gt' | 'Gte' | 'Glob' | 'NotGlob' | 'IGlob' | 'NotIGlob' | 'Regex' | 'Contains' | 'NotContains' | 'ContainsAny' | 'NotContainsAny' | 'AnyLt' | 'AnyLte' | 'AnyGt' | 'AnyGte' | 'ContainsAllTokens', required — Filter operator
          - `value` union, required — Filter value (type depends on field and operator)
            - string
            - number
            - boolean
            - string[]
            - number[]
        - object
          - `op` 'And' | 'Or', required — Composite operator
          - `filters` object[], required — Array of field filters
            - `field` string, required — Field name to filter on
            - `op` 'Eq' | 'NotEq' | 'In' | 'NotIn' | 'Lt' | 'Lte' | 'Gt' | 'Gte' | 'Glob' | 'NotGlob' | 'IGlob' | 'NotIGlob' | 'Regex' | 'Contains' | 'NotContains' | 'ContainsAny' | 'NotContainsAny' | 'AnyLt' | 'AnyLte' | 'AnyGt' | 'AnyGte' | 'ContainsAllTokens', required — Filter operator
            - `value` union, required — Filter value (type depends on field and operator)
              - …
        - object
          - `op` 'And' | 'Or', required — Composite operator
          - `filters` union[], required — Array of filters
            - union
              - …
    - `following` object — Include users this user follows with cursor pagination
      - `first` integer, required — Number of items to return (max: 100)
      - `after` string — Cursor for pagination (opaque base64-encoded)
      - `filters` union — Optional filters for users. Supports fields like login, company, location, resolvedCountry, resolvedState, resolvedCity. Operators: Eq, NotEq, In, NotIn, Lt, Lte, Gt, Gte.
        - object
          - `field` string, required — Field name to filter on
          - `op` 'Eq' | 'NotEq' | 'In' | 'NotIn' | 'Lt' | 'Lte' | 'Gt' | 'Gte' | 'Glob' | 'NotGlob' | 'IGlob' | 'NotIGlob' | 'Regex' | 'Contains' | 'NotContains' | 'ContainsAny' | 'NotContainsAny' | 'AnyLt' | 'AnyLte' | 'AnyGt' | 'AnyGte' | 'ContainsAllTokens', required — Filter operator
          - `value` union, required — Filter value (type depends on field and operator)
            - string
            - number
            - boolean
            - string[]
            - number[]
        - object
          - `op` 'And' | 'Or', required — Composite operator
          - `filters` object[], required — Array of field filters
            - `field` string, required — Field name to filter on
            - `op` 'Eq' | 'NotEq' | 'In' | 'NotIn' | 'Lt' | 'Lte' | 'Gt' | 'Gte' | 'Glob' | 'NotGlob' | 'IGlob' | 'NotIGlob' | 'Regex' | 'Contains' | 'NotContains' | 'ContainsAny' | 'NotContainsAny' | 'AnyLt' | 'AnyLte' | 'AnyGt' | 'AnyGte' | 'ContainsAllTokens', required — Filter operator
            - `value` union, required — Filter value (type depends on field and operator)
              - …
        - object
          - `op` 'And' | 'Or', required — Composite operator
          - `filters` union[], required — Array of filters
            - union
              - …
    - `stars` object — Include starred repositories with cursor pagination
      - `first` integer, required — Number of items to return (max: 100)
      - `after` string — Cursor for pagination (opaque base64-encoded)
      - `filters` union — Optional filters for users. Supports fields like login, company, location, resolvedCountry, resolvedState, resolvedCity. Operators: Eq, NotEq, In, NotIn, Lt, Lte, Gt, Gte.
        - object
          - `field` string, required — Field name to filter on
          - `op` 'Eq' | 'NotEq' | 'In' | 'NotIn' | 'Lt' | 'Lte' | 'Gt' | 'Gte' | 'Glob' | 'NotGlob' | 'IGlob' | 'NotIGlob' | 'Regex' | 'Contains' | 'NotContains' | 'ContainsAny' | 'NotContainsAny' | 'AnyLt' | 'AnyLte' | 'AnyGt' | 'AnyGte' | 'ContainsAllTokens', required — Filter operator
          - `value` union, required — Filter value (type depends on field and operator)
            - string
            - number
            - boolean
            - string[]
            - number[]
        - object
          - `op` 'And' | 'Or', required — Composite operator
          - `filters` object[], required — Array of field filters
            - `field` string, required — Field name to filter on
            - `op` 'Eq' | 'NotEq' | 'In' | 'NotIn' | 'Lt' | 'Lte' | 'Gt' | 'Gte' | 'Glob' | 'NotGlob' | 'IGlob' | 'NotIGlob' | 'Regex' | 'Contains' | 'NotContains' | 'ContainsAny' | 'NotContainsAny' | 'AnyLt' | 'AnyLte' | 'AnyGt' | 'AnyGte' | 'ContainsAllTokens', required — Filter operator
            - `value` union, required — Filter value (type depends on field and operator)
              - …
        - object
          - `op` 'And' | 'Or', required — Composite operator
          - `filters` union[], required — Array of filters
            - union
              - …
    - `owns` object — Include owned repositories with cursor pagination
      - `first` integer, required — Number of items to return (max: 100)
      - `after` string — Cursor for pagination (opaque base64-encoded)
      - `filters` union — Optional filters for users. Supports fields like login, company, location, resolvedCountry, resolvedState, resolvedCity. Operators: Eq, NotEq, In, NotIn, Lt, Lte, Gt, Gte.
        - object
          - `field` string, required — Field name to filter on
          - `op` 'Eq' | 'NotEq' | 'In' | 'NotIn' | 'Lt' | 'Lte' | 'Gt' | 'Gte' | 'Glob' | 'NotGlob' | 'IGlob' | 'NotIGlob' | 'Regex' | 'Contains' | 'NotContains' | 'ContainsAny' | 'NotContainsAny' | 'AnyLt' | 'AnyLte' | 'AnyGt' | 'AnyGte' | 'ContainsAllTokens', required — Filter operator
          - `value` union, required — Filter value (type depends on field and operator)
            - string
            - number
            - boolean
            - string[]
            - number[]
        - object
          - `op` 'And' | 'Or', required — Composite operator
          - `filters` object[], required — Array of field filters
            - `field` string, required — Field name to filter on
            - `op` 'Eq' | 'NotEq' | 'In' | 'NotIn' | 'Lt' | 'Lte' | 'Gt' | 'Gte' | 'Glob' | 'NotGlob' | 'IGlob' | 'NotIGlob' | 'Regex' | 'Contains' | 'NotContains' | 'ContainsAny' | 'NotContainsAny' | 'AnyLt' | 'AnyLte' | 'AnyGt' | 'AnyGte' | 'ContainsAllTokens', required — Filter operator
            - `value` union, required — Filter value (type depends on field and operator)
              - …
        - object
          - `op` 'And' | 'Or', required — Composite operator
          - `filters` union[], required — Array of filters
            - union
              - …
    - `contributes` object — Include contributed repositories with cursor pagination
      - `first` integer, required — Number of items to return (max: 100)
      - `after` string — Cursor for pagination (opaque base64-encoded)
      - `filters` union — Optional filters for users. Supports fields like login, company, location, resolvedCountry, resolvedState, resolvedCity. Operators: Eq, NotEq, In, NotIn, Lt, Lte, Gt, Gte.
        - object
          - `field` string, required — Field name to filter on
          - `op` 'Eq' | 'NotEq' | 'In' | 'NotIn' | 'Lt' | 'Lte' | 'Gt' | 'Gte' | 'Glob' | 'NotGlob' | 'IGlob' | 'NotIGlob' | 'Regex' | 'Contains' | 'NotContains' | 'ContainsAny' | 'NotContainsAny' | 'AnyLt' | 'AnyLte' | 'AnyGt' | 'AnyGte' | 'ContainsAllTokens', required — Filter operator
          - `value` union, required — Filter value (type depends on field and operator)
            - string
            - number
            - boolean
            - string[]
            - number[]
        - object
          - `op` 'And' | 'Or', required — Composite operator
          - `filters` object[], required — Array of field filters
            - `field` string, required — Field name to filter on
            - `op` 'Eq' | 'NotEq' | 'In' | 'NotIn' | 'Lt' | 'Lte' | 'Gt' | 'Gte' | 'Glob' | 'NotGlob' | 'IGlob' | 'NotIGlob' | 'Regex' | 'Contains' | 'NotContains' | 'ContainsAny' | 'NotContainsAny' | 'AnyLt' | 'AnyLte' | 'AnyGt' | 'AnyGte' | 'ContainsAllTokens', required — Filter operator
            - `value` union, required — Filter value (type depends on field and operator)
              - …
        - object
          - `op` 'And' | 'Or', required — Composite operator
          - `filters` union[], required — Array of filters
            - union
              - …
    - `devrank` boolean — Include devrank data for the user
    - `professional` boolean — Include LinkedIn professional profile data (requires PROFESSIONAL service)
    - `aggregates` boolean — Include aggregate metrics (e.g. totalStars) for the user
  - `dataset` 'standard' | 'professional' — Which dataset to search. 'standard' uses the base namespace; 'professional' uses the LinkedIn-enriched namespace with additional professional fields.

## Response `200`

Search results retrieved successfully

- SearchUsersResponse — unresolved $ref

## Other responses

- `400` — Bad request - invalid search query, parameters, or filter validation failed
- `401` — Unauthorized - API key missing
- `403` — Forbidden - Invalid API key or SEARCH service access denied
- `500` — Internal server error - search service failure or unexpected error

---

[API](https://skmtc.net/bountylaboratories/apis/bounty-lab-public-api.md) · [All operations](https://skmtc.net/bountylaboratories/apis/bounty-lab-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/bountylaboratories/bounty-lab-public-api/revisions/910f8a49ca9e/schema)
