openapi: 3.1.0 info: version: 1.0.0 title: Ashby 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: [] components: securitySchemes: BasicAuth: type: http scheme: basic description: HTTP Basic Auth. Send your Ashby API key as the username and leave the password blank. WebhookSignature: type: apiKey in: header name: Ashby-Signature description: HMAC-SHA256 signature of the webhook payload, used to verify webhook authenticity. paths: /apiKey.info: post: summary: apiKey.info description: 'Retrieve information about the API key being used to make the request. **Requires the [`apiKeysRead`](authentication#permissions-apikeyinfo) permission.** ' operationId: apiKeyInfo tags: - API Key requestBody: content: application/json: schema: type: object responses: '200': description: Responses for the apiKey.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: title: type: string description: The name of the API key. example: Custom Job Board API key createdAt: $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt' scopes: type: array description: List of permission scopes that this API key is authorized for. items: type: string example: - jobs:read - candidates:read required: - results - title: Error response $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' security: - BasicAuth: [] /application.addHiringTeamMember: post: summary: application.addHiringTeamMember description: "Adds an Ashby user to the hiring team at the application level. \n\n**Requires the [`candidateWrite`](authentication#permissions-applicationaddhiringteammember) permission.**\n" operationId: applicationaddhiringteammember tags: - Application requestBody: content: application/json: schema: required: - applicationId - teamMemberId - roleId properties: applicationId: allOf: - description: The application to assign the user a role on. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' teamMemberId: allOf: - description: The id of the user to assign the role to. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' roleId: allOf: - description: The id of the hiring team role to assign. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' responses: '200': description: Responses for the application.addHiringTeamMember 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/~1hiringTeam.addMember/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' /application.changeSource: post: summary: application.changeSource operationId: applicationChangeSource description: 'Change the source of an application. **Requires the [`candidatesWrite`](authentication#permissions-applicationchangesource) permission.** ' tags: - Application requestBody: content: application/json: schema: properties: applicationId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the application to update the source of sourceId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The source to set on the application. Pass null to unset an application's source. required: - applicationId - sourceId example: applicationId: 3ae2b801-19f6-41ef-ad28-214bd731948f sourceId: 2c6991c5-c9e2-4af8-879e-29c5a9d26509 responses: '200': description: Responses from the application.changeSource 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: '#/webhooks/pushToHRIS/post/requestBody/content/application~1json/schema/properties/data/properties/application' required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /application.changeStage: post: summary: application.changeStage operationId: applicationChangeStage description: 'Change the stage of an application **Requires the [`candidatesWrite`](authentication#permissions-applicationchangestage) permission.** ' tags: - Application requestBody: content: application/json: schema: properties: applicationId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the application to update the stage of interviewStageId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The interview stage to move the application to. archiveReasonId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: "Archive Reason to set when moving to an Interview Stage with type: `Archived`. \nNote: You must pass this parameter when moving to an Interview Stage with type: `Archived`\n" archiveEmail: type: object properties: communicationTemplateId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: 'The id of the communication template to use for the email. Note: This communication template''s intendedTypes must include: `email`. ' sendAt: type: string format: date-time description: 'The date and time to send the email as an ISO 8601 date and time string, e.g. `2025-02-24T08:27:01Z`. If omitted, the email will be scheduled for the following morning at 9:32am in your default timezone. If the time is in the past, the email will be sent immediately. Note: If a timezone is not specified, timestamps will be interpreted in UTC, regardless of your timezone setting. ' description: 'Email to send to the candidate when moving to an Interview Stage with type: `Archived`. Note: If application is already archived, the email will not be sent. Note: If email send fails, the application stage will not be updated. If this is the case, you can retry the request without this parameter. Note: You may only pass this parameter if the application is moving to an Interview Stage with type: `Archived`. ' required: - communicationTemplateId required: - applicationId - interviewStageId example: applicationId: 3ae2b801-19f6-41ef-ad28-214bd731948f interviewStageId: 2c6991c5-c9e2-4af8-879e-29c5a9d26509 responses: '200': description: Responses from the application.changeStage 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: '#/webhooks/pushToHRIS/post/requestBody/content/application~1json/schema/properties/data/properties/application' required: - results - allOf: - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' - type: object properties: errors: type: array items: type: string enum: - invalid_input - application_not_found - interview_plan_not_found - interview_stage_not_found - archive_reason_not_found - communication_template_not_found - communication_template_not_allowed description: '| Error Code | Description | |------------|-------------| | `invalid_input` | A parameter is the wrong type | | `invalid_input` | Archive fields are not allowed for non-archive stages | | `invalid_input` | Archive reason ID is required for archive stages | | `application_not_found` | | | `interview_plan_not_found` | | | `interview_stage_not_found` | | | `archive_reason_not_found` | | | `communication_template_not_found` | | | `communication_template_not_allowed` | Template contains unresolvable substitution tokens | | `communication_template_not_allowed` | Template intended types does not include ''email'' | | `communication_template_not_allowed` | [Less common] Template is archived | | `communication_template_not_allowed` | [Less common] Template is a one-off template | ' /application.create: post: summary: application.create operationId: applicationCreate description: 'Consider a candidate for a job (eg when sourcing a candidate for a job posting). If you''re submitting an application as a job board, use the [`applicationForm.submit`](https://developers.ashbyhq.com/reference/applicationformsubmit) endpoint instead. See [Creating a custom careers page](https://developers.ashbyhq.com/docs/creating-a-custom-careers-page) for details. **Requires the [`candidatesWrite`](authentication#permissions-applicationcreate) permission.** To set values for custom fields on Applications, use the [`customFields.setValue`](https://developers.ashbyhq.com/reference/customfieldsetvalue) endpoint. ' tags: - Application requestBody: content: application/json: schema: properties: candidateId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the candidate to consider for a job jobId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the job to consider the candidate for interviewPlanId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: 'The id of the interview plan to place the application in. If none is provided, the default interview plan is used. ' interviewStageId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: "The interview stage of the interview plan (either default or provided) to place the application in. \nIf none is provided, the application is placed in the first \"Lead\" stage. \nYou can also supply the special string \"FirstPreInterviewScreen\", which will choose the first pre-interview-screen stage on the specified job's interview plan.\n" sourceId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The source to set on the application being created. creditedToUserId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the user the application will be credited to. createdAt: allOf: - description: 'An ISO date string to set the application''s `createdAt` timestamp. When this value isn''t provided, the `createdAt` timestamp defaults to the time the call was made. ' - $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt' applicationHistory: allOf: - type: array description: An array of objects representing the application history. items: type: object properties: stageId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The ID of the interview stage for this history event. This stage must belong to the interview plan associated with the application. stageNumber: allOf: - type: integer - description: The sort order of this event. 0 is the first, the highest number will be the current stage. enteredStageAt: allOf: - $ref: '#/paths/~1candidate.addEmailMessage/post/requestBody/content/application~1json/schema/properties/sentAt/allOf/0' - description: An ISO date string representing the time the application entered this stage. archiveReasonId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The ID of the archive reason. If the interview stage is an `Archived` stage type, this field is required. required: - stageId - stageNumber - enteredStageAt - description: 'An array of objects representing the application history. ' required: - candidateId - jobId example: candidateId: 3ae2b801-19f6-41ef-ad28-214bd731948f jobId: 2c6991c5-c9e2-4af8-879e-29c5a9d26509 responses: '200': description: Responses from the application.create 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: '#/webhooks/pushToHRIS/post/requestBody/content/application~1json/schema/properties/data/properties/application' required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /applicationForm.submit: post: summary: applicationForm.submit description: 'Submit an application for a job posting. **Requires the [`candidatesWrite`](authentication#permissions-applicationformsubmit) permission.** The Content-Type of this request must be `multipart/form-data` or `application/json`. When using `application/json`, file fields should contain a handle string obtained from [`file.createFileUploadHandle`](https://developers.ashbyhq.com/reference/filecreatefileuploadhandle) with `fileUploadContext` set to `ApplicationForm`. This allows files to be uploaded directly to storage, bypassing the need to send file bytes through the API. When using `multipart/form-data`, file fields should reference a file part included in the multipart request body (existing behavior). **Important:** Please ensure that you check the response''s `success` field and display any validation errors to candidates if it is `false`. Not doing so will result in applications not being recorded, without any notification to the candidate prompting them to resubmit. For testing purposes, you can simulate a validation failure by submitting the email address `testing-fail-validation@example.com`. **Note: The requests generated from this documentation will not work for this endpoint.** The values accepted for each field depend on the type of field that''s being filled out: - `Boolean` - A boolean value - `Date` - A date string in the format YYYY-MM-DD - `Email` - A valid email address - `Number` - An integer - `RichText` - We do not support submitting rich text documents via the API but we do support submitting plain text values for these fields. Plain text values must be submitted in the format `{ type: "PlainText", value: "A plain text string" }` - `Score` - An integer between 1 and 4 submitted in the format `{ score: 4 }` - `Phone`, `String` A string - `ValueSelect` - A string that matches the value of one of the ValueSelect field''s selectable options - `MultiValueSelect` - An array of strings that exist in the MultiValueSelect field''s selectable options - `Location` - An object with the following properties: `{ country: "USA", city: "San Francisco", region: "California" }`. You may provide any combination of these properties and we will attempt to geocode the location. For best results, provide all three properties. - `EducationHistory` - [Early Access] An array of objects with the following properties: `{ schoolName: "University of California, Berkeley", degree: "Bachelor of Science", major: "Computer Science", startDate: "2020-09-01", endDate: "2024-05-15", isCurrent: true }`. Only `schoolName` is required. We will attempt to match the school name to a known school in our database. If `isCurrent` is true, `endDate` must not be provided. ' operationId: applicationformsubmit tags: - Application Form requestBody: content: application/json: schema: type: object required: - jobPostingId - applicationForm properties: jobPostingId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the job posting to submit an application for applicationForm: $ref: '#/paths/~1offer.create/post/requestBody/content/application~1json/schema/properties/offerForm' utmData: type: object properties: utm_source: type: string utm_campaign: type: string utm_medium: type: string utm_term: type: string utm_content: type: string tagIds: type: array description: The ids of the tags to apply to the candidate items: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' allowSubmissionForUnpublishedJobPosting: type: boolean example: true description: Defaults to true. If you are running a custom built careers page that is statically generated, you may want to set this to true to allow applications to be submitted in the time a job is unpublished and your careers page is refreshed. If set to false, applications submitted for unpublished job postings will return a `job_posting_not_published` error. multipart/form-data: schema: type: object required: - jobPostingId - applicationForm properties: jobPostingId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the job posting to submit an application for applicationForm: $ref: '#/paths/~1offer.create/post/requestBody/content/application~1json/schema/properties/offerForm' utmData: type: object properties: utm_source: type: string utm_campaign: type: string utm_medium: type: string utm_term: type: string utm_content: type: string tagIds: type: array description: The ids of the tags to apply to the candidate items: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' allowSubmissionForUnpublishedJobPosting: type: boolean example: true description: Defaults to true. If you are running a custom built careers page that is statically generated, you may want to set this to true to allow applications to be submitted in the time a job is unpublished and your careers page is refreshed. If set to false, applications submitted for unpublished job postings will return a `job_posting_not_published` error. : type: string description: Any file referenced in the `applicationForm`. The name of this field must exactly match the `value` on the `fieldSubmission` that references this file. format: binary responses: '200': description: Responses from the applicationFeedback.submit 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: submittedFormInstance: type: object properties: id: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' formDefinition: $ref: '#/paths/~1offer.start/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/properties/formDefinition' submittedValues: type: object example: _systemfield_name: Gob Bluth required: - id - formDefinition - submittedValues formMessages: allOf: - type: object description: Messages related to the application form submission. Check if the application was blocked before submitting any surveys. properties: blocked: type: boolean description: Whether the application was blocked due to configured application limits (eg too many applications submitted for a single candidate). If true, do not attempt to submit any surveys, if any. example: true blockMessageForCandidateHtml: type: string description: A message to display to the candidates regarding the application limits. If there is no message, then the candidate should not be informed that they were blocked. example: '

Please Note: we have set up limits for applications for this role. Candidates may not apply more than 2 times in any 60 day span for any job in the Application Limit Group.

' required: - blocked - description: "Contains information about the form submission. When `blocked` is true, \nthe application was blocked by organizational rules and no Application \nrecord was created. Do not attempt to call `application.info` with the \n`submittedFormInstanceId` as it will return an `application_blocked` error. \nThe submission is saved as a blocked submission and can be reviewed by \nadministrators.\n" required: - submittedFormInstance - formMessages required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /applicationHiringTeamRole.list: post: summary: applicationHiringTeamRole.list operationId: applicationHiringTeamRoleList description: 'Gets all available hiring team roles for applications in the organization. **Requires the [`candidatesRead`](authentication#permissions-applicationHiringTeamRoleList) permission.** ' tags: - Application Hiring Team Role responses: '200': description: Responses from the applicationHiringTeamRole.list endpoint content: application/json: schema: oneOf: - allOf: - properties: results: type: array items: allOf: - type: object properties: id: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' title: type: string required: - id - title required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /application.info: post: summary: application.info operationId: applicationInfo description: 'Fetch application details by application id or by submitted form instance id (which is return by the `applicationForm.submit` endpoint). If both applicationId and submittedFormInstanceId are provided, we will lookup by applicationId. **Requires the [`candidatesRead`](authentication#permissions-applicationinfo) permission.** ' tags: - Application requestBody: content: application/json: schema: oneOf: - type: object properties: applicationId: allOf: - description: The id of the application to fetch. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' expand: type: array description: "Choose to expand the result and include additional data for related objects. \n" items: type: string enum: - openings - applicationFormSubmissions - referrals required: - applicationId - type: object properties: submittedFormInstanceId: allOf: - description: The id of the application's submitted form instance to fetch. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' expand: type: array description: "Choose to expand the result and include additional data for related objects. \n" items: type: string enum: - openings - applicationFormSubmissions required: - submittedFormInstanceId responses: '200': description: Responses from the application.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: allOf: - $ref: '#/webhooks/pushToHRIS/post/requestBody/content/application~1json/schema/properties/data/properties/application' - type: object properties: openings: description: The openings array will only be included if the `openings` expand parameter is included when the request is made. type: array items: $ref: '#/webhooks/openingCreate/post/requestBody/content/application~1json/schema/properties/data/properties/opening' - type: object properties: applicationHistory: type: array items: $ref: '#/paths/~1application.listHistory/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/items' applicationFormSubmissions: type: array description: Application form submissions. These match the response from the `applicationForm.submit` endpoint. Use of the expand parameter is required to fetch. items: $ref: '#/paths/~1applicationForm.submit/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/properties/submittedFormInstance' referrals: type: array items: type: object properties: user: $ref: '#/paths/~1user.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results' referredAt: $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt' resumeFileHandle: description: The id, name and handle for the application's resume $ref: '#/paths/~1candidate.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/properties/fileHandles/items' required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /application.list: post: summary: application.list operationId: applicationList description: 'Gets all applications in the organization. See the [Pagination and Incremental Synchronization](/docs/pagination-and-incremental-sync) guide for detailed usage examples. **Requires the [`candidatesRead`](authentication#permissions-applicationlist) permission.** ' tags: - Application requestBody: content: application/json: schema: allOf: - $ref: '#/paths/~1opening.list/post/requestBody/content/application~1json/schema' - properties: status: type: string enum: - Hired - Archived - Active - Lead jobId: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' expand: type: array description: "Choose to expand the result and include additional data for related objects. \n" items: type: string enum: - openings responses: '200': description: Responses from the application.list endpoint content: application/json: schema: oneOf: - allOf: - $ref: '#/paths/~1job.list/post/responses/200/content/application~1json/schema/oneOf/0/allOf/0' - properties: results: type: array items: allOf: - $ref: '#/webhooks/pushToHRIS/post/requestBody/content/application~1json/schema/properties/data/properties/application' - $ref: '#/paths/~1application.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/allOf/1' required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /application.listCriteriaEvaluations: post: summary: application.listCriteriaEvaluations operationId: applicationListCriteriaEvaluations description: 'Fetch a paginated list of AI criteria evaluations for an application. This endpoint returns the AI-generated criteria evaluations that assess how well a candidate meets specific job requirements. Each evaluation contains the outcome, reasoning, and other assessment details. This endpoint supports pagination only (not incremental sync). See the [Pagination and Incremental Synchronization](/docs/pagination-and-incremental-sync) guide for usage examples. **Requires the [`candidatesRead`](authentication#permissions-applicationListCriteriaEvaluations) permission.** **Note:** This endpoint requires the AI Application Review feature to be enabled for your organization. ' tags: - Application requestBody: content: application/json: schema: allOf: - type: object properties: applicationId: allOf: - description: The id of the application to fetch criteria evaluations for. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - $ref: '#/paths/~1brand.list/post/requestBody/content/application~1json/schema' required: - applicationId responses: '200': description: Responses for the application.listCriteriaEvaluations endpoint content: application/json: schema: oneOf: - allOf: - $ref: '#/paths/~1brand.list/post/responses/200/content/application~1json/schema/oneOf/0/allOf/0' - properties: results: type: array items: type: object title: Criteria Evaluation description: An AI-generated evaluation of how well a candidate meets a specific job criterion. properties: id: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the criteria evaluation. criterion: allOf: - type: object title: Criterion Version description: The criterion that was evaluated, including its configuration and prompt details. properties: id: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the criterion version. title: type: string description: The title of the criterion. example: Location type: type: string description: The type of criterion evaluation. enum: - ResumePrompt - DidAnswerApplicationFormQuestion - SimilarityToAiGeneratedAnswer example: ResumePrompt prompt: type: string description: The prompt text used for AI evaluation. example: Evaluate if the candidate's location aligns with the job requirements. applicationFormDefinitionId: anyOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - type: 'null' description: The id of the application form definition (if applicable). applicationFormFieldPath: type: - string - 'null' description: The path to the specific application form field (if applicable). required: - id - title - type - prompt - description: The criterion that was evaluated. status: type: string description: The status of the evaluation. enum: - Pending - Completed - Failed - Skipped example: Completed outcome: type: - string - 'null' description: The evaluation outcome (e.g., "Meets", "Does Not Meet"). example: Meets reasoning: type: - string - 'null' description: The AI's reasoning for the evaluation outcome. example: The candidate's location in San Francisco aligns well with the job's requirement for Bay Area presence. skipReason: type: - string - 'null' description: The reason why the evaluation was skipped (if status is "Skipped"). example: NoResume outcomeNumber: type: - number - 'null' description: A numerical score representing the evaluation outcome (0.0 to 1.0). minimum: 0 maximum: 1 example: 0.85 evaluatedAt: type: - string - 'null' format: date-time description: The date and time when the evaluation was completed. example: '2024-01-15T10:30:00Z' required: - id - criterion - status required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /application.listHistory: post: summary: application.listHistory operationId: applicationListHistory description: 'Fetch a paginated list of application history items for an application. This endpoint supports pagination only (not incremental sync). See the [Pagination and Incremental Synchronization](/docs/pagination-and-incremental-sync) guide for usage examples. **Requires the [`candidatesRead`](authentication#permissions-applicationListHistory) permission.** ' tags: - Application requestBody: content: application/json: schema: allOf: - type: object properties: applicationId: allOf: - description: The id of the application to fetch. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - $ref: '#/paths/~1brand.list/post/requestBody/content/application~1json/schema' required: - applicationId responses: '200': description: Responses for the application.listHistory endpoint content: application/json: schema: oneOf: - allOf: - $ref: '#/paths/~1brand.list/post/responses/200/content/application~1json/schema/oneOf/0/allOf/0' - properties: results: type: array items: type: object properties: id: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' stageId: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' title: type: string title: Title example: Offer enteredStageAt: $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt' leftStageAt: $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt' stageNumber: type: integer title: Stage Number description: The order of the history event in the application's history. 0 is the first event. allowedActions: type: array items: type: string enum: - none - delete - set_entered_at title: Allowed Actions description: Actions that can be performed on the application via `application.updateHistory`. example: - delete - set_entered_at actorId: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' title: Actor ID description: The ID of the user that performed the stage change. required: - id - stageId - title - enteredStageAt - allowedActions - stageNumber required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /application.removeHiringTeamMember: post: summary: application.removeHiringTeamMember description: "Removes an Ashby user to the hiring team at the application level. \n\n**Requires the [`candidateWrite`](authentication#permissions-applicationremovehiringteammember) permission.**\n" operationId: applicationremovehiringteammember tags: - Application requestBody: content: application/json: schema: required: - applicationId - teamMemberId - roleId properties: applicationId: allOf: - description: The application to unassign the user a role from. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' teamMemberId: allOf: - description: The id of the user to unassign the role from. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' roleId: allOf: - description: The id of the hiring team role to unassign. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' responses: '200': description: Responses for the application.removeHiringTeamMember 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/~1hiringTeam.addMember/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' /application.transfer: post: summary: application.transfer operationId: applicationTransfer description: 'Transfer an application to a different job. **Requires the [`candidatesWrite`](authentication#permissions-applicationtransfer) permission.** ' tags: - Application requestBody: content: application/json: schema: properties: applicationId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the application to transfer. jobId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the job to transfer the application to. interviewPlanId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: "The id of the interview plan to transfer the application to. \n" interviewStageId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: "The interview stage of the interview plan to transfer the application to. \n" startAutomaticActivities: allOf: - type: boolean - description: "Whether to start any automatic activities set on the target interview stage. \nIf not provided, the default value is `true`.\n" - default: true required: - applicationId - jobId - interviewPlanId - interviewStageId example: applicationId: 3ae2b801-19f6-41ef-ad28-214bd731948f jobId: 2c6991c5-c9e2-4af8-879e-29c5a9d26509 interviewPlanId: af94aedd-b743-462c-ab22-9e7e356c11b4 interviewStageId: 5eb15197-8664-48fd-99cf-fbdc9d25149d responses: '200': description: Responses from the application.transfer 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: '#/webhooks/pushToHRIS/post/requestBody/content/application~1json/schema/properties/data/properties/application' required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /application.update: post: summary: application.update operationId: applicationUpdate description: 'Update an application **Requires the [`candidatesWrite`](authentication#permissions-applicationupdate) permission.** To set values for custom fields on Applications, use the [`customFields.setValue`](https://developers.ashbyhq.com/reference/customfieldsetvalue) endpoint. ' tags: - Application requestBody: content: application/json: schema: properties: applicationId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the application to update sourceId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The source to set on the application being created. creditedToUserId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the user the application will be credited to. createdAt: allOf: - description: 'An ISO date string to set the application''s `createdAt` timestamp. When this value isn''t provided, the `createdAt` timestamp defaults to the time the call was made. ' - $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt' sendNotifications: type: boolean default: true description: Whether or not users who are subscribed to the application should be notified that application was updated. Default is true. required: - applicationId example: applicationId: 3ae2b801-19f6-41ef-ad28-214bd731948f createdAt: '2021-01-01T00:00:00Z' creditedToUserId: 3ae2b801-19f6-41ef-ad28-214bd731948f sourceId: 3ae2b801-19f6-41ef-ad28-214bd731948f responses: '200': description: Responses from the application.update 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: '#/webhooks/pushToHRIS/post/requestBody/content/application~1json/schema/properties/data/properties/application' required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /application.updateHistory: post: summary: application.updateHistory operationId: applicationUpdateHistory description: 'Update the history of an application. This endpoint is used to update the history of an application, such as setting the entered stage time or deleting a history event. **Requires the [`candidatesWrite`](authentication#permissions-applicationupdatehistory) permission and the `Allow updating application history?` setting found in your admin API key permissions configuration.** ' tags: - Application requestBody: content: application/json: schema: oneOf: - type: object properties: applicationId: allOf: - description: The id of the application to fetch. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' applicationHistory: type: array description: The updated array of application history events. This array should contain all history events for the application, not just the events being updated. items: type: object properties: stageId: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' stageNumber: type: integer title: Stage Number description: The order of the history event in the application's history. 0 is the first event. enteredStageAt: description: The time the application entered the stage. $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt' applicationHistoryId: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' title: Application History ID description: The id of the application history event to update if you are updating an existing event. archiveReasonId: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' title: Archive Reason ID description: The id of the archive reason to associate with the history event if the stage type is `archived`. required: - stageId - stageNumber - enteredStageAt required: - applicationId - applicationHistory responses: '200': description: Responses from the application.updateHistory 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: allOf: - $ref: '#/webhooks/pushToHRIS/post/requestBody/content/application~1json/schema/properties/data/properties/application' - $ref: '#/paths/~1application.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/allOf/1' - type: object properties: applicationHistory: type: array items: $ref: '#/paths/~1application.listHistory/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/items' applicationFormSubmissions: type: array description: Application form submissions. These match the response from the `applicationForm.submit` endpoint. Use of the expand parameter is required to fetch. items: $ref: '#/paths/~1applicationForm.submit/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/properties/submittedFormInstance' referrals: type: array items: type: object properties: user: $ref: '#/paths/~1user.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results' referredAt: $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt' required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /hiringTeam.addMember: post: summary: hiringTeam.addMember description: "Adds an Ashby user to the hiring team at the application or job-level. \n\n**Requires the [`organizationWrite`](authentication#permissions-hiringteamaddmember) permission.**\n\nHiring team members can be added to a hiring team at the application, job, or opening level. \n" operationId: hiringteamaddmember tags: - Hiring Team requestBody: content: application/json: schema: oneOf: - type: object title: Application-level required: - applicationId - teamMemberId - roleId properties: applicationId: allOf: - description: The application to assign the user a role on. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' teamMemberId: allOf: - description: The id of the user to assign the role to. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' roleId: allOf: - description: The id of the hiring team role to assign. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - type: object title: Job-level required: - jobId - teamMemberId - roleId properties: jobId: allOf: - description: The job to assign the user a role on. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' teamMemberId: allOf: - description: The id of the user to assign the role to. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' roleId: allOf: - description: The id of the hiring team role to assign. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - type: object title: Opening-level required: - openingId - teamMemberId - roleId properties: openingId: allOf: - description: The opening to assign the user a role on. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' teamMemberId: allOf: - description: The id of the user to assign the role to. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' roleId: allOf: - description: The id of the hiring team role to assign. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' responses: '200': description: Responses for the hiringTeam.addMember 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: email: $ref: '#/paths/~1candidate.create/post/requestBody/content/application~1json/schema/properties/email/allOf/0' firstName: type: string example: Joey lastName: type: string example: Joe role: type: string example: Hiring Manager userId: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' required: - userId - firstName - lastName - email - role required: - results - title: Error response $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /hiringTeam.removeMember: post: summary: hiringTeam.removeMember description: "Removes an Ashby user from the hiring team at the application or job-level. \n\n**Requires the [`organizationWrite`](authentication#permissions-hiringteamremovemember) permission.**\n\nHiring team members can be removed from a hiring team at the application, job, or opening level. \n" operationId: hiringteamremovemember tags: - Hiring Team requestBody: content: application/json: schema: oneOf: - type: object title: Application-level required: - applicationId - teamMemberId - roleId properties: applicationId: allOf: - description: The application to unassign the user a role from. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' teamMemberId: allOf: - description: The id of the user to unassign the role from. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' roleId: allOf: - description: The id of the hiring team role to unassign from. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - type: object title: Job-level required: - jobId - teamMemberId - roleId properties: jobId: allOf: - description: The job to unassign the user a role from. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' teamMemberId: allOf: - description: The id of the user to unassign the role from. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' roleId: allOf: - description: The id of the hiring team role to unassign from. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - type: object title: Opening-level required: - openingId - teamMemberId - roleId properties: openingId: allOf: - description: The opening to unassign the user a role from. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' teamMemberId: allOf: - description: The id of the user to unassign the role from. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' roleId: allOf: - description: The id of the hiring team role to unassign from. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' responses: '200': description: Responses for the hiringTeam.removeMember 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/~1hiringTeam.addMember/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' /applicationFeedback.list: post: summary: applicationFeedback.list operationId: applicationFeedbackList description: "List all interview scorecards and feedback submissions associated with an application.\n\nEach feedback submission contains:\n- **formDefinition**: The structure of the feedback form with all available fields\n- **submittedValues**: Responses to the form fields, which depending on the form configuration can include:\n - Text feedback (e.g., \"Candidate showed strong technical skills...\")\n - Numerical scores (e.g., \"4\" for a 1-4 rating scale)\n - Structured selections (e.g., \"Strong Hire\" for overall recommendation)\n- **Interview context**: Links to associated interviews, events, and the submitting user\n\nSee the [Pagination and Incremental Synchronization](/docs/pagination-and-incremental-sync) guide for detailed usage examples.\n\n**Requires the [`candidatesRead`](authentication#permissions-applicationfeedbacklist) permission.**\n" tags: - Application Feedback requestBody: content: application/json: schema: allOf: - $ref: '#/paths/~1opening.list/post/requestBody/content/application~1json/schema' - type: object properties: applicationId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the application you'd like to fetch feedback for responses: '200': description: Responses from the applicationFeedback.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: allOf: - type: object allOf: - $ref: '#/paths/~1applicationForm.submit/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/properties/submittedFormInstance' - type: object properties: submittedByUser: $ref: '#/paths/~1user.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results' interviewId: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' interviewEventId: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' feedbackFormDefinitionId: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' applicationHistoryId: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' applicationId: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' submittedAt: $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt' required: - submittedByUser - applicationId example: - id: f47ac10b-58cc-4372-a567-0e02b2c3d479 applicationId: 550e8400-e29b-41d4-a716-446655440000 feedbackFormDefinitionId: 6ba7b810-9dad-11d1-80b4-00c04fd430c8 interviewId: 6ba7b811-9dad-11d1-80b4-00c04fd430c8 interviewEventId: 6ba7b812-9dad-11d1-80b4-00c04fd430c8 submittedAt: '2023-11-15T14:30:00.000Z' submittedByUser: id: 123e4567-e89b-12d3-a456-426614174000 firstName: Sarah lastName: Johnson email: sarah.johnson@company.com globalRole: Elevated Access isEnabled: true updatedAt: '2023-11-15T14:30:00.000Z' formDefinition: sections: - title: Technical Assessment fields: - isRequired: true field: id: 550e8400-e29b-41d4-a716-446655440001 type: ValueSelect path: overall_recommendation title: Overall Recommendation humanReadablePath: Overall Recommendation isNullable: false selectableValues: - label: Strong Hire value: strong_hire - label: Hire value: hire - label: No Hire value: no_hire - isRequired: false field: id: 550e8400-e29b-41d4-a716-446655440002 type: Score path: technical_skills title: Technical Skills humanReadablePath: Technical Skills isNullable: false - isRequired: false field: id: 550e8400-e29b-41d4-a716-446655440003 type: RichText path: detailed_feedback title: Detailed Feedback humanReadablePath: Detailed Feedback isNullable: false submittedValues: overall_recommendation: hire technical_skills: '4' detailed_feedback: Candidate demonstrated strong problem-solving skills and wrote clean, efficient code. Good understanding of algorithms and data structures. Communication was clear throughout the interview. required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /applicationFeedbackRequest.create: post: summary: applicationFeedbackRequest.create description: 'Request feedback on an application without scheduling an interview. The `interviewEventId` returned in the response can be provided to `applicationFeedback.submit` to complete the feedback request. The interview used must be configured to request feedback. **Requires the [`candidatesWrite`](authentication#permissions-applicationfeedbackrequestcreate) permission.** ' operationId: applicationfeedbackrequestcreate tags: - Application Feedback Request requestBody: content: application/json: schema: allOf: - type: object required: - applicationId - interviewId - interviewerUserId properties: applicationId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the application you are requesting feedback for interviewId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the interview associated with this feedback request interviewerUserId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The user you are requesting feedback from responses: '200': description: Responses from the applicationFeedbackRequest.create 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 allOf: - type: object description: Represents a request for interview feedback on an application properties: interviewEventId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the interview event created without scheduling interviewerUserId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the user whose feedback was requested applicationId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the application feedback was requested for required: - interviewEventId - interviewerUserId - applicationId example: interviewEventId: f47ac10b-58cc-4372-a567-0e02b2c3d479 interviewerUserId: 6ba7b810-9dad-11d1-80b4-00c04fd430c8 applicationId: 550e8400-e29b-41d4-a716-446655440000 required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /applicationFeedback.submit: post: summary: applicationFeedback.submit description: "Application feedback forms support a variety of field types. \n\n**Requires the [`candidatesWrite`](authentication#permissions-applicationfeedbacksubmit) permission.**\n\nThe values accepted for each field depend on the type of field that's being filled out: |\n- `Boolean` - A boolean value\n- `CompensationRange` - An object in the format `{ type: \"compensation-range\", minValue: 100000, maxValue: 150000, currencyCode: \"USD\", interval: \"1 YEAR\" }`. `currencyCode` must be a valid ISO 4217 code and `interval` must be a valid compensation interval (e.g. `\"1 HOUR\"`, `\"1 YEAR\"`).\n- `Currency` - An object in the format `{ value: 100000, currencyCode: \"USD\" }`. `currencyCode` must be a valid ISO 4217 code.\n- `Date` - A date string in the format YYYY-MM-DD\n\ - `Email` - A valid email address\n- `LongText`, `Phone`, `String` - A string\n- `MultiValueSelect` - An array of strings that exist in the MultiValueSelect field's selectable options\n- `Number` - An integer\n- `NumberRange` - An object in the format `{ type: \"number-range\", minValue: 1, maxValue: 10 }`\n- `RichText` - We do not support submitting rich text documents via the API but we do support submitting plain text values for these fields. Plain text values must be submitted in the format `{ type: \"PlainText\", value: \"A plain text string\" }`\n- `Score` - An integer between 1 and 4 submitted in the format `{ score: 4 }`\n- `Url` - A valid URL string. The empty string is also accepted.\n- `UUID` - A UUID string, or an object in the format `{ value: \"\" }`\n- `ValueSelect` - A string that matches the value of one of the ValueSelect field's selectable options\n\nThe `submittedValues` field in the response contains the submitted feedback in an object where the key is\ \ the path of the field and the value is the value submitted for that field.\n" operationId: applicationfeedbacksubmit tags: - Application Feedback requestBody: content: application/json: schema: oneOf: - type: object required: - feedbackForm - formDefinitionId - applicationId properties: feedbackForm: $ref: '#/paths/~1offer.create/post/requestBody/content/application~1json/schema/properties/offerForm' formDefinitionId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the feedback form definition associated with the form submission applicationId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the application you're submitting feedback for userId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: 'The id of the user the feedback will be credited to. If a userId is not provided, the feedback will be credited to the API key user. ' - type: object required: - feedbackForm - formDefinitionId - applicationId - userId - interviewEventId properties: feedbackForm: $ref: '#/paths/~1offer.create/post/requestBody/content/application~1json/schema/properties/offerForm' formDefinitionId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the feedback form definition associated with the form submission applicationId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the application you're submitting feedback for userId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: "The id of the user the feedback will be credited to. \nThe user must be an interviewer on the interview event that feedback is being submitted for.\n" interviewEventId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: 'The id of the interview event you''re submitting feedback for. ' responses: '200': description: Responses from the applicationFeedback.submit 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: submittedFormInstance: $ref: '#/paths/~1applicationForm.submit/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/properties/submittedFormInstance' required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /feedbackFormDefinition.info: post: summary: feedbackFormDefinition.info operationId: feedbackFormDefinitionInfo description: 'Returns a single feedback form by id **Requires the [`hiringProcessMetadataRead`](authentication#permissions-feedbackformdefinitioninfo) permission.** ' tags: - Feedback Form Definition requestBody: content: application/json: schema: type: object required: - feedbackFormDefinitionId properties: feedbackFormDefinitionId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The unique id of the feedback form you'd like to fetch. - example: 9b17887e-5add-49e8-9a03-ffffa669aa2f responses: '200': description: Responses for the feedbackFormDefinition.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' - properties: results: allOf: - $ref: '#/paths/~1referralForm.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/allOf/0' - type: object properties: organizationId: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' isDefaultForm: type: boolean example: true interviewId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the interview associated with the feedback form. - required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /feedbackFormDefinition.list: post: summary: feedbackFormDefinition.list operationId: feedbackFormDefinitionList description: 'Lists all feedback forms. See the [Pagination and Incremental Synchronization](/docs/pagination-and-incremental-sync) guide for detailed usage examples. **Requires the [`hiringProcessMetadataRead`](authentication#permissions-feedbackformdefinitionlist) permission.** ' tags: - Feedback Form Definition requestBody: content: application/json: schema: $ref: '#/paths/~1department.list/post/requestBody/content/application~1json/schema' responses: '200': description: Responses for the feedbackFormDefinition.list endpoint content: application/json: schema: oneOf: - allOf: - $ref: '#/paths/~1job.list/post/responses/200/content/application~1json/schema/oneOf/0/allOf/0' - properties: results: type: array items: $ref: '#/paths/~1feedbackFormDefinition.info/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' /surveyFormDefinition.info: post: summary: surveyFormDefinition.info operationId: surveyFormDefinitionInfo description: 'Returns details about a single survey form definition by id **Requires the [`hiringProcessMetadataRead`](authentication#permissions-surveyformdefinitioninfo) permission.** ' tags: - Survey Form Definition requestBody: content: application/json: schema: type: object properties: surveyFormDefinitionId: allOf: - description: The id of the survey form to fetch - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' required: - surveyFormDefinitionId responses: '200': description: Responses for the surveyFormDefinition.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: allOf: - $ref: '#/paths/~1referralForm.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/allOf/0' - type: object properties: surveyType: $ref: '#/webhooks/surveySubmit/post/requestBody/content/application~1json/schema/properties/data/properties/surveySubmission/properties/surveyType' required: - id - title - isArchived - formDefinition - surveyType required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /surveyFormDefinition.list: post: summary: surveyFormDefinition.list operationId: surveyFormDefinitionList description: 'Lists all survey form definitions. See the [Pagination and Incremental Synchronization](/docs/pagination-and-incremental-sync) guide for detailed usage examples. **Requires the [`hiringProcessMetadataRead`](authentication#permissions-surveyformdefinitionlist) permission.** ' tags: - Survey Form Definition requestBody: content: application/json: schema: type: object properties: cursor: $ref: '#/paths/~1brand.list/post/requestBody/content/application~1json/schema/properties/cursor' syncToken: $ref: '#/paths/~1opening.list/post/requestBody/content/application~1json/schema/properties/syncToken' limit: $ref: '#/paths/~1brand.list/post/requestBody/content/application~1json/schema/properties/limit' example: syncToken: 6W05prn4d cursor: qA limit: 25 responses: '200': description: Responses for the surveyFormDefinition.list endpoint content: application/json: schema: oneOf: - allOf: - $ref: '#/paths/~1job.list/post/responses/200/content/application~1json/schema/oneOf/0/allOf/0' - properties: results: type: array items: $ref: '#/paths/~1surveyFormDefinition.info/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' /surveyRequest.create: post: summary: surveyRequest.create description: "This endpoint generates a survey request and returns a survey URL. You can send this URL to a candidate to allow them to complete a survey. \n\n**Requires the [`candidatesWrite`](authentication#permissions-surveyrequestcreate) permission.**\n\n**Note that calling this endpoint will not automatically email the survey to the candidate.** It simply creates the request and gives you a URL to share with a candidate.\n" operationId: surveyRequestCreate tags: - Survey Request requestBody: content: application/json: schema: type: object required: - candidateId - applicationId - surveyFormDefinitionId properties: candidateId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the candidate to create a survey request for. applicationId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the application to associate with the survey request. surveyFormDefinitionId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: "The ID of the survey form that the candidate will see when they visit the URL returned in the `surveyURL` property of the API response. \nSurvey forms IDs can be obtained using the `surveyFormDefinition.list` endpoint. \n" responses: '200': description: Responses for the surveyRequest.create 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: - description: 'The id of the survey request ' - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' candidateId: allOf: - description: 'The id of the candidate the survey request is for ' - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' applicationId: allOf: - description: 'The id of the application associated with the survey request ' - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' surveyFormDefinitionId: allOf: - description: 'The id of the survey form the candidate will fill out when they take the survey ' - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' surveyUrl: type: string example: https://you.ashbyhq.com/ashby/survey/3f20b73e-abec-4d62-ba6f-04f2f985f7dd description: 'The URL that the candidate can visit to take the survey. ' required: - id - candidateId - applicationId - surveyFormDefinitionId - surveyUrl required: - results - title: Error response $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /surveyRequest.list: post: summary: surveyRequest.list description: 'Lists all survey requests. See the [Pagination and Incremental Synchronization](/docs/pagination-and-incremental-sync) guide for detailed usage examples. **Requires the [`candidatesRead`](authentication#permissions-surveyRequestList) permission.** ' operationId: surveyRequestList tags: - Survey Request requestBody: content: application/json: schema: allOf: - $ref: '#/paths/~1opening.list/post/requestBody/content/application~1json/schema' - type: object properties: surveyType: allOf: - description: Returns only the survey requests of the given type. Currently, only `CandidateExperience` is supported. - type: string - enum: - CandidateExperience applicationId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: If provided, only returns the offers for the application with the supplied id candidateId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: If provided, only returns the offers for the candidate with the supplied id required: - surveyType responses: '200': description: Responses for the surveyRequest.list endpoint content: application/json: schema: oneOf: - allOf: - $ref: '#/paths/~1job.list/post/responses/200/content/application~1json/schema/oneOf/0/allOf/0' - properties: results: type: array items: $ref: '#/paths/~1surveyRequest.create/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' /surveySubmission.create: post: summary: surveySubmission.create description: 'Create a new survey submission. **Requires the [`candidatesWrite`](authentication#permissions-surveySubmissionCreate) permission.** ' operationId: surveySubmissionCreate tags: - Survey Submission requestBody: content: application/json: schema: type: object required: - candidateId - applicationId - surveyFormDefinitionId - submittedValues properties: candidateId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the candidate to create a survey submission for. applicationId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the application to associate with the survey submission. surveyFormDefinitionId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: 'The ID of the survey form definition that submissions are being provided for. ' submittedValues: type: object description: "The values that the candidate submitted in the survey form. \nThe keys of this object should be the IDs from the associated survey's form definition, and the values should be the answers to the questions.\nThe information on what values are expected can be obtained by calling the `surveyFormDefinition.info` endpoint.\n" additionalProperties: true example: _systemfield_name: Gob Bluth responses: '200': description: Responses for the surveySubmission.create 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: '#/webhooks/surveySubmit/post/requestBody/content/application~1json/schema/properties/data/properties/surveySubmission' required: - results - title: Error response $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /surveySubmission.list: post: summary: surveySubmission.list operationId: surveySubmissionList description: 'Lists all survey submissions of a given `surveyType`. See the [Pagination and Incremental Synchronization](/docs/pagination-and-incremental-sync) guide for detailed usage examples. **Requires the [`candidatesRead`](authentication#permissions-surveySubmissionList) permission.** ' tags: - Survey Submission requestBody: content: application/json: schema: allOf: - type: object description: 'The type of survey submissions to fetch. Supported values: CandidateExperience, Questionnaire. ' properties: surveyType: type: string description: 'The survey types supported by surveySubmission.list. ' enum: - CandidateExperience - Questionnaire example: CandidateExperience required: - surveyType - $ref: '#/paths/~1opening.list/post/requestBody/content/application~1json/schema' responses: '200': description: Responses for the surveySubmission.list endpoint content: application/json: schema: oneOf: - allOf: - $ref: '#/paths/~1job.list/post/responses/200/content/application~1json/schema/oneOf/0/allOf/0' - type: object properties: results: type: array items: allOf: - $ref: '#/webhooks/surveySubmit/post/requestBody/content/application~1json/schema/properties/data/properties/surveySubmission' - type: object properties: surveyType: $ref: '#/paths/~1surveySubmission.list/post/requestBody/content/application~1json/schema/allOf/0/properties/surveyType' required: - surveyType required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /approval.list: post: summary: approval.list operationId: approvalList description: 'Gets all approvals in the organization. You can optionally filter by entity type and entity ID. See the [Pagination and Incremental Synchronization](/docs/pagination-and-incremental-sync) guide for detailed usage examples. **Requires the [`approvalsRead`](authentication#permissions-approvallist) permission.** ' tags: - Approval requestBody: content: application/json: schema: allOf: - $ref: '#/paths/~1surveyFormDefinition.list/post/requestBody/content/application~1json/schema' - type: object properties: entityType: type: string enum: - offer - job - opening description: Filter approvals by the type of entity they are associated with. entityId: type: string format: uuid description: Filter approvals to only those associated with this specific entity ID. responses: '200': description: Responses from the approval.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: type: object properties: id: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' approvalDefinitionId: allOf: - description: The id of the approval definition associated to this approval. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' entityId: allOf: - description: The id of the approval entity (e.g. the id of the offer version). - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' entityType: type: string enum: - offer - job - opening createdAt: allOf: - $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt' submittedAt: allOf: - $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt' - description: The date when the approval was submitted and sent to users for approval. completedAt: allOf: - $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt' - description: The date when the approval was completed and approved by everyone. steps: type: array items: type: object properties: id: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' approvalsRequired: type: integer description: The number of approvers required to approve this step, before the approval moves on to the next step. completedAt: allOf: - $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt' - description: The date when the step is completed based on the number of required approvals approvers: type: array description: An unordered list of who can approve this step. items: type: object properties: id: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' userId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of a user who is an approver for this step. decision: type: string enum: - approve - reject - pending decidedAt: allOf: - $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt' - description: The date when the decision was taken by the user. requestedAt: allOf: - $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt' - description: The date when the decision was sent to be approved by the user. required: - id - userId - decision required: - id - approvalsRequired - approvers required: - id - createdAt - approvalDefinitionId - entityId - entityType - steps required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /approvalDefinition.update: post: summary: approvalDefinition.update operationId: approvalDefinitionUpdate description: 'Create or update an approval definition for a specific entity that requires approval. The entity requiring approval must be within scope of an approval in Ashby that is marked as being managed by the API. If the provided approval step definitions is an empty list, then approval will be skipped and the entity will proceed to the next stage. **Requires the [`approvalsWrite`](authentication#permissions-approvaldefinitionupdate) permission.** ' tags: - Approval Definition requestBody: content: application/json: schema: type: object properties: entityType: type: string enum: - offer entityId: allOf: - description: The id of the approval entity being updated (e.g. the id of the offer version). - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' approvalStepDefinitions: type: array description: An ordered list of approval steps that describes the number of required approvers at each step, as well as who is an approver at each step. items: type: object properties: approvalsRequired: type: integer description: The number of approvers required to approve this step, before the approval moves on to the next step. The number of approvers must be non-zero and no more than the number of approvers in this step. example: 1 approvers: type: array description: An unordered list of who can approve this step. items: type: object properties: userId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of a user who is an approver for this step. type: type: string enum: - user required: - userId - type required: - approvalsRequired - approvers submitApprovalRequest: type: boolean description: 'Control whether an approval request created through this API should be immediately submitted. If false, then the approval will need to be manually submitted in the Ashby app. Default: false ' required: - entityType - entityId - approvalStepDefinitions responses: '200': description: Responses from the approvalDefinition.update 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: - description: The id of the approval definition. - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' entityType: type: string enum: - Offer entityId: allOf: - description: The id of the approval entity (e.g. the id of the offer version). - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' approvalStepDefinitions: $ref: '#/paths/~1approvalDefinition.update/post/requestBody/content/application~1json/schema/properties/approvalStepDefinitions' required: - entityType - entityId - approvalStepDefinitions required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /archiveReason.list: post: summary: archiveReason.list description: 'Lists archive reasons **Requires the [`hiringProcessMetadataRead`](authentication#permissions-archivereasonlist) permission.** ' operationId: archivereasonlist tags: - Archive Reason requestBody: content: application/json: schema: type: object properties: includeArchived: type: boolean description: When true, includes archived interview plans default: false responses: '200': description: Responses for the archiveReason.list 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' - properties: results: type: array items: type: object properties: id: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' text: type: string example: Too inexperienced reasonType: enum: - RejectedByCandidate - RejectedByOrg - Other example: RejectedByOrg isArchived: $ref: '#/webhooks/openingCreate/post/requestBody/content/application~1json/schema/properties/data/properties/opening/properties/isArchived' required: - id - text - reasonType - isArchived - required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /brand.list: post: summary: brand.list operationId: brandList description: 'Lists all brands for the organization. **Requires the [`organizationRead`](authentication#permissions-departmentinfo) permission.** ' tags: - Brand requestBody: required: false content: application/json: schema: type: object properties: cursor: type: string description: Opaque cursor indicating which page of results to fetch example: G8 limit: type: number description: The maximum number of items to return. The maximum and default value is 100. example: 25 example: cursor: qA limit: 25 responses: '200': description: Responses for the brand.list endpoint content: application/json: schema: oneOf: - title: Success response allOf: - allOf: - $ref: '#/paths/~1job.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/0' - title: Success response - type: object properties: moreDataAvailable: type: boolean description: Whether the cursor can be used to fetch a subsequent page of data. nextCursor: $ref: '#/paths/~1brand.list/post/requestBody/content/application~1json/schema/properties/cursor' required: - moreDataAvailable - type: object properties: results: type: array items: type: object properties: id: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' name: type: string description: The name of the brand hostedJobsPageSlug: type: string description: The slug used for the brand's hosted jobs page URL required: - id - name - hostedJobsPageSlug required: - results - title: Error response $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /closeReason.list: post: summary: closeReason.list operationId: closeReasonList description: 'Lists all close reasons for jobs or openings. **Requires the [`hiringProcessMetadataRead`](authentication#permissions-closereasonlist) permission.** ' tags: - Close Reason requestBody: content: application/json: schema: type: object properties: includeArchived: type: boolean default: false description: Whether to include archived close reasons in the response. responses: '200': description: Responses for the closeReason.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' - properties: results: type: array items: type: object description: The reason a job or opening was closed properties: id: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' description: The reason's unique id reasonText: type: string description: The text of the reason example: Position Filled isArchived: $ref: '#/webhooks/openingCreate/post/requestBody/content/application~1json/schema/properties/data/properties/opening/properties/isArchived' required: - id - reasonText - isArchived - required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /communicationTemplate.list: post: summary: communicationTemplate.list description: 'List all enabled communication templates. **Requires the [`hiringProcessMetadataRead`](authentication#permissions-communicationtemplatelist) permission.** ' operationId: communicationTemplateList tags: - Communication Template responses: '200': description: Responses for the communicationTemplate.list 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: allOf: - type: object description: A communication template properties: id: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' createdAt: $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt' updatedAt: $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt' title: type: string example: Rejection + Consideration for Future Positions intendedTypes: type: array items: type: string enum: - email - inMail - linkedInConnection example: - email - inMail required: - id - title - intendedTypes - createdAt - updatedAt required: - results - title: Error response $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /department.create: post: summary: department.create description: 'Creates a department **Requires the [`organizationWrite`](authentication#permissions-departmentcreate) permission.** ' operationId: departmentcreate tags: - Department & Team requestBody: content: application/json: schema: type: object required: - name properties: name: type: string description: The name of the department or team example: Engineering Operations externalName: type: string description: 'An alternate candidate-facing name for this department that will be used on Ashby job boards ' example: Engineering parentId: type: string format: uuid description: The id of the department's parent department example: 1be42b8e-cafd-4beb-8121-f4981eb20f42 extraData: $ref: '#/paths/~1location.create/post/requestBody/content/application~1json/schema/properties/extraData' responses: '200': description: Responses for the department.create 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/~1department.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' /department.archive: post: summary: department.archive description: 'Archives a department **Requires the [`organizationWrite`](authentication#permissions-departmentarchive) permission.** ' operationId: departmentarchive tags: - Department & Team requestBody: content: application/json: schema: type: object required: - departmentId properties: departmentId: type: string description: The department's ID example: 1be42b8e-cafd-4beb-8121-f4981eb20f42 responses: '200': description: Responses for the department.archive 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/~1department.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' /department.restore: post: summary: department.restore description: 'Restores a department **Requires the [`organizationWrite`](authentication#permissions-departmentrestore) permission.** ' operationId: departmentrestore tags: - Department & Team requestBody: content: application/json: schema: type: object required: - departmentId properties: departmentId: type: string description: The department's ID example: 1be42b8e-cafd-4beb-8121-f4981eb20f42 responses: '200': description: Responses for the department.restore 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/~1department.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' /department.info: post: summary: department.info operationId: departmentInfo description: 'Fetch department details by id **Requires the [`organizationRead`](authentication#permissions-departmentinfo) permission.** ' tags: - Department requestBody: content: application/json: schema: properties: departmentId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The unique id of the department whose details will be fetched required: - departmentId example: departmentId: 3ae2b801-19f6-41ef-ad28-214bd731948f responses: '200': description: Responses from the department.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' name: $ref: '#/paths/~1department.create/post/requestBody/content/application~1json/schema/properties/name' externalName: $ref: '#/paths/~1department.create/post/requestBody/content/application~1json/schema/properties/externalName' isArchived: $ref: '#/webhooks/openingCreate/post/requestBody/content/application~1json/schema/properties/data/properties/opening/properties/isArchived' parentId: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' createdAt: $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt' updatedAt: type: string example: '2023-09-13T21:30:57.965Z' format: date-time extraData: $ref: '#/paths/~1location.create/post/requestBody/content/application~1json/schema/properties/extraData' required: - id - name - isArchived - createdAt - updatedAt required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /department.list: post: summary: department.list operationId: departmentList description: 'Lists all departments See the [Pagination and Incremental Synchronization](/docs/pagination-and-incremental-sync) guide for detailed usage examples. **Requires the [`organizationRead`](authentication#permissions-departmentlist) permission.** ' tags: - Department requestBody: content: application/json: schema: type: object properties: includeArchived: $ref: '#/paths/~1source.list/post/requestBody/content/application~1json/schema/properties/includeArchived' cursor: $ref: '#/paths/~1brand.list/post/requestBody/content/application~1json/schema/properties/cursor' syncToken: $ref: '#/paths/~1opening.list/post/requestBody/content/application~1json/schema/properties/syncToken' limit: $ref: '#/paths/~1brand.list/post/requestBody/content/application~1json/schema/properties/limit' example: includeArchived: false cursor: qA syncToken: 6W05prn4d limit: 25 responses: '200': description: Responses for the department.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' - properties: results: type: array items: $ref: '#/paths/~1department.info/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' /department.move: post: summary: department.move description: 'Moves a department to another parent **Requires the [`organizationWrite`](authentication#permissions-departmentmove) permission.** ' operationId: departmentmove tags: - Department & Team requestBody: content: application/json: schema: type: object required: - departmentId properties: departmentId: type: string description: The department's ID example: 1be42b8e-cafd-4beb-8121-f4981eb20f42 parentId: type: string description: The department parent's ID example: 1be42b8e-cafd-4beb-8121-f4981eb20f42 responses: '200': description: Responses for the department.move 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/~1department.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' /department.update: post: summary: department.update description: 'Updates a department **Requires the [`organizationWrite`](authentication#permissions-departmentupdate) permission.** ' operationId: departmentupdate tags: - Department & Team requestBody: content: application/json: schema: type: object required: - departmentId properties: departmentId: type: string description: The department's ID example: 1be42b8e-cafd-4beb-8121-f4981eb20f42 name: $ref: '#/paths/~1department.create/post/requestBody/content/application~1json/schema/properties/name' externalName: $ref: '#/paths/~1department.create/post/requestBody/content/application~1json/schema/properties/externalName' extraData: $ref: '#/paths/~1location.create/post/requestBody/content/application~1json/schema/properties/extraData' responses: '200': description: Responses for the department.update 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/~1department.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' /hiringTeamRole.list: post: summary: hiringTeamRole.list description: 'Lists the possible hiring team roles in an organization **Requires the [`organizationRead`](authentication#permissions-hiringteamrolelist) permission.** ' operationId: hiringteamrolelist tags: - Hiring Team Role requestBody: content: application/json: schema: type: object properties: namesOnly: type: boolean description: When set to true (the default), an array of role titles is returned. When set to false, an array of objects that include the id and title of the role is returned. default: true responses: '200': description: Responses for the hiringTeamRole.list endpoint content: application/json: schema: oneOf: - title: 'namesOnly: true' allOf: - $ref: '#/paths/~1job.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/0' - type: object properties: results: type: array items: type: string example: - Recruiter required: - results - title: 'namesOnly: false' allOf: - $ref: '#/paths/~1job.info/post/responses/200/content/application~1json/schema/oneOf/0/allOf/0' - type: object properties: results: type: array items: type: object properties: id: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' title: type: string example: Recruiter /location.archive: post: summary: location.archive description: 'Archives a location or location hierarchy. **Requires the [`organizationWrite`](authentication#permissions-locationarchive) permission.** ' operationId: locationarchive tags: - Location requestBody: content: application/json: schema: type: object required: - locationId properties: locationId: type: string description: The id of the location responses: '200': description: Responses for the location.archive 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/~1location.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' /location.create: post: summary: location.create description: 'Creates a location or location hierarchy. **Requires the [`organizationWrite`](authentication#permissions-locationcreate) permission.** ' operationId: locationcreate tags: - Location requestBody: content: application/json: schema: type: object required: - name - type properties: name: type: string description: The name of the location. type: type: string description: A Location represents an actual location that jobs and employees can be associated with. A Location Hierarchy is a grouping of locations or other location hierarchies. enum: - Location - LocationHierarchy address: type: object description: The address of the location. properties: postalAddress: type: object properties: addressCountry: type: string description: The country the location is in. Must be a valid country name or two-letter country code. addressRegion: type: string description: The region the location is in (for instance, a state or province). addressLocality: type: string description: The city or town of the location. postalCode: type: string description: The postal code of the address. streetAddress: type: string description: The street address of the location. parentLocationId: type: string description: The id of the location's parent. isRemote: type: boolean description: Whether the location should be labeled as remote. LocationHierarchies cannot be labeled as remote. default: false workplaceType: allOf: - description: The type of workplace. LocationHierarchies cannot be labeled with a workplaceType. - type: string enum: - OnSite - Hybrid - Remote externalName: type: string description: An alternate candidate-facing name for this location used on job boards and in the API. extraData: type: object description: 'This field stores information, structured as key-value pairs, for your own use and reference, for example a unique identifier for your own system. Do not store personally identifiable information (PII) in this field. In addition, the following constraints apply: - Keys must be strings of at most 100 characters. - Values must be strings of at most 512 characters. - The total size of the extra data must be less than 1kb. We recommend using a prefix for your keys to avoid collisions with other systems, as data stored in this field is available to all API users with permission to access the underlying object. ' additionalProperties: type: string example: partner_external_object_id: '12345' partner_additional_data: f763ba0e4 responses: '200': description: Responses for the location.create 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/~1location.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' /location.info: post: summary: location.info description: 'Gets details for a single location by id. **Requires the [`organizationRead`](authentication#permissions-locationinfo) permission.** ' operationId: locationInfo tags: - Location requestBody: content: application/json: schema: type: object properties: locationId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the location to fetch required: - locationId responses: '200': description: Responses for the location.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' name: type: string example: Bay Area Office externalName: type: string example: San Francisco Office description: An alternate candidate-facing name for this location used on job boards and in the API isArchived: $ref: '#/webhooks/openingCreate/post/requestBody/content/application~1json/schema/properties/data/properties/opening/properties/isArchived' address: type: object properties: postalAddress: type: object properties: addressCountry: type: string example: United States addressRegion: type: string example: California addressLocality: type: string example: San Francisco postalCode: type: string example: '94108' streetAddress: type: string example: 49 Geary St Suite 411 isRemote: type: boolean example: false deprecated: true description: Use `workplaceType` instead workplaceType: description: The type of workplace. example: Hybrid $ref: '#/paths/~1location.create/post/requestBody/content/application~1json/schema/properties/workplaceType/allOf/1' parentLocationId: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' type: type: string enum: - Location - LocationHierarchy description: The type of the location component. example: Location extraData: $ref: '#/paths/~1location.create/post/requestBody/content/application~1json/schema/properties/extraData' required: - id - name - isArchived required: - results - title: Error response $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /location.list: post: summary: location.list description: 'List all locations. Regions are not returned. See the [Pagination and Incremental Synchronization](/docs/pagination-and-incremental-sync) guide for detailed usage examples. **Requires the [`organizationRead`](authentication#permissions-locationlist) permission.** ' operationId: locationlist tags: - Location requestBody: content: application/json: schema: allOf: - $ref: '#/paths/~1surveyFormDefinition.list/post/requestBody/content/application~1json/schema' - type: object additionalProperties: false properties: includeArchived: $ref: '#/paths/~1source.list/post/requestBody/content/application~1json/schema/properties/includeArchived' includeLocationHierarchy: type: boolean description: 'If true, the response will include the location hierarchy (regions). ' default: false example: false responses: '200': description: Responses for the location.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/~1location.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' /location.move: post: summary: location.move description: 'Moves a location in location hierarchy. **Requires the [`organizationWrite`](authentication#permissions-locationmove) permission.** ' operationId: locationmove tags: - Location requestBody: content: application/json: schema: type: object required: - locationId - parentLocationHierarchyId properties: locationId: type: string description: The id of the location parentLocationHierarchyId: type: string description: The id of the parent location hierarchy responses: '200': description: Responses for the location.move 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/~1location.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' /location.restore: post: summary: location.restore description: 'Restores an archived location or location hierarchy. **Requires the [`organizationWrite`](authentication#permissions-locationrestore) permission.** ' operationId: locationrestore tags: - Location requestBody: content: application/json: schema: type: object required: - locationId properties: locationId: type: string description: The id of the location responses: '200': description: Responses for the location.restore 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/~1location.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' /location.updateAddress: post: summary: location.updateAddress description: 'Update an address of a location or location hierarchy. **Requires the [`organizationWrite`](authentication#permissions-locationupdateaddress) permission.** ' operationId: locationupdateaddress tags: - Location requestBody: content: application/json: schema: type: object required: - locationId - address properties: locationId: type: string description: The id of the location address: type: object description: The address of the location properties: postalAddress: type: object properties: addressCountry: type: string description: The country of the location. Must be a valid country name or two-letter country code. addressRegion: type: string description: The region of the location (for instance, a state or province). addressLocality: type: string description: The city or town of the location. postalCode: type: string description: The postal code of the location. streetAddress: type: string description: The street address of the location. responses: '200': description: Responses for the location.updateAddress 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/~1location.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' /location.updateName: post: summary: location.updateName description: 'Update location''s name. **Requires the [`organizationWrite`](authentication#permissions-locationupdateName) permission.** ' operationId: locationupdateName tags: - Location requestBody: content: application/json: schema: type: object required: - locationId - name properties: locationId: type: string description: The id of the location name: type: string description: The name of the location responses: '200': description: Responses for the location.updateName 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/~1location.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' /location.updateExternalName: post: summary: location.updateExternalName description: 'Update a location''s external (candidate-facing) name. **Requires the [`organizationWrite`](authentication#permissions-locationupdateexternalname) permission.** ' operationId: locationupdateexternalname tags: - Location requestBody: content: application/json: schema: type: object additionalProperties: false required: - locationId properties: locationId: type: string description: The id of the location externalName: type: string description: An alternate candidate-facing name for this location used on job boards and in the API. Pass `null` to clear. responses: '200': description: Responses for the location.updateExternalName 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/~1location.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' /location.updateWorkplaceType: post: summary: location.updateWorkplaceType description: 'Update location''s workplace type. **Requires the [`organizationWrite`](authentication#permissions-locationupdateworkplacetype) permission.** ' operationId: locationupdateworkplacetype tags: - Location requestBody: content: application/json: schema: type: object required: - locationId - workplaceType properties: locationId: type: string description: The id of the location workplaceType: allOf: - description: The type of workplace. LocationHierarchies cannot be labeled with a workplaceType. - $ref: '#/paths/~1location.create/post/requestBody/content/application~1json/schema/properties/workplaceType/allOf/1' responses: '200': description: Responses for the location.updateWorkplaceType 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/~1location.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' /referral.create: post: summary: referral.create operationId: referralCreate description: 'Creates a referral **Requires the [`candidatesWrite`](authentication#permissions-referralcreate) permission.** ' tags: - Referral requestBody: content: application/json: schema: type: object properties: id: allOf: - description: The id of the referral form, from /referralForm.info - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' creditedToUserId: allOf: - description: The id of the user submitting the referral - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' fieldSubmissions: type: array items: properties: path: type: string description: The form field's "path" value value: type: string description: 'The value depends on the field type: - Most fields: A primitive value (string, number, boolean) - Job field: An object with `{ title: job.title, value: job.id }`. The referenced job must be open. - Location field: An object with the following properties: `{ country: "USA", city: "San Francisco", region: "California" }`. You may provide any combination of these properties and we will attempt to geocode the location. For best results, provide all three properties. - EducationHistory field: [Early Access] An array of objects with the following properties: `{ schoolName: "University of California, Berkeley", degree: "Bachelor of Science", major: "Computer Science", startDate: "2020-09-01", endDate: "2024-05-15", isCurrent: true }`. Only `schoolName` is required. We will attempt to match the school name to a known school in our database. If `isCurrent` is true, `endDate` must not be provided. ' required: - path - value createdAt: allOf: - description: 'An ISO date string to set the referral''s createdAt timestamp to. When this value isn''t provided, the createdAt timestamp defaults to the time the referral was created. ' - $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt' required: - id - creditedToUserId - fieldSubmissions responses: '200': description: Responses for the referral.create 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: '#/webhooks/pushToHRIS/post/requestBody/content/application~1json/schema/properties/data/properties/application' required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /referralForm.info: post: summary: referralForm.info operationId: referralFormInfo description: 'Fetches the default referral form or creates a default referral form if none exists. **Requires the [`hiringProcessMetadataRead`](authentication#permissions-referralforminfo) permission.** ' tags: - Referral Form responses: '200': description: Responses for the referral.create 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: allOf: - type: object properties: id: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' organizationId: type: string format: uuid description: The ID of the organization this form belongs to title: type: string description: The title of the form isArchived: $ref: '#/webhooks/openingCreate/post/requestBody/content/application~1json/schema/properties/data/properties/opening/properties/isArchived' isDefaultForm: type: boolean description: Whether this is the default form for the organization formDefinition: $ref: '#/paths/~1offer.start/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/properties/formDefinition' required: - id - organizationId - title - isArchived - isDefaultForm - formDefinition - type: object properties: organizationId: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' isDefaultForm: type: boolean example: true required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /source.list: post: summary: source.list description: 'List all sources **Requires the [`hiringProcessMetadataRead`](authentication#permissions-sourcelist) permission.** ' operationId: sourcelist tags: - Source requestBody: content: application/json: schema: type: object properties: includeArchived: type: boolean description: When true, includes archived items default: false responses: '200': description: Responses for the source.list 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: type: object properties: id: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' title: type: string example: Applied isArchived: $ref: '#/webhooks/openingCreate/post/requestBody/content/application~1json/schema/properties/data/properties/opening/properties/isArchived' sourceType: type: object properties: id: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' title: type: string example: Inbound isArchived: $ref: '#/webhooks/openingCreate/post/requestBody/content/application~1json/schema/properties/data/properties/opening/properties/isArchived' required: - id - title - isArchived required: - id - title - isArchived moreDataAvailable: type: boolean example: false required: - results - moreDataAvailable - title: Error response $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /sourceTrackingLink.list: post: summary: sourceTrackingLink.list description: 'List all source custom tracking links **Requires the [`hiringProcessMetadataRead`](authentication#permissions-sourcetrackinglinklist) permission.** ' operationId: sourcetrackinglinklist tags: - Source Tracking Links requestBody: content: application/json: schema: type: object properties: includeDisabled: type: boolean description: When true, includes disabled tracking links default: false responses: '200': description: Responses for the sourceTrackingLink.list endpoint content: application/json: schema: oneOf: - allOf: - $ref: '#/paths/~1job.list/post/responses/200/content/application~1json/schema/oneOf/0/allOf/0' - properties: results: type: array items: type: object properties: id: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' code: type: string example: fx9iL4QtWr enabled: type: boolean example: true sourceId: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' link: type: string example: https://jobs.ashbyhq.com/example?utm_source=fx9iL4QtWr required: - id - code - enabled - sourceId - link required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /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 - 0.5 MONTH - 3 MONTH example: 1 YEAR description: An object describing the compensation range responses: '200': description: Responses for the user.setCustomFieldValues 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/~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' /assessment.addCompletedToCandidate: post: summary: assessment.addCompletedToCandidate operationId: assessmentAddCompletedToCandidate description: 'Add a completed assessment to a candidate **Requires the [`candidatesWrite`](authentication#permissions-assessmentaddcompletedtocandidate) permission.** ' tags: - Assessment requestBody: content: application/json: schema: type: object properties: candidateId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the candidate, to whom to add the completed assessment partnerId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the partner adding the assessment assessment: type: object description: The completed assessment required: - assessmentTypeId - assessmentId - assessmentName - result - metadata properties: assessmentTypeId: allOf: - description: An identifier that uniquely identifies the assessment type - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' assessmentId: allOf: - description: An identifier that uniquely identifies the completed assessment - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' assessmentName: type: string example: Node Assessment description: The name of the assessment that was taken that will be displayed in the UI result: allOf: - description: The assessment's result - $ref: '#/paths/~1assessment.addCompletedToCandidate/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/properties/result' metadata: type: array description: An array of metadata associated with this completed assessment items: $ref: '#/paths/~1assessment.addCompletedToCandidate/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/properties/result' timestamp: allOf: - description: The timestamp in milliseconds since the unix epoch, when the assessment was completed - type: integer description: The timestamp in milliseconds since the unix epoch, when the update occurred format: int64 example: 1665680638489 required: - candidateId - partnerId - assessment - timestamp responses: '200': description: Responses for the assessment.addCompletedToCandidate 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' - properties: results: type: object required: - assessmentTypeId - assessmentId - assessmentName - candidateId - metadata properties: applicationId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' assessmentId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' assessmentName: type: string example: test-assessment-name assessmentTypeId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' candidateId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' metadata: type: array items: $ref: '#/paths/~1assessment.addCompletedToCandidate/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/properties/result' result: type: object properties: identifier: type: string description: Uniquely identifies this field, for this partner example: result-max label: type: string description: Label for the assessment metadata to be displayed in the UI example: Max Score description: type: string description: Description of the assessment metadata, which may be displayed in the UI example: The maximum possible score for the assessment type: type: string description: The type of the value. Please reach out if you'd like us to support a new type! enum: - numeric_score - numeric_duration_minutes - url - string - boolean_success value: allOf: - oneOf: - type: string - type: number - type: boolean description: "The raw value \u2014 one of string, number, or boolean\n" - example: 10 required: - identifier - label - type - value - required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /assessment.start: post: summary: assessment.start (Implemented by Partner) operationId: assessmentStart description: 'The API for starting an assessment. Implemented by the partner, called by Ashby. ' tags: - Assessment requestBody: content: application/json: schema: type: object required: - assessment_type_id - candidate - application - job properties: assessment_type_id: allOf: - description: The id of the type of assessment to start (retrieved from calling /assessment.list) - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' candidate: allOf: - description: Identifier of the assessment being started - type: object description: A description of the candidate required: - ashby_id - first_name - last_name - email - ashby_profile_url properties: ashby_id: allOf: - type: string - description: The identifier of the candidate in Ashby first_name: allOf: - type: string - description: The first name of the candidate being assessed last_name: allOf: - type: string - description: The last name of the candidate being assessed email: allOf: - type: string - description: The email of the candidate being assessed ashby_profile_url: allOf: - type: string - description: The url back into Ashby of the candidate being assessed application: allOf: - description: The application for which the candidate is being assessed - type: object description: The application for which the candidate is being assessed required: - ashby_id - status properties: ashby_id: allOf: - type: string - description: The id of the application in Ashby status: allOf: - $ref: '#/paths/~1application.list/post/requestBody/content/application~1json/schema/allOf/1/properties/status' - description: The status of the application in Ashby job: allOf: - description: The job for which the candidate is being assessed - type: object description: The job for which the candidate is being assessed required: - ashby_id - name - ashby_job_url properties: ashby_id: allOf: - type: string - description: The id of the job in Ashby name: allOf: - type: string - description: The name of the job in Ashby req_id: allOf: - type: string - description: The customer-defined requisition id for the job ashby_job_url: allOf: - type: string - description: The url of the job, internal to Ashby hiringTeam: type: array items: $ref: '#/paths/~1hiringTeam.addMember/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results' responses: '200': description: Responses for the assessment.start endpoint content: application/json: schema: title: Success Response type: object required: - success - results properties: success: type: boolean results: required: - assessment_id properties: assessment_id: type: string update_request: $ref: '#/paths/~1assessment.update/post/requestBody/content/application~1json/schema' '409': description: 'The assessment could not be started because the candidate is already being assessed. ' '422': description: 'A custom error message that will be shown to the user in Ashby. ' content: application/json: schema: title: Custom Error Response type: object required: - message properties: message: type: string description: The message to be shown to the user in Ashby. /assessment.list: post: summary: assessment.list (Implemented by Partner) operationId: assessmentList description: "The API for listing assessments that the partner supports \u2014 implemented by the partner, but called by Ashby\n" tags: - Assessment requestBody: content: application/json: schema: type: object responses: '200': description: Responses for the assessment.list 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: allOf: - type: object description: List of available assessments properties: assessment_type_id: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' name: type: string description: type: string - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /assessment.update: post: summary: assessment.update operationId: assessmentUpdate description: 'Update Ashby about the status of a started assessment. **Requires the [`candidatesWrite`](authentication#permissions-assessmentupdate) permission.** `assessment_status` is required unless `cancelled_reason` is provided. ' tags: - Assessment requestBody: content: application/json: schema: type: object required: - assessment_id - timestamp properties: assessment_id: allOf: - description: Identifier of the assessment being updated - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' timestamp: $ref: '#/paths/~1assessment.addCompletedToCandidate/post/requestBody/content/application~1json/schema/properties/timestamp/allOf/1' assessment_status: allOf: - description: The current status of the assessment. Setting this with a value of "Started" will signal Ashby to store the timestamp the assessment started. Required when `cancelled_reason` is not set. - $ref: '#/paths/~1assessment.addCompletedToCandidate/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/properties/result' assessment_profile_url: allOf: - description: The url back to the assessment/candidate on the partner's website. This value should always be of type url. Required when `assessment_result` is set. - $ref: '#/paths/~1assessment.addCompletedToCandidate/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/properties/result' assessment_result: allOf: - description: The result of the assessment. Sending an update with this field will signal to Ashby that the assessment is complete. - $ref: '#/paths/~1assessment.addCompletedToCandidate/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/properties/result' cancelled_reason: allOf: - description: The reason the assessment was cancelled. This field will signal to Ashby that the assessment is cancelled. - $ref: '#/paths/~1assessment.addCompletedToCandidate/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/properties/result' metadata: type: array description: Any other metadata about the assessment (e.g. ETA until complete). All assessment data should have unique identifiers. items: $ref: '#/paths/~1assessment.addCompletedToCandidate/post/responses/200/content/application~1json/schema/oneOf/0/allOf/1/properties/results/properties/result' responses: '200': description: Responses for the assessment.start endpoint /assessment.cancel: post: summary: assessment.cancel (Implemented by Partner) operationId: assessmentCancel description: '(Optional) Cancels an assessment. Implemented by the partner, called by Ashby. ' tags: - Assessment requestBody: content: application/json: schema: type: object required: - assessment_id properties: assessment_id: allOf: - description: The id of the started assessment to cancel - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' responses: '200': description: Responses for the assessment.cancel endpoint content: application/json: schema: oneOf: - title: Success Response type: object $ref: '#/paths/~1assessment.start/post/responses/200/content/application~1json/schema' - title: Error Response type: object $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /assessment.customField.list: post: summary: customField.list (Implemented by Partner) operationId: assessmentPartnerCustomFieldList description: "The API for listing custom fields that can be synced to Ashby \u2014 implemented by the assessment partner, but called by Ashby.\n\nThis endpoint is optional and must be enabled for your integration. Contact Ashby if you wish to use this feature.\n" tags: - Assessment requestBody: content: application/json: schema: type: object responses: '200': description: Responses for the customField.list 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: fields: type: array items: type: object description: A custom field specification provided by an assessment partner properties: id: type: string minLength: 1 description: Unique identifier for this custom field. This id will be used as the key in `additional_fields` when calling `/assessment.start`. example: department name: type: string minLength: 1 description: Display name of the custom field shown to users in Ashby example: Department type: type: string description: The type of the custom field enum: - String - Date - DateRange - Number - ValueSelect - MultiValueSelect - Boolean - LongText - Email - Phone - Score - SocialLink - Url - Currency - Location example: ValueSelect possible_values: type: array description: Required for `ValueSelect` and `MultiValueSelect` types. An array of possible values the user can choose from. items: type: object properties: key: type: string minLength: 1 description: Internal identifier for this option. This value will be sent in `additional_fields` when the assessment is started. example: eng value: type: string minLength: 1 description: Display value shown to users in Ashby example: Engineering required: - key - value isRequired: type: boolean description: Whether this field is required. Defaults to false if not specified. example: false required: - id - name - type required: - fields - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /candidate.addEmailMessage: post: summary: candidate.addEmailMessage description: 'Adds an email message to a candidate''s profile. **Requires the [`candidatesWrite`](authentication#permissions-candidateaddemailmessage) permission.** ' operationId: candidateAddEmailMessage tags: - Candidate requestBody: required: true content: application/json: schema: type: object additionalProperties: false required: - candidateId - emailProviderEmailId - subject - from - to - body properties: candidateId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The candidate to attach this email to. emailProviderEmailId: type: string description: Unique identifier for this message in the partner system. Must be unique per API key. subject: type: string description: The email subject line. from: type: string description: The sender email address. to: type: string description: The recipient email address. body: type: string description: The html body of the email. userId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The Ashby user ID to associate with this email. Defaults to the API key user. sentAt: allOf: - type: string format: date-time example: '2022-07-21T17:32:28Z' - description: When the email was sent. Defaults to the current time. cc: type: string description: CC recipients. messageUrl: type: string format: uri description: URL to view the message in the partner application. example: https://example.com/messages/1234567890 messageIdHeader: type: string description: RFC 5322 message identifier. example: threadId: type: string description: Thread identifier to group this message with others. Defaults to emailProviderEmailId. isPrivate: type: boolean description: Whether the email should be marked as private. Private emails require "Allow access to non-offer private fields?" API key permission to create and view. Defaults to false. default: false responses: '200': description: Responses for the candidate.addEmailMessage 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: An email sent to or from a candidate. properties: id: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' description: The unique id of the email in Ashby. candidateId: $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' description: The candidate this email is attached to. emailProviderEmailId: type: string description: The unique identifier for this message in the partner system. subject: type: string description: The email subject line. from: type: string description: The sender email address. to: type: string description: The recipient email address. body: type: - string - 'null' description: The body of the email. Can be HTML or plain text. sentAt: $ref: '#/paths/~1candidate.addEmailMessage/post/requestBody/content/application~1json/schema/properties/sentAt/allOf/0' description: When the email was sent. cc: type: - string - 'null' description: CC recipients. messageUrl: type: - string - 'null' format: uri description: URL to view the message in the partner application. messageIdHeader: type: - string - 'null' description: RFC 5322 Message-ID header value. threadId: type: string description: Thread identifier grouping this message with others. isPrivate: type: boolean description: Whether the email is marked as private. userIsSender: type: boolean description: Whether the associated user is the sender (true) or recipient (false). required: - id - candidateId - emailProviderEmailId - subject - from - to - sentAt - isPrivate - userIsSender - threadId required: - results - $ref: '#/paths/~1report.generate/post/responses/429/content/application~1json/schema' /candidate.addProject: post: summary: candidate.addProject operationId: candidateaddproject description: 'Adds the candidate to a project. **Requires the [`candidatesWrite`](authentication#permissions-candidateaddproject) permission.** ' tags: - Candidate requestBody: required: true content: application/json: schema: type: object properties: candidateId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the candidate projectId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the project required: - candidateId - projectId example: candidateId: f9e52a51-a075-4116-a7b8-484deba69004 projectId: bcffca12-5b09-4a76-acf2-00a8e267b222 responses: '200': description: Responses from the candidate.addProject 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/~1candidate.info/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' /candidate.addTag: post: summary: candidate.addTag description: 'Adds a tag to a candidate **Requires the [`candidatesWrite`](authentication#permissions-candidateaddtag) permission.** ' operationId: candidateAddTag tags: - Candidate requestBody: content: application/json: schema: type: object required: - candidateId - tagId properties: candidateId: type: string description: The unique id of the candidate to add the tag to. example: 5b591aed-88e3-4395-b9c6-7d529f93354a tagId: type: string description: The unique id of the tag to add to the candidate. example: 38430ede-5bd2-41fc-b474-87591cb98cbc responses: '200': description: Responses for the candidate.addTag 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/~1candidate.info/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' /candidate.anonymize: post: summary: candidate.anonymize description: 'Anonymizes a candidate. **Requires the [`candidatesWrite`](authentication#permissions-candidateanonymize) permission.** **Note**: this action cannot be reversed and requires all of a candidate''s applications to be in the archived or hired state. ' operationId: candidateAnonymize tags: - Candidate requestBody: content: application/json: schema: type: object required: - candidateId properties: candidateId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the candidate to anonymize. responses: '200': description: Responses for the candidate.anonymize 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 description: The anonymized candidate properties: results: $ref: '#/paths/~1candidate.info/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' /candidate.create: post: summary: candidate.create operationId: candidateCreate description: 'Creates a new candidate **Requires the [`candidatesWrite`](authentication#permissions-candidatecreate) permission.** To set values for custom fields on Candidates, use the [`customFields.setValue`](https://developers.ashbyhq.com/reference/customfieldsetvalue) endpoint. ' tags: - Candidate requestBody: content: application/json: schema: type: object properties: name: type: string example: Adam Hart description: The first and last name of the candidate to be created. email: allOf: - type: string example: test@ashbyhq.com - description: Primary, personal email of the candidate to be created. phoneNumber: allOf: - type: string example: 555-555-5555 - description: Primary, personal phone number of the candidate to be created. linkedInUrl: type: string example: https://linkedin.com/in/user description: Url to the candidate's LinkedIn profile. Must be a valid Url. githubUrl: type: string example: https://github.com/user description: Url to the candidate's Github profile. Must be a valid Url. website: type: string example: https://twitter.com/user description: Url of the candidate's website. Must be a valid Url. alternateEmailAddresses: type: array items: type: string example: - test.email@ashbyhq.com description: Array of alternate email address to add to the candidate's profile. sourceId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The source to set on the candidate being created. creditedToUserId: allOf: - $ref: '#/paths/~1interviewerPool.addUser/post/requestBody/content/application~1json/schema/properties/userId' - description: The id of the user the candidate will be credited to. location: type: object description: The location of the candidate. properties: city: type: string example: San Francisco description: The city of the candidate's location. region: type: string example: California description: The region (state, province, etc.) of the candidate's location. country: type: string example: United States description: The country of the candidate's location. createdAt: allOf: - description: 'An ISO date string to set the candidate''s `createdAt` timestamp. When this value isn''t provided, the `createdAt` timestamp defaults to the time the call was made. ' - $ref: '#/paths/~1candidate.createNote/post/requestBody/content/application~1json/schema/properties/createdAt' required: - name responses: '200': description: Responses for the candidate.create 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/~1candidate.info/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' /candidate.createNote: post: summary: candidate.createNote description: "Creates a note on a candidate.\n\n**Requires the [`candidatesWrite`](authentication#permissions-candidatecreatenote) permission.**\n\nFor notes submitted with a type of `text/html`, we support the elements listed below. Any unsupported elements will be stripped out of the note's content before posting.\n - Bold ``\n - Italic ``\n - Underline ``\n - Links ``\n - Bulleted Lists - `