Greenhouse Applications API

Candidate applications to specific jobs, including stage advancement, transfers, hires, rejections, and attachments.

Documentation

Specifications

Schemas & Data

Other Resources

OpenAPI Specification

greenhouse-io-applications-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Greenhouse Assessment Partner ActivityFeed Applications API
  description: 'The Assessment Partner API defines the contract that assessment vendors implement so

    Greenhouse can list available tests, send a test to a candidate, and retrieve the

    candidate''s results. Endpoints are hosted by the partner (not Greenhouse) and are

    secured with HTTP Basic over HTTPS. Greenhouse may also receive PATCH callbacks from

    the partner with completed test status; otherwise it polls `test_status` hourly for

    up to 8 weeks. API keys must be fewer than 171 characters.

    '
  version: 1.0.0
  contact:
    name: Greenhouse Software
    url: https://www.greenhouse.com
    email: developers@greenhouse.io
servers:
- url: https://{partner_host}/{base_path}
  description: Partner-hosted endpoint
  variables:
    partner_host:
      default: partner.example.com
    base_path:
      default: greenhouse-assessment
security:
- BasicAuth: []
tags:
- name: Applications
  description: Candidate applications to specific jobs, including stage advancement, transfers, hires, rejections, and attachments.
paths:
  /applications:
    get:
      tags:
      - Applications
      summary: List Applications
      description: Returns a paginated list of all applications across the organization.
      operationId: listApplications
      parameters:
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/PerPage'
      - $ref: '#/components/parameters/CreatedAfter'
      - $ref: '#/components/parameters/CreatedBefore'
      - $ref: '#/components/parameters/UpdatedAfter'
      - $ref: '#/components/parameters/UpdatedBefore'
      - name: job_id
        in: query
        schema:
          type: integer
      - name: status
        in: query
        schema:
          type: string
          enum:
          - active
          - rejected
          - hired
          - converted
      - $ref: '#/components/parameters/OnBehalfOf'
      responses:
        '200':
          description: Array of applications.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Application'
        4XX:
          $ref: '#/components/responses/ErrorResponse'
  /applications/{id}:
    parameters:
    - $ref: '#/components/parameters/Id'
    get:
      tags:
      - Applications
      summary: Retrieve Application
      operationId: getApplication
      responses:
        '200':
          description: A single application.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
        4XX:
          $ref: '#/components/responses/ErrorResponse'
    patch:
      tags:
      - Applications
      summary: Update Application
      operationId: updateApplication
      parameters:
      - $ref: '#/components/parameters/OnBehalfOf'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApplicationUpdate'
      responses:
        '200':
          description: Updated application.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
        4XX:
          $ref: '#/components/responses/ErrorResponse'
    delete:
      tags:
      - Applications
      summary: Delete Application
      operationId: deleteApplication
      parameters:
      - $ref: '#/components/parameters/OnBehalfOf'
      responses:
        '204':
          description: Deleted.
        4XX:
          $ref: '#/components/responses/ErrorResponse'
  /candidates/{id}/applications:
    post:
      tags:
      - Applications
      summary: Add Application to Candidate
      operationId: addCandidateApplication
      parameters:
      - $ref: '#/components/parameters/Id'
      - $ref: '#/components/parameters/OnBehalfOf'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApplicationCreate'
      responses:
        '201':
          description: Created application.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
        4XX:
          $ref: '#/components/responses/ErrorResponse'
  /applications/{id}/advance:
    post:
      tags:
      - Applications
      summary: Advance Application
      description: Move the application to the next interview stage.
      operationId: advanceApplication
      parameters:
      - $ref: '#/components/parameters/Id'
      - $ref: '#/components/parameters/OnBehalfOf'
      responses:
        '200':
          description: Advanced.
        4XX:
          $ref: '#/components/responses/ErrorResponse'
  /applications/{id}/move:
    post:
      tags:
      - Applications
      summary: Move Application
      description: Move the application to a specific stage.
      operationId: moveApplication
      parameters:
      - $ref: '#/components/parameters/Id'
      - $ref: '#/components/parameters/OnBehalfOf'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - from_stage_id
              - to_stage_id
              properties:
                from_stage_id:
                  type: integer
                to_stage_id:
                  type: integer
      responses:
        '200':
          description: Moved.
        4XX:
          $ref: '#/components/responses/ErrorResponse'
  /applications/{id}/transfer_to_job:
    post:
      tags:
      - Applications
      summary: Transfer Application To Job
      operationId: transferApplicationToJob
      parameters:
      - $ref: '#/components/parameters/Id'
      - $ref: '#/components/parameters/OnBehalfOf'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - new_job_id
              properties:
                new_job_id:
                  type: integer
                new_job_stage_id:
                  type: integer
      responses:
        '200':
          description: Transferred.
        4XX:
          $ref: '#/components/responses/ErrorResponse'
  /applications/{id}/convert_prospect:
    patch:
      tags:
      - Applications
      summary: Convert Prospect To Candidate
      operationId: convertProspect
      parameters:
      - $ref: '#/components/parameters/Id'
      - $ref: '#/components/parameters/OnBehalfOf'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                job_id:
                  type: integer
                job_stage_id:
                  type: integer
      responses:
        '200':
          description: Converted.
        4XX:
          $ref: '#/components/responses/ErrorResponse'
  /applications/{id}/attachments:
    post:
      tags:
      - Applications
      summary: Add Application Attachment
      operationId: addApplicationAttachment
      parameters:
      - $ref: '#/components/parameters/Id'
      - $ref: '#/components/parameters/OnBehalfOf'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Attachment'
      responses:
        '201':
          description: Attached.
        4XX:
          $ref: '#/components/responses/ErrorResponse'
  /applications/{id}/hire:
    post:
      tags:
      - Applications
      summary: Hire Application
      operationId: hireApplication
      parameters:
      - $ref: '#/components/parameters/Id'
      - $ref: '#/components/parameters/OnBehalfOf'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                start_date:
                  type: string
                  format: date
                opening_id:
                  type: integer
      responses:
        '200':
          description: Hired.
        4XX:
          $ref: '#/components/responses/ErrorResponse'
  /applications/{id}/reject:
    post:
      tags:
      - Applications
      summary: Reject Application
      operationId: rejectApplication
      parameters:
      - $ref: '#/components/parameters/Id'
      - $ref: '#/components/parameters/OnBehalfOf'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                rejection_reason_id:
                  type: integer
                notes:
                  type: string
      responses:
        '200':
          description: Rejected.
        4XX:
          $ref: '#/components/responses/ErrorResponse'
    patch:
      tags:
      - Applications
      summary: Update Rejection
      operationId: updateApplicationRejection
      parameters:
      - $ref: '#/components/parameters/Id'
      - $ref: '#/components/parameters/OnBehalfOf'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                rejection_reason_id:
                  type: integer
                notes:
                  type: string
      responses:
        '200':
          description: Updated rejection.
        4XX:
          $ref: '#/components/responses/ErrorResponse'
  /applications/{id}/unreject:
    post:
      tags:
      - Applications
      summary: Unreject Application
      operationId: unrejectApplication
      parameters:
      - $ref: '#/components/parameters/Id'
      - $ref: '#/components/parameters/OnBehalfOf'
      responses:
        '200':
          description: Unrejected.
        4XX:
          $ref: '#/components/responses/ErrorResponse'
  /jobs/{id}:
    post:
      tags:
      - Applications
      summary: Submit Application
      description: Submit a candidate application to a job posting. Accepts multipart/form-data or JSON. Requires Basic auth.
      operationId: submitApplication
      security:
      - BasicAuth: []
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApplicationSubmission'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/ApplicationSubmission'
      responses:
        '200':
          description: Application accepted.
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: string
components:
  parameters:
    Id:
      name: id
      in: path
      required: true
      schema:
        type: integer
    PerPage:
      name: per_page
      in: query
      description: Default 100, max 500.
      schema:
        type: integer
        default: 100
        maximum: 500
    CreatedAfter:
      name: created_after
      in: query
      schema:
        type: string
        format: date-time
    OnBehalfOf:
      name: On-Behalf-Of
      in: header
      required: false
      description: The ID of the Greenhouse user the request is being made on behalf of.
      schema:
        type: integer
    UpdatedBefore:
      name: updated_before
      in: query
      schema:
        type: string
        format: date-time
    Page:
      name: page
      in: query
      schema:
        type: integer
        default: 1
    CreatedBefore:
      name: created_before
      in: query
      schema:
        type: string
        format: date-time
    UpdatedAfter:
      name: updated_after
      in: query
      schema:
        type: string
        format: date-time
  responses:
    ErrorResponse:
      description: Error response.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    UserRef:
      type: object
      nullable: true
      properties:
        id:
          type: integer
        first_name:
          type: string
        last_name:
          type: string
        name:
          type: string
        employee_id:
          type: string
          nullable: true
    ApplicationSubmission:
      type: object
      required:
      - first_name
      - last_name
      - email
      properties:
        first_name:
          type: string
        last_name:
          type: string
        email:
          type: string
          format: email
        phone:
          type: string
        location:
          type: string
          description: City, State / Country.
        resume_text:
          type: string
        resume_text_file:
          type: string
          description: Base64-encoded resume file content.
        resume_content_filename:
          type: string
        resume_content_type:
          type: string
        cover_letter_text:
          type: string
        cover_letter_content:
          type: string
          description: Base64-encoded cover letter.
        cover_letter_content_filename:
          type: string
        question_id:
          type: string
          description: Greenhouse-defined custom question identifiers; multiple entries allowed.
    ApplicationCreate:
      type: object
      required:
      - job_id
      properties:
        job_id:
          type: integer
        source_id:
          type: integer
        initial_stage_id:
          type: integer
        referrer:
          type: object
          properties:
            type:
              type: string
              enum:
              - outside
              - id
              - email
            value:
              type: string
        attachments:
          type: array
          items:
            $ref: '#/components/schemas/Attachment'
    ApplicationUpdate:
      type: object
      properties:
        source_id:
          type: integer
        prospect_owner_id:
          type: integer
        prospect_pool_id:
          type: integer
        prospect_stage_id:
          type: integer
        custom_fields:
          type: object
          additionalProperties: true
    Attachment:
      type: object
      required:
      - filename
      - type
      properties:
        filename:
          type: string
        url:
          type: string
          format: uri
        type:
          type: string
          enum:
          - resume
          - cover_letter
          - admin_only
          - public
          - offer_letter
          - take_home_test
          - offer_packet
        content:
          type: string
          description: Base64 file content.
        content_type:
          type: string
    Error:
      type: object
      properties:
        message:
          type: string
        errors:
          type: array
          items:
            type: object
            properties:
              field:
                type: string
              message:
                type: string
    Application:
      type: object
      properties:
        id:
          type: integer
        candidate_id:
          type: integer
        prospect:
          type: boolean
        applied_at:
          type: string
          format: date-time
        rejected_at:
          type: string
          format: date-time
          nullable: true
        last_activity_at:
          type: string
          format: date-time
        location:
          type: object
          properties:
            address:
              type: string
        source:
          type: object
          properties:
            id:
              type: integer
            public_name:
              type: string
        credited_to:
          $ref: '#/components/schemas/UserRef'
        rejection_reason:
          type: object
          nullable: true
          properties:
            id:
              type: integer
            name:
              type: string
        rejection_details:
          type: object
          nullable: true
        jobs:
          type: array
          items:
            type: object
            properties:
              id:
                type: integer
              name:
                type: string
        job_post_id:
          type: integer
          nullable: true
        status:
          type: string
          enum:
          - active
          - rejected
          - hired
          - converted
        current_stage:
          type: object
          properties:
            id:
              type: integer
            name:
              type: string
        answers:
          type: array
          items:
            type: object
            properties:
              question:
                type: string
              answer:
                type: string
        custom_fields:
          type: object
          additionalProperties: true
  securitySchemes:
    BasicAuth:
      type: http
      scheme: basic
      description: HTTP Basic; the API key is Base64-encoded and used as the username (key must be <171 chars).