Ashby User API

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

Documentation

📖
Documentation
https://developers.ashbyhq.com/reference/applicationlist
📖
Documentation
https://developers.ashbyhq.com/reference/candidatelist
📖
Documentation
https://developers.ashbyhq.com/reference/joblist
📖
Documentation
https://developers.ashbyhq.com/reference/jobpostinglist
📖
Documentation
https://developers.ashbyhq.com/reference/interviewschedulelist
📖
Documentation
https://developers.ashbyhq.com/reference/offerlist
📖
Documentation
https://developers.ashbyhq.com/reference/approvaldefinitionupdate
📖
Documentation
https://developers.ashbyhq.com/reference/surveyrequestlist
📖
Documentation
https://developers.ashbyhq.com/reference/assessmentstart
📖
Documentation
https://developers.ashbyhq.com/docs/creating-an-assessments-integration
📖
Documentation
https://developers.ashbyhq.com/reference/customfieldcreate
📖
Documentation
https://developers.ashbyhq.com/reference/userlist
📖
Documentation
https://developers.ashbyhq.com/reference/fileinfo
📖
Documentation
https://developers.ashbyhq.com/reference/reportgenerate
📖
Documentation
https://developers.ashbyhq.com/docs/setting-up-webhooks
📖
Documentation
https://developers.ashbyhq.com/docs/authenticating-webhooks
📖
Documentation
https://developers.ashbyhq.com/docs/common-webhook-payload-data
📖
Documentation
https://developers.ashbyhq.com/docs/related-webhooks
📖
Documentation
https://developers.ashbyhq.com/docs/webhook-retries
📖
Documentation
https://developers.ashbyhq.com/reference/apikeyinfo

Specifications

Schemas & Data

Other Resources

OpenAPI Specification

