Ashby User API

The User API from Ashby — 8 operation(s) for user.

Operations 8

POST /user.info user.info #
POST /user.list user.list #
POST /user.search user.search #
POST /user.interviewerSettings user.interviewerSettings #
POST /user.updateInterviewerSettings user.updateInterviewerSettings #
POST /user.createInterviewerPause user.createInterviewerPause #
POST /user.listInterviewerPauses user.listInterviewerPauses #
POST /user.deleteInterviewerPause user.deleteInterviewerPause #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/ashby-user-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

ashby-user-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: 1.0.0
  title: Ashby User API
  description: The public API for accessing resources in your Ashby instance.
  contact:
    name: Ashby Support
    url: https://app.ashbyhq.com/support
    email: support@ashbyhq.com
servers:
- url: https://api.ashbyhq.com
security:
- BasicAuth: []
tags:
- name: User
paths:
  /user.info:
    post:
      summary: user.info
      description: 'Get an Ashby user by id


        **Requires the [`organizationRead`](authentication#permissions-userinfo) permission.**

        '
      operationId: userInfo
      tags:
      - User
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                userId:
                  allOf:
                  - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
                  - description: The id to lookup the user
              required:
              - userId
      responses:
        '200':
          description: Responses for the user.info endpoint
          content:
            application/json:
              schema:
                oneOf:
                - title: Success response
                  allOf:
                  - $ref: '#/paths/~1job.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/0'
                  - type: object
                    properties:
                      results:
                        type: object
                        properties:
                          id:
                            $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
                          firstName:
                            type: string
                            example: Test
                          lastName:
                            type: string
                            example: User
                          email:
                            $ref: '#/paths/~1candidate.create/post/requestBody/content/application~1json/schema/properties/email/allOf/0'
                          globalRole:
                            type: string
                            enum:
                            - Organization Admin
                            - Elevated Access
                            - Limited Access
                            - External Recruiter
                          isEnabled:
                            type: boolean
                          updatedAt:
                            $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt'
                          managerId:
                            description: The user id of the user's manager
                            $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
                          customFields:
                            type: array
                            description: Custom field values associated with the user. **Note:** This field requires a feature to be enabled for your organization. If it is not present in the response, please contact Ashby support to have it enabled.
                            items:
                              $ref: '#/paths/~1customField.setValue/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results'
                        required:
                        - id
                        - firstName
                        - lastName
                        - globalRole
                        - isEnabled
                        - updatedAt
                    required:
                    - results
                - title: Error response
                  $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema'
  /user.list:
    post:
      summary: user.list
      description: 'Get a list of all Ashby users.


        See the [Pagination and Incremental Synchronization](/docs/pagination-and-incremental-sync) guide for detailed usage examples.


        **Requires the [`organizationRead`](authentication#permissions-userlist) permission.**


        The `globalRole` property in the response specifies the user''s access level in Ashby.

        For more details on the permissions granted with each role, see our [documentation here](https://docs.ashbyhq.com/user-permissions).

        '
      operationId: userList
      tags:
      - User
      requestBody:
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/paths/~1surveyFormDefinition.list/post/requestBody/content/application~1json/schema'
              - type: object
                properties:
                  includeDeactivated:
                    type: boolean
                    default: false
                    description: "If set to true, deactivated users are included in the response. \nBy default, deactivated users are not included.\n"
      responses:
        '200':
          description: Responses for the user.list endpoint
          content:
            application/json:
              schema:
                oneOf:
                - title: Success response
                  allOf:
                  - $ref: '#/paths/~1job.list/post/responses/200/content/application~1json/schema/oneOf/0/allOf/0'
                  - type: object
                    properties:
                      results:
                        type: array
                        items:
                          $ref: '#/paths/~1user.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results'
                    required:
                    - results
                - title: Error response
                  $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema'
  /user.search:
    post:
      summary: user.search
      description: 'Search for an Ashby user by email address


        **Requires the [`organizationRead`](authentication#permissions-usersearch) permission.**

        '
      operationId: userSearch
      tags:
      - User
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: The email to use to search for the user
                  example: test@ashbyhq.com
              required:
              - email
      responses:
        '200':
          description: Responses for the user.search endpoint
          content:
            application/json:
              schema:
                oneOf:
                - title: Success response
                  allOf:
                  - $ref: '#/paths/~1job.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/0'
                  - type: object
                    properties:
                      results:
                        type: array
                        items:
                          $ref: '#/paths/~1user.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results'
                    required:
                    - results
                - title: Error response
                  $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema'
  /user.interviewerSettings:
    post:
      summary: user.interviewerSettings
      description: 'Get interviewer settings for a user.


        **Requires the [`organizationRead`](authentication#permissions-userinfo) permission.**

        '
      operationId: userInterviewerSettings
      tags:
      - User
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                userId:
                  allOf:
                  - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
                  - description: The id of the user to get interviewer settings for
              required:
              - userId
      responses:
        '200':
          description: Responses for the user.interviewerSettings endpoint
          content:
            application/json:
              schema:
                oneOf:
                - title: Success response
                  allOf:
                  - $ref: '#/paths/~1job.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/0'
                  - type: object
                    properties:
                      results:
                        type: object
                        properties:
                          id:
                            $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
                          dailyLimit:
                            type:
                            - integer
                            - 'null'
                            description: Maximum number of interviews per day for this interviewer
                          weeklyLimit:
                            type:
                            - integer
                            - 'null'
                            description: Maximum number of interviews per week for this interviewer
                        required:
                        - id
                    required:
                    - results
                - title: Error response
                  $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema'
  /user.updateInterviewerSettings:
    post:
      summary: user.updateInterviewerSettings
      description: "Update interviewer settings for a user. \n\nEither limit can be provided, or both can be provided. If only one is provided, the other will remain unchanged. If a limit is provided but set to null, it will be unset.\n\n**Requires the [`organizationWrite`](authentication#permissions-userinfo) permission.**\n"
      operationId: userUpdateInterviewerSettings
      tags:
      - User
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                userId:
                  allOf:
                  - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
                  - description: The id of the user to update interviewer settings for
                dailyLimit:
                  type:
                  - integer
                  - 'null'
                  description: Maximum number of interviews per day for this interviewer
                weeklyLimit:
                  type:
                  - integer
                  - 'null'
                  description: Maximum number of interviews per week for this interviewer
              required:
              - userId
      responses:
        '200':
          description: Responses for the user.updateInterviewerSettings endpoint
          content:
            application/json:
              schema:
                oneOf:
                - title: Success response
                  allOf:
                  - $ref: '#/paths/~1job.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/0'
                  - type: object
                    properties:
                      results:
                        $ref: '#/paths/~1user.interviewerSettings/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results'
                    required:
                    - results
                - title: Error response
                  $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema'
  /user.createInterviewerPause:
    post:
      summary: user.createInterviewerPause
      description: 'Creates an interviewer pause for a user. While paused, the user will not be scheduled for interviews.


        A user can only have one interviewer pause at a time (whether active or scheduled). Attempting to create a pause when one already exists will return an error.


        **Requires the [`organizationWrite`](authentication#permissions-usercreateinterviewerpause) permission.**

        '
      operationId: userCreateInterviewerPause
      tags:
      - User
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                userId:
                  allOf:
                  - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
                  - description: The id of the user to pause.
                startsAt:
                  type: string
                  format: date-time
                  description: The start date and time of the pause. Defaults to the current time if not provided.
                  example: '2024-01-15T00:00:00.000Z'
                endsAt:
                  type: string
                  format: date-time
                  description: The end date and time of the pause. If not provided, the pause is indefinite.
                  example: '2024-02-15T00:00:00.000Z'
                comment:
                  type: string
                  description: An optional comment describing the reason for the pause.
                  example: On vacation
              required:
              - userId
      responses:
        '200':
          description: Responses for the user.createInterviewerPause endpoint
          content:
            application/json:
              schema:
                oneOf:
                - title: Success response
                  allOf:
                  - $ref: '#/paths/~1job.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/0'
                  - type: object
                    properties:
                      results:
                        type: object
                        description: Represents an interviewer pause period during which the user will not be scheduled for interviews.
                        properties:
                          id:
                            allOf:
                            - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
                            - description: The unique id of the interviewer pause.
                          userId:
                            allOf:
                            - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
                            - description: The id of the user who is paused.
                          startsAt:
                            type: string
                            format: date-time
                            description: The start date and time of the pause period.
                            example: '2024-01-15T00:00:00.000Z'
                          endsAt:
                            type:
                            - string
                            - 'null'
                            format: date-time
                            description: The end date and time of the pause period. If null, the pause is indefinite.
                            example: '2024-02-15T00:00:00.000Z'
                          comment:
                            type:
                            - string
                            - 'null'
                            description: An optional comment describing the reason for the pause.
                            example: On vacation
                          createdAt:
                            type: string
                            format: date-time
                            description: The date and time when the pause was created.
                            example: '2024-01-14T10:30:00.000Z'
                        required:
                        - id
                        - userId
                        - startsAt
                        - createdAt
                    required:
                    - results
                - title: Error response
                  $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema'
  /user.listInterviewerPauses:
    post:
      summary: user.listInterviewerPauses
      description: 'Lists all active or scheduled interviewer pauses for a user.


        **Requires the [`organizationRead`](authentication#permissions-userlistinterviewerpauses) permission.**

        '
      operationId: userListInterviewerPauses
      tags:
      - User
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                userId:
                  allOf:
                  - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
                  - description: The id of the user to list pauses for.
              required:
              - userId
      responses:
        '200':
          description: Responses for the user.listInterviewerPauses endpoint
          content:
            application/json:
              schema:
                oneOf:
                - title: Success response
                  allOf:
                  - $ref: '#/paths/~1job.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/0'
                  - type: object
                    properties:
                      results:
                        type: array
                        items:
                          $ref: '#/paths/~1user.createInterviewerPause/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results'
                    required:
                    - results
                - title: Error response
                  $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema'
  /user.deleteInterviewerPause:
    post:
      summary: user.deleteInterviewerPause
      description: 'Deletes an interviewer pause.


        **Requires the [`organizationWrite`](authentication#permissions-userdeleteinterviewerpause) permission.**

        '
      operationId: userDeleteInterviewerPause
      tags:
      - User
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                interviewerPauseId:
                  allOf:
                  - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
                  - description: The id of the interviewer pause to delete.
              required:
              - interviewerPauseId
      responses:
        '200':
          description: Responses for the user.deleteInterviewerPause endpoint
          content:
            application/json:
              schema:
                oneOf:
                - title: Success response
                  allOf:
                  - $ref: '#/paths/~1job.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/0'
                  - type: object
                    properties:
                      results:
                        type: object
                        properties:
                          id:
                            allOf:
                            - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
                            - description: The id of the interviewer pause that was deleted.
                        required:
                        - id
                    required:
                    - results
                - title: Error response
                  $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema'
components:
  securitySchemes:
    BasicAuth:
      type: http
      scheme: basic
      description: "Use HTTP Basic Auth to authenticate with our API. You must send your API key with every request. \nPut your API key as the basic auth username and leave the password blank.\n"
    WebhookSignature:
      type: apiKey
      in: header
      name: Ashby-Signature
      description: '[Optional] If you provide a secret token when configuring your webhook, this will be used to create a digest of the JSON payload sent with each webhook request.

        The digest will be included in the request under the `Ashby-Signature` http header.


        It will look like this:

        `Ashby-Signature: sha256=f3124911d2956f10aa3a49c43a88bdf13bba846e94f0ae2bd7c034f90239bd04`


        The part before the = indicates the algorithm that was used to compute the hash digest.

        '