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

# Search GitHub users

`POST /api/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[]
    - unknown
    - unknown
  - `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
        - 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
          - 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
            - 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
            - 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
            - 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
            - 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
            - 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

## Response `200`

Search results retrieved successfully

- SearchUsersResponse
  - `users` PublicUserWithGraph[], required — Array of user search results with relevance scores
    - `id` string, required — BountyLab internal ID
    - `githubId` string, required — GitHub node ID
    - `login` string, required — GitHub username
    - `displayName` string, nullable — User display name
    - `bio` string, nullable — User biography
    - `company` string, nullable — Company name
    - `location` string, nullable — User location
    - `websiteUrl` string, nullable — User website URL
    - `socialAccounts` object[], nullable — Social media accounts
      - `provider` string, required
      - `url` string, required
    - `emails` string[], nullable — Obfuscated email addresses showing only the last 2 characters of the local part and full domain (e.g., "***oe@gmail.com"). Use /api/users/best-email endpoint for unobfuscated email access with intelligent selection.
    - `resolvedCountry` string, nullable — Resolved country from location
    - `resolvedState` string, nullable — Resolved state/region from location
    - `resolvedCity` string, nullable — Resolved city from location
    - `createdAt` string, nullable — ISO 8601 timestamp when user account was created
    - `updatedAt` string, nullable — ISO 8601 timestamp when user was last updated
    - `embeddedAt` string, nullable — ISO 8601 timestamp when metadata was extracted
    - `score` number — Relevance score from search (0-1, lower is more relevant for distance metrics)
    - `devrank` object — Developer ranking data (only present when fetched from devrank endpoints)
      - `crackedScore` number, required
      - `tier` string, required
      - `rawScore` number, required
      - `trust` number, required
      - `pc` number, required
      - `followersIn` number, required
      - `followingOut` number, required
      - `community` integer, required
      - `createdAt` string, required
      - `updatedAt` string, required
    - `followers` PaginatedUsers — Users who follow this user (when includeAttributes.followers is specified)
      - `edges` PublicUser[], required — Array of user objects
        - `id` string, required — BountyLab internal ID
        - `githubId` string, required — GitHub node ID
        - `login` string, required — GitHub username
        - `displayName` string, nullable — User display name
        - `bio` string, nullable — User biography
        - `company` string, nullable — Company name
        - `location` string, nullable — User location
        - `websiteUrl` string, nullable — User website URL
        - `socialAccounts` object[], nullable — Social media accounts
          - `provider` string, required
          - `url` string, required
        - `emails` string[], nullable — Obfuscated email addresses showing only the last 2 characters of the local part and full domain (e.g., "***oe@gmail.com"). Use /api/users/best-email endpoint for unobfuscated email access with intelligent selection.
        - `resolvedCountry` string, nullable — Resolved country from location
        - `resolvedState` string, nullable — Resolved state/region from location
        - `resolvedCity` string, nullable — Resolved city from location
        - `createdAt` string, nullable — ISO 8601 timestamp when user account was created
        - `updatedAt` string, nullable — ISO 8601 timestamp when user was last updated
        - `embeddedAt` string, nullable — ISO 8601 timestamp when metadata was extracted
        - `score` number — Relevance score from search (0-1, lower is more relevant for distance metrics)
      - `pageInfo` PageInfo, required — Pagination information
        - `hasNextPage` boolean, required — Whether there are more items available
        - `endCursor` string, nullable, required — Cursor to fetch next page (null if no more items)
    - `following` object — Users this user follows (when includeAttributes.following is specified)
      - `edges` PublicUser[], required — Array of user objects
        - `id` string, required — BountyLab internal ID
        - `githubId` string, required — GitHub node ID
        - `login` string, required — GitHub username
        - `displayName` string, nullable — User display name
        - `bio` string, nullable — User biography
        - `company` string, nullable — Company name
        - `location` string, nullable — User location
        - `websiteUrl` string, nullable — User website URL
        - `socialAccounts` object[], nullable — Social media accounts
          - `provider` string, required
          - `url` string, required
        - `emails` string[], nullable — Obfuscated email addresses showing only the last 2 characters of the local part and full domain (e.g., "***oe@gmail.com"). Use /api/users/best-email endpoint for unobfuscated email access with intelligent selection.
        - `resolvedCountry` string, nullable — Resolved country from location
        - `resolvedState` string, nullable — Resolved state/region from location
        - `resolvedCity` string, nullable — Resolved city from location
        - `createdAt` string, nullable — ISO 8601 timestamp when user account was created
        - `updatedAt` string, nullable — ISO 8601 timestamp when user was last updated
        - `embeddedAt` string, nullable — ISO 8601 timestamp when metadata was extracted
        - `score` number — Relevance score from search (0-1, lower is more relevant for distance metrics)
      - `pageInfo` PageInfo, required — Pagination information
        - `hasNextPage` boolean, required — Whether there are more items available
        - `endCursor` string, nullable, required — Cursor to fetch next page (null if no more items)
    - `stars` PaginatedRepositories — Repositories this user starred (when includeAttributes.stars is specified)
      - `edges` PublicRepositoryWithGraph[], required — Array of repository objects
        - `id` string, required — BountyLab internal ID
        - `githubId` string, required — GitHub node ID
        - `ownerLogin` string, required — Repository owner username
        - `name` string, required — Repository name
        - `description` string, nullable — Repository description
        - `stargazerCount` number, required — Number of stars
        - `language` string, nullable — Primary programming language
        - `totalIssuesCount` number, required — Total number of issues (open + closed)
        - `totalIssuesOpen` number, required — Number of open issues
        - `totalIssuesClosed` number, required — Number of closed issues
        - `readmePreview` string, nullable — Preview of repository README (first ~500 chars)
        - `lastContributorLocations` string[], nullable — Locations of last contributors to this repository
        - `createdAt` string, nullable — ISO 8601 timestamp when repository was created
        - `updatedAt` string, nullable — ISO 8601 timestamp when repository was last updated
        - `embeddedAt` string, nullable — ISO 8601 timestamp when embedding was created
        - `score` number — Relevance score from search (0-1, lower is more relevant for cosine distance)
        - `owner` object — Repository owner (when includeAttributes.owner = true)
          - `id` string, required — BountyLab internal ID
          - `githubId` string, required — GitHub node ID
          - `login` string, required — GitHub username
          - `displayName` string, nullable — User display name
          - `bio` string, nullable — User biography
          - `company` string, nullable — Company name
          - `location` string, nullable — User location
          - `websiteUrl` string, nullable — User website URL
          - `socialAccounts` object[], nullable — Social media accounts
            - `provider` string, required
            - `url` string, required
          - `emails` string[], nullable — Obfuscated email addresses showing only the last 2 characters of the local part and full domain (e.g., "***oe@gmail.com"). Use /api/users/best-email endpoint for unobfuscated email access with intelligent selection.
          - `resolvedCountry` string, nullable — Resolved country from location
          - `resolvedState` string, nullable — Resolved state/region from location
          - `resolvedCity` string, nullable — Resolved city from location
          - `createdAt` string, nullable — ISO 8601 timestamp when user account was created
          - `updatedAt` string, nullable — ISO 8601 timestamp when user was last updated
          - `embeddedAt` string, nullable — ISO 8601 timestamp when metadata was extracted
          - `score` number — Relevance score from search (0-1, lower is more relevant for distance metrics)
        - `contributors` object — Repository contributors (when includeAttributes.contributors is specified)
          - `edges` PublicUser[], required — Array of user objects
            - `id` string, required — BountyLab internal ID
            - `githubId` string, required — GitHub node ID
            - `login` string, required — GitHub username
            - `displayName` string, nullable — User display name
            - `bio` string, nullable — User biography
            - `company` string, nullable — Company name
            - `location` string, nullable — User location
            - `websiteUrl` string, nullable — User website URL
            - `socialAccounts` object[], nullable — Social media accounts
              - …
            - `emails` string[], nullable — Obfuscated email addresses showing only the last 2 characters of the local part and full domain (e.g., "***oe@gmail.com"). Use /api/users/best-email endpoint for unobfuscated email access with intelligent selection.
            - `resolvedCountry` string, nullable — Resolved country from location
            - `resolvedState` string, nullable — Resolved state/region from location
            - `resolvedCity` string, nullable — Resolved city from location
            - `createdAt` string, nullable — ISO 8601 timestamp when user account was created
            - `updatedAt` string, nullable — ISO 8601 timestamp when user was last updated
            - `embeddedAt` string, nullable — ISO 8601 timestamp when metadata was extracted
            - `score` number — Relevance score from search (0-1, lower is more relevant for distance metrics)
          - `pageInfo` PageInfo, required — Pagination information
            - `hasNextPage` boolean, required — Whether there are more items available
            - `endCursor` string, nullable, required — Cursor to fetch next page (null if no more items)
        - `starrers` object — Users who starred this repository (when includeAttributes.starrers is specified)
          - `edges` PublicUser[], required — Array of user objects
            - `id` string, required — BountyLab internal ID
            - `githubId` string, required — GitHub node ID
            - `login` string, required — GitHub username
            - `displayName` string, nullable — User display name
            - `bio` string, nullable — User biography
            - `company` string, nullable — Company name
            - `location` string, nullable — User location
            - `websiteUrl` string, nullable — User website URL
            - `socialAccounts` object[], nullable — Social media accounts
              - …
            - `emails` string[], nullable — Obfuscated email addresses showing only the last 2 characters of the local part and full domain (e.g., "***oe@gmail.com"). Use /api/users/best-email endpoint for unobfuscated email access with intelligent selection.
            - `resolvedCountry` string, nullable — Resolved country from location
            - `resolvedState` string, nullable — Resolved state/region from location
            - `resolvedCity` string, nullable — Resolved city from location
            - `createdAt` string, nullable — ISO 8601 timestamp when user account was created
            - `updatedAt` string, nullable — ISO 8601 timestamp when user was last updated
            - `embeddedAt` string, nullable — ISO 8601 timestamp when metadata was extracted
            - `score` number — Relevance score from search (0-1, lower is more relevant for distance metrics)
          - `pageInfo` PageInfo, required — Pagination information
            - `hasNextPage` boolean, required — Whether there are more items available
            - `endCursor` string, nullable, required — Cursor to fetch next page (null if no more items)
        - `ownerDevrank` object — Devrank data for the repository owner (when includeAttributes.ownerDevrank = true)
          - `crackedScore` number, required
          - `tier` string, required
          - `rawScore` number, required
          - `trust` number, required
          - `pc` number, required
          - `followersIn` number, required
          - `followingOut` number, required
          - `community` integer, required
          - `createdAt` string, required
          - `updatedAt` string, required
      - `pageInfo` PageInfo, required — Pagination information
        - `hasNextPage` boolean, required — Whether there are more items available
        - `endCursor` string, nullable, required — Cursor to fetch next page (null if no more items)
    - `owns` object — Repositories this user owns (when includeAttributes.owns is specified)
      - `edges` PublicRepositoryWithGraph[], required — Array of repository objects
        - `id` string, required — BountyLab internal ID
        - `githubId` string, required — GitHub node ID
        - `ownerLogin` string, required — Repository owner username
        - `name` string, required — Repository name
        - `description` string, nullable — Repository description
        - `stargazerCount` number, required — Number of stars
        - `language` string, nullable — Primary programming language
        - `totalIssuesCount` number, required — Total number of issues (open + closed)
        - `totalIssuesOpen` number, required — Number of open issues
        - `totalIssuesClosed` number, required — Number of closed issues
        - `readmePreview` string, nullable — Preview of repository README (first ~500 chars)
        - `lastContributorLocations` string[], nullable — Locations of last contributors to this repository
        - `createdAt` string, nullable — ISO 8601 timestamp when repository was created
        - `updatedAt` string, nullable — ISO 8601 timestamp when repository was last updated
        - `embeddedAt` string, nullable — ISO 8601 timestamp when embedding was created
        - `score` number — Relevance score from search (0-1, lower is more relevant for cosine distance)
        - `owner` object — Repository owner (when includeAttributes.owner = true)
          - `id` string, required — BountyLab internal ID
          - `githubId` string, required — GitHub node ID
          - `login` string, required — GitHub username
          - `displayName` string, nullable — User display name
          - `bio` string, nullable — User biography
          - `company` string, nullable — Company name
          - `location` string, nullable — User location
          - `websiteUrl` string, nullable — User website URL
          - `socialAccounts` object[], nullable — Social media accounts
            - `provider` string, required
            - `url` string, required
          - `emails` string[], nullable — Obfuscated email addresses showing only the last 2 characters of the local part and full domain (e.g., "***oe@gmail.com"). Use /api/users/best-email endpoint for unobfuscated email access with intelligent selection.
          - `resolvedCountry` string, nullable — Resolved country from location
          - `resolvedState` string, nullable — Resolved state/region from location
          - `resolvedCity` string, nullable — Resolved city from location
          - `createdAt` string, nullable — ISO 8601 timestamp when user account was created
          - `updatedAt` string, nullable — ISO 8601 timestamp when user was last updated
          - `embeddedAt` string, nullable — ISO 8601 timestamp when metadata was extracted
          - `score` number — Relevance score from search (0-1, lower is more relevant for distance metrics)
        - `contributors` object — Repository contributors (when includeAttributes.contributors is specified)
          - `edges` PublicUser[], required — Array of user objects
            - `id` string, required — BountyLab internal ID
            - `githubId` string, required — GitHub node ID
            - `login` string, required — GitHub username
            - `displayName` string, nullable — User display name
            - `bio` string, nullable — User biography
            - `company` string, nullable — Company name
            - `location` string, nullable — User location
            - `websiteUrl` string, nullable — User website URL
            - `socialAccounts` object[], nullable — Social media accounts
              - …
            - `emails` string[], nullable — Obfuscated email addresses showing only the last 2 characters of the local part and full domain (e.g., "***oe@gmail.com"). Use /api/users/best-email endpoint for unobfuscated email access with intelligent selection.
            - `resolvedCountry` string, nullable — Resolved country from location
            - `resolvedState` string, nullable — Resolved state/region from location
            - `resolvedCity` string, nullable — Resolved city from location
            - `createdAt` string, nullable — ISO 8601 timestamp when user account was created
            - `updatedAt` string, nullable — ISO 8601 timestamp when user was last updated
            - `embeddedAt` string, nullable — ISO 8601 timestamp when metadata was extracted
            - `score` number — Relevance score from search (0-1, lower is more relevant for distance metrics)
          - `pageInfo` PageInfo, required — Pagination information
            - `hasNextPage` boolean, required — Whether there are more items available
            - `endCursor` string, nullable, required — Cursor to fetch next page (null if no more items)
        - `starrers` object — Users who starred this repository (when includeAttributes.starrers is specified)
          - `edges` PublicUser[], required — Array of user objects
            - `id` string, required — BountyLab internal ID
            - `githubId` string, required — GitHub node ID
            - `login` string, required — GitHub username
            - `displayName` string, nullable — User display name
            - `bio` string, nullable — User biography
            - `company` string, nullable — Company name
            - `location` string, nullable — User location
            - `websiteUrl` string, nullable — User website URL
            - `socialAccounts` object[], nullable — Social media accounts
              - …
            - `emails` string[], nullable — Obfuscated email addresses showing only the last 2 characters of the local part and full domain (e.g., "***oe@gmail.com"). Use /api/users/best-email endpoint for unobfuscated email access with intelligent selection.
            - `resolvedCountry` string, nullable — Resolved country from location
            - `resolvedState` string, nullable — Resolved state/region from location
            - `resolvedCity` string, nullable — Resolved city from location
            - `createdAt` string, nullable — ISO 8601 timestamp when user account was created
            - `updatedAt` string, nullable — ISO 8601 timestamp when user was last updated
            - `embeddedAt` string, nullable — ISO 8601 timestamp when metadata was extracted
            - `score` number — Relevance score from search (0-1, lower is more relevant for distance metrics)
          - `pageInfo` PageInfo, required — Pagination information
            - `hasNextPage` boolean, required — Whether there are more items available
            - `endCursor` string, nullable, required — Cursor to fetch next page (null if no more items)
        - `ownerDevrank` object — Devrank data for the repository owner (when includeAttributes.ownerDevrank = true)
          - `crackedScore` number, required
          - `tier` string, required
          - `rawScore` number, required
          - `trust` number, required
          - `pc` number, required
          - `followersIn` number, required
          - `followingOut` number, required
          - `community` integer, required
          - `createdAt` string, required
          - `updatedAt` string, required
      - `pageInfo` PageInfo, required — Pagination information
        - `hasNextPage` boolean, required — Whether there are more items available
        - `endCursor` string, nullable, required — Cursor to fetch next page (null if no more items)
    - `contributes` object — Repositories this user contributes to (when includeAttributes.contributes is specified)
      - `edges` PublicRepositoryWithGraph[], required — Array of repository objects
        - `id` string, required — BountyLab internal ID
        - `githubId` string, required — GitHub node ID
        - `ownerLogin` string, required — Repository owner username
        - `name` string, required — Repository name
        - `description` string, nullable — Repository description
        - `stargazerCount` number, required — Number of stars
        - `language` string, nullable — Primary programming language
        - `totalIssuesCount` number, required — Total number of issues (open + closed)
        - `totalIssuesOpen` number, required — Number of open issues
        - `totalIssuesClosed` number, required — Number of closed issues
        - `readmePreview` string, nullable — Preview of repository README (first ~500 chars)
        - `lastContributorLocations` string[], nullable — Locations of last contributors to this repository
        - `createdAt` string, nullable — ISO 8601 timestamp when repository was created
        - `updatedAt` string, nullable — ISO 8601 timestamp when repository was last updated
        - `embeddedAt` string, nullable — ISO 8601 timestamp when embedding was created
        - `score` number — Relevance score from search (0-1, lower is more relevant for cosine distance)
        - `owner` object — Repository owner (when includeAttributes.owner = true)
          - `id` string, required — BountyLab internal ID
          - `githubId` string, required — GitHub node ID
          - `login` string, required — GitHub username
          - `displayName` string, nullable — User display name
          - `bio` string, nullable — User biography
          - `company` string, nullable — Company name
          - `location` string, nullable — User location
          - `websiteUrl` string, nullable — User website URL
          - `socialAccounts` object[], nullable — Social media accounts
            - `provider` string, required
            - `url` string, required
          - `emails` string[], nullable — Obfuscated email addresses showing only the last 2 characters of the local part and full domain (e.g., "***oe@gmail.com"). Use /api/users/best-email endpoint for unobfuscated email access with intelligent selection.
          - `resolvedCountry` string, nullable — Resolved country from location
          - `resolvedState` string, nullable — Resolved state/region from location
          - `resolvedCity` string, nullable — Resolved city from location
          - `createdAt` string, nullable — ISO 8601 timestamp when user account was created
          - `updatedAt` string, nullable — ISO 8601 timestamp when user was last updated
          - `embeddedAt` string, nullable — ISO 8601 timestamp when metadata was extracted
          - `score` number — Relevance score from search (0-1, lower is more relevant for distance metrics)
        - `contributors` object — Repository contributors (when includeAttributes.contributors is specified)
          - `edges` PublicUser[], required — Array of user objects
            - `id` string, required — BountyLab internal ID
            - `githubId` string, required — GitHub node ID
            - `login` string, required — GitHub username
            - `displayName` string, nullable — User display name
            - `bio` string, nullable — User biography
            - `company` string, nullable — Company name
            - `location` string, nullable — User location
            - `websiteUrl` string, nullable — User website URL
            - `socialAccounts` object[], nullable — Social media accounts
              - …
            - `emails` string[], nullable — Obfuscated email addresses showing only the last 2 characters of the local part and full domain (e.g., "***oe@gmail.com"). Use /api/users/best-email endpoint for unobfuscated email access with intelligent selection.
            - `resolvedCountry` string, nullable — Resolved country from location
            - `resolvedState` string, nullable — Resolved state/region from location
            - `resolvedCity` string, nullable — Resolved city from location
            - `createdAt` string, nullable — ISO 8601 timestamp when user account was created
            - `updatedAt` string, nullable — ISO 8601 timestamp when user was last updated
            - `embeddedAt` string, nullable — ISO 8601 timestamp when metadata was extracted
            - `score` number — Relevance score from search (0-1, lower is more relevant for distance metrics)
          - `pageInfo` PageInfo, required — Pagination information
            - `hasNextPage` boolean, required — Whether there are more items available
            - `endCursor` string, nullable, required — Cursor to fetch next page (null if no more items)
        - `starrers` object — Users who starred this repository (when includeAttributes.starrers is specified)
          - `edges` PublicUser[], required — Array of user objects
            - `id` string, required — BountyLab internal ID
            - `githubId` string, required — GitHub node ID
            - `login` string, required — GitHub username
            - `displayName` string, nullable — User display name
            - `bio` string, nullable — User biography
            - `company` string, nullable — Company name
            - `location` string, nullable — User location
            - `websiteUrl` string, nullable — User website URL
            - `socialAccounts` object[], nullable — Social media accounts
              - …
            - `emails` string[], nullable — Obfuscated email addresses showing only the last 2 characters of the local part and full domain (e.g., "***oe@gmail.com"). Use /api/users/best-email endpoint for unobfuscated email access with intelligent selection.
            - `resolvedCountry` string, nullable — Resolved country from location
            - `resolvedState` string, nullable — Resolved state/region from location
            - `resolvedCity` string, nullable — Resolved city from location
            - `createdAt` string, nullable — ISO 8601 timestamp when user account was created
            - `updatedAt` string, nullable — ISO 8601 timestamp when user was last updated
            - `embeddedAt` string, nullable — ISO 8601 timestamp when metadata was extracted
            - `score` number — Relevance score from search (0-1, lower is more relevant for distance metrics)
          - `pageInfo` PageInfo, required — Pagination information
            - `hasNextPage` boolean, required — Whether there are more items available
            - `endCursor` string, nullable, required — Cursor to fetch next page (null if no more items)
        - `ownerDevrank` object — Devrank data for the repository owner (when includeAttributes.ownerDevrank = true)
          - `crackedScore` number, required
          - `tier` string, required
          - `rawScore` number, required
          - `trust` number, required
          - `pc` number, required
          - `followersIn` number, required
          - `followingOut` number, required
          - `community` integer, required
          - `createdAt` string, required
          - `updatedAt` string, required
      - `pageInfo` PageInfo, required — Pagination information
        - `hasNextPage` boolean, required — Whether there are more items available
        - `endCursor` string, nullable, required — Cursor to fetch next page (null if no more items)
  - `count` number, required — Number of users returned
  - `pageInfo` object — Pagination info (only present if enablePagination: true was set in request)
    - `hasNextPage` boolean, required — Whether there are more items available
    - `endCursor` string, nullable, required — Cursor to fetch next page (null if no more items)

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

## Changes

- **2026-01-23** `4664c27f7e3a` — 8 info
  - the response property `code` became required for the status `400`
  - the response property `code` became required for the status `401`
  - the response property `code` became required for the status `403`
  - the response property `code` became required for the status `500`
  - …4 more
- …earlier changes not shown

[Full history](https://skmtc.dev/bountylaboratories/apis/bounty-lab-public-api/changes/api/search/users/post.md)

---

[API](https://skmtc.dev/bountylaboratories/apis/bounty-lab-public-api.md) · [All operations](https://skmtc.dev/bountylaboratories/apis/bounty-lab-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bountylaboratories/apis/bounty-lab-public-api/revisions/4664c27f7e3a?raw)