ashby-hq-user-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  version: 1.0.0
  title: Ashby API Key User API
  description: Complete public API for accessing resources in your Ashby instance. Includes applications, candidates, jobs, interviews, offers, surveys, custom fields, organization metadata, files, reports, approvals, and webhooks.
  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'
  /user.setCustomFieldValue:
    post:
      summary: user.setCustomFieldValue
      operationId: userSetCustomFieldValue
      description: 'Set the value of a custom field on an employee.


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


        The values accepted in the `fieldValue` param depend on the type of field being updated. See the

        [`customField.setValue`](#operation/customFieldSetValue) docs for accepted types.


        **Note:** When updating multiple custom fields on the same employee, use

        [`user.setCustomFieldValues`](#operation/userSetCustomFieldValues) instead to avoid race conditions.

        '
      tags:
      - User
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - userId
              - fieldId
              - fieldValue
              properties:
                userId:
                  allOf:
                  - description: The id of the employee to set the custom field value for.
                  - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
                fieldId:
                  allOf:
                  - description: The unique id of the Custom Field definition for the field.
                  - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
                fieldValue:
                  description: The value to store in the field. Type depends on the custom field type (boolean, string, number, object, etc.)
                  oneOf:
                  - type: boolean
                    title: Boolean
                    description: A boolean value
                  - type: string
                    title: Date
                    format: date-time
                    description: An ISO Date string
                  - type: string
                    title: String, Email, LongText, Phone
                    description: A string
                  - type: string
                    title: Url
                    format: uri
                    description: A valid http or https URL (e.g., https://example.com)
                  - type: array
                    title: MultiValueSelect
                    items:
                      type: string
                      description: An array of strings that exist in the MultiValueSelect field's options
                  - type: number
                    title: Number
                    description: A number
                  - type: object
                    title: Currency
                    required:
                    - value
                    - currencyCode
                    properties:
                      value:
                        type: number
                        example: 100000
                      currencyCode:
                        type: string
                        example: USD
                    description: An object describing a currency amount
                  - type: string
                    title: ValueSelect
                    description: A string that matches the value of one of the ValueSelect field's options
                  - type: object
                    title: NumberRange
                    required:
                    - type
                    - minValue
                    - maxValue
                    properties:
                      type:
                        type: string
                        example: number-range
                      minValue:
                        type: number
                        example: 10000
                      maxValue:
                        type: number
                        example: 100000
                    description: An object describing the number range
                  - type: string
                    title: UUID
                    format: uuid
                    description: A valid UUID string (e.g., for Employee fields)
                  - type: object
                    title: CompensationRange
                    required:
                    - type
                    - minValue
                    - maxValue
                    - currencyCode
                    - interval
                    properties:
                      type:
                        type: string
                        example: compensation-range
                      minValue:
                        type: number
                        example: 10000
                      maxValue:
                        type: number
                        example: 100000
                      currencyCode:
                        type: string
                        example: USD
                      interval:
                        type: string
                        enum:
                        - NONE
                        - 1 TIME
                        - 1 HOUR
                        - 1 DAY
                        - 1 WEEK
                        - 2 WEEK
                        - 1 MONTH
                        - 2 MONTH
                        - 1 YEAR
                        - 6 MONTH
                        - 0.5 MONTH
                        - 3 MONTH
                        example: 1 YEAR
                    description: An object describing the compensation range
      responses:
        '200':
          description: Responses for the user.setCustomFieldValue 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/~1customField.setValue/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results'
                    required:
                    - results
                - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema'
  /user.setCustomFieldValues:
    post:
      summary: user.setCustomFieldValues
      operationId: userSetCustomFieldValues
      description: 'Set the values of multiple custom fields on an employee in a single call.

        This is the recommended approach when updating multiple fields on the same employee

        to avoid race conditions that can occur with concurrent `user.setCustomFieldValue` calls.


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


        The values accepted in the `fieldValue` param depend on the type of field being updated. See the

        [`customField.setValue`](#operation/customFieldSetValue) docs for accepted types.

        '
      tags:
      - User
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - userId
              - values
              properties:
                userId:
                  allOf:
                  - description: The id of the employee to set custom field values for.
                  - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
                values:
                  type: array
                  description: Array of custom field updates to apply
                  minItems: 1
                  items:
                    type: object
                    required:
                    - fieldId
                    - fieldValue
                    properties:
                      fieldId:
                        allOf:
                        - description: The unique id of the Custom Field definition for the field.
                        - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId'
                      fieldValue:
                        description: The value to store in the field. Type depends on the custom field type (boolean, string, number, object, etc.)
                        oneOf:
                        - type: boolean
                          title: Boolean
                          description: A boolean value
                        - type: string
                          title: Date
                          format: date-time
                          description: An ISO Date string
                        - type: string
                          title: String, Email, LongText, Phone
                          description: A string
                        - type: string
                          title: Url
                          format: uri
                          description: A valid http or https URL (e.g., https://example.com)
                        - type: array
                          title: MultiValueSelect
                          items:
                            type: string
                            description: An array of strings that exist in the MultiValueSelect field's options
                        - type: number
                          title: Number
                          description: A number
                        - type: object
                          title: Currency
                          required:
                          - value
                          - currencyCode
                          properties:
                            value:
                              type: number
                              example: 100000
                            currencyCode:
                              type: string
                              example: USD
                          description: An object describing a currency amount
                        - type: string
                          title: ValueSelect
                          description: A string that matches the value of one of the ValueSelect field's options
                        - type: object
                          title: NumberRange
                          required:
                          - type
                          - minValue
                          - maxValue
                          properties:
                            type:
                              type: string
                              example: number-range
                            minValue:
                              type: number
                              example: 10000
                            maxValue:
                              type: number
                              example: 100000
                          description: An object describing the number range
                        - type: string
                          title: UUID
                          format: uuid
                          description: A valid UUID string (e.g., for Employee fields)
                        - type: object
                          title: CompensationRange
                          required:
                          - type
                          - minValue
                          - maxValue
                          - currencyCode
                          - interval
                          properties:
                            type:
                              type: string
                              example: compensation-range
                            minValue:
                              type: number
                              example: 10000
                            maxValue:
                              type: number
                              example: 100000
                            currencyCode:
                              type: string
                              example: USD
                            interval:
                              type: string
                              enum:
                              - NONE
                              - 1 TIME
                              - 1 HOUR
                              - 1 DAY
                              - 1 WEEK
                              - 2 WEEK
                              - 1 MONTH
                              - 2 MONTH
                              - 1 YEAR
                              - 6 MONTH
                              

# --- truncated at 32 KB (33 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/ashby-hq/refs/heads/main/openapi/ashby-hq-user-api-openapi.yml