Indeed Jobs API

Operations for creating, updating, expiring, and retrieving job postings on Indeed. Supports qualifications, working hours, salary, benefits, employer information, and Indeed Apply configuration.

OpenAPI Specification

indeed-jobs-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Indeed Employer Candidates Jobs API
  description: 'The Indeed Employer API provides a RESTful interface for managing employers, candidates, and job postings on the Indeed platform. This API enables ATS partners and hiring platforms to programmatically create and update employer profiles, retrieve and manage candidate applications, and synchronize job postings with Indeed''s employment ecosystem.


    Indeed''s native APIs use GraphQL via the `https://apis.indeed.com/graphql` endpoint. This OpenAPI specification represents a RESTful abstraction of the key employer-facing operations available through Indeed''s partner APIs, covering the Employer Data API, Retrieve Candidates API, and Job Sync API.


    **Authentication**: All API requests require OAuth 2.0 Bearer Token authentication. Partners must register through the Indeed Partner Console to obtain client credentials.


    **Rate Limits**: API calls are subject to rate limiting. Consult the Indeed Partner documentation for current rate limit policies.'
  version: 1.0.0
  contact:
    name: Indeed API Support
    url: https://docs.indeed.com/support/
    email: opensource@indeed.com
  license:
    name: Proprietary
    url: https://docs.indeed.com/legal-terms/developer-agreement
  termsOfService: https://www.indeed.com/legal/api-terms
  x-logo:
    url: https://www.indeed.com/images/indeed-logo.png
servers:
- url: https://apis.indeed.com
  description: Indeed Production API Server
security:
- BearerAuth: []
tags:
- name: Jobs
  description: Operations for creating, updating, expiring, and retrieving job postings on Indeed. Supports qualifications, working hours, salary, benefits, employer information, and Indeed Apply configuration.
paths:
  /v1/jobs:
    post:
      operationId: createJobPostings
      summary: Indeed Create Job Postings
      description: Creates one or more job postings on Indeed. Requires a job title, description, location, benefits, and job source details. The underlying Indeed API uses the createSourcedJobPostings GraphQL mutation. To update an existing job posting, submit the same jobPostingId and sourceName values that were used at creation time.
      tags:
      - Jobs
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateJobPostingInput'
            example:
              jobPostings:
              - jobPostingId: JOB-2024-001
                title: Senior Software Engineer
                description: We are looking for a Senior Software Engineer with 5+ years of experience in distributed systems...
                location:
                  city: Austin
                  state: TX
                  country: US
                salary:
                  minimumAmount: 120000
                  maximumAmount: 180000
                  currency: USD
                  period: YEARLY
                employmentType: FULL_TIME
                benefits:
                - type: HEALTH_INSURANCE
                - type: PAID_TIME_OFF
                - type: RETIREMENT_401K
                qualifications:
                - type: EXPERIENCE
                  description: 5+ years of software development experience
                  required: true
                - type: EDUCATION
                  description: Bachelor's degree in Computer Science or related field
                  required: false
                source:
                  sourceName: my-ats-platform
                employer:
                  id: ats-partner_employer-12345
      responses:
        '201':
          description: Job postings created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateJobPostingPayload'
        '400':
          description: Invalid input. One or more job postings failed validation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateJobPostingPayload'
        '401':
          description: Authentication credentials are missing or invalid.
        '403':
          description: Insufficient permissions to create job postings.
        '429':
          description: Rate limit exceeded.
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /v1/jobs/{jobPostingId}:
    get:
      operationId: getJobPosting
      summary: Indeed Retrieve a Job Posting
      description: Retrieves the details of a specific job posting by its unique identifier.
      tags:
      - Jobs
      parameters:
      - name: jobPostingId
        in: path
        required: true
        description: The unique identifier of the job posting.
        schema:
          type: string
        example: JOB-2024-001
      - name: sourceName
        in: query
        required: false
        description: The source name to scope the job posting lookup. Required when job posting IDs are not globally unique.
        schema:
          type: string
      responses:
        '200':
          description: Job posting retrieved successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobPosting'
        '401':
          description: Authentication credentials are missing or invalid.
        '404':
          description: Job posting not found.
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    put:
      operationId: updateJobPosting
      summary: Indeed Update a Job Posting
      description: Updates an existing job posting on Indeed. The same jobPostingId and sourceName that were used during creation must be provided. Uses the createSourcedJobPostings mutation with updated fields.
      tags:
      - Jobs
      parameters:
      - name: jobPostingId
        in: path
        required: true
        description: The unique identifier of the job posting to update.
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JobPosting'
      responses:
        '200':
          description: Job posting updated successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobPosting'
        '400':
          description: Invalid input.
        '401':
          description: Authentication credentials are missing or invalid.
        '404':
          description: Job posting not found.
        '429':
          description: Rate limit exceeded.
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    delete:
      operationId: expireJobPosting
      summary: Indeed Expire a Job Posting
      description: Expires (closes) a job posting on Indeed, removing it from active search results. This operation cannot be undone; a new job posting must be created to relist the position.
      tags:
      - Jobs
      parameters:
      - name: jobPostingId
        in: path
        required: true
        description: The unique identifier of the job posting to expire.
        schema:
          type: string
      - name: sourceName
        in: query
        required: true
        description: The source name used when the job posting was created.
        schema:
          type: string
      responses:
        '204':
          description: Job posting expired successfully.
        '401':
          description: Authentication credentials are missing or invalid.
        '404':
          description: Job posting not found.
        '429':
          description: Rate limit exceeded.
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /v1/employers/{employerId}/jobs:
    get:
      operationId: listEmployerJobPostings
      summary: Indeed List Job Postings for an Employer
      description: Retrieves a paginated list of job postings associated with a specific employer.
      tags:
      - Jobs
      parameters:
      - name: employerId
        in: path
        required: true
        description: The unique identifier of the employer.
        schema:
          type: string
      - name: status
        in: query
        required: false
        description: Filter job postings by status.
        schema:
          type: string
          enum:
          - ACTIVE
          - PAUSED
          - EXPIRED
          - CLOSED
      - name: after
        in: query
        required: false
        description: Cursor for forward pagination.
        schema:
          type: string
      - name: first
        in: query
        required: false
        description: Number of job postings to return (max 100).
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 25
      responses:
        '200':
          description: Job postings retrieved successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobPostingList'
        '401':
          description: Authentication credentials are missing or invalid.
        '404':
          description: Employer not found.
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  schemas:
    IndeedApplyConfig:
      type: object
      description: Configuration for Indeed Apply integration on the job posting.
      properties:
        enabled:
          type: boolean
          description: Whether Indeed Apply is enabled for this job posting.
          example: true
        postUrl:
          type: string
          format: uri
          description: The URL where Indeed sends application data when a candidate applies through Indeed Apply.
          example: https://www.example.com
        screenerQuestions:
          type: array
          description: Screener questions to present to candidates during application.
          items:
            $ref: '#/components/schemas/ScreenerQuestion'
          example: []
        eeoEnabled:
          type: boolean
          description: Whether EEO compliance questions are enabled. Available for US employers only.
          example: true
    JobLocation:
      type: object
      description: The location of the job.
      properties:
        streetAddress:
          type: string
          description: Street address of the job location.
          example: example_value
        city:
          type: string
          description: City where the job is located.
          example: Austin
        state:
          type: string
          description: State, province, or region.
          example: TX
        postalCode:
          type: string
          description: Postal or ZIP code.
          example: '78701'
        country:
          type: string
          description: ISO 3166-1 alpha-2 country code.
          example: US
        formattedAddress:
          type: string
          description: A human-readable formatted address string.
          example: Austin, TX 78701, US
    JobPostingList:
      type: object
      description: A paginated list of job postings.
      properties:
        jobPostings:
          type: array
          items:
            $ref: '#/components/schemas/JobPosting'
          example: []
        totalCount:
          type: integer
          description: Total number of job postings matching the query.
          example: 10
        pageInfo:
          $ref: '#/components/schemas/PageInfo'
    CreateJobPostingInput:
      type: object
      description: Input for creating one or more job postings on Indeed via the Job Sync API.
      required:
      - jobPostings
      properties:
        jobPostings:
          type: array
          items:
            $ref: '#/components/schemas/JobPosting'
          description: Array of job posting objects to create.
          example: []
    JobSource:
      type: object
      description: Information about the source system for the job posting, used to identify the originating ATS or job board.
      required:
      - sourceName
      properties:
        sourceName:
          type: string
          description: The name of the source system. Must remain consistent across all job postings from the same source.
          example: my-ats-platform
        sourceUrl:
          type: string
          format: uri
          description: The URL of the original job posting on the source system.
          example: https://www.example.com
    WorkingHours:
      type: object
      description: Working hours and schedule information for the position.
      properties:
        hoursPerWeek:
          type: number
          format: double
          description: Expected number of hours per week.
          example: 40
        schedule:
          type: string
          description: Description of the work schedule.
          example: Monday through Friday, 9 AM to 5 PM
        shiftType:
          type: string
          description: The type of shift.
          enum:
          - DAY
          - NIGHT
          - EVENING
          - ROTATING
          - FLEXIBLE
          example: DAY
    JobPosting:
      type: object
      description: A job posting on Indeed with all associated metadata including title, description, location, salary, benefits, qualifications, and application configuration.
      required:
      - jobPostingId
      - title
      - description
      - location
      properties:
        jobPostingId:
          type: string
          description: A unique identifier for the job posting within the source system. Used in combination with sourceName for upsert operations.
          example: JOB-2024-001
        title:
          type: string
          description: The title of the job posting. Maximum length of 75 characters.
          maxLength: 75
          example: Senior Software Engineer
        description:
          type: string
          description: The full description of the job posting including responsibilities, requirements, and other details. Must be between 30 and 20,000 characters.
          minLength: 30
          maxLength: 20000
          example: We are looking for a Senior Software Engineer to join our growing team...
        location:
          $ref: '#/components/schemas/JobLocation'
        salary:
          $ref: '#/components/schemas/Salary'
        benefits:
          type: array
          description: Benefits offered with the position.
          items:
            $ref: '#/components/schemas/Benefit'
          example: []
        qualifications:
          type: array
          description: Required or preferred qualifications for the position.
          items:
            $ref: '#/components/schemas/Qualification'
          example: []
        workingHours:
          $ref: '#/components/schemas/WorkingHours'
        employmentType:
          type: string
          description: The type of employment.
          enum:
          - FULL_TIME
          - PART_TIME
          - CONTRACT
          - TEMPORARY
          - INTERNSHIP
          - VOLUNTEER
          example: FULL_TIME
        remoteWorkPolicy:
          type: string
          description: The remote work policy for the position.
          enum:
          - ON_SITE
          - REMOTE
          - HYBRID
          example: HYBRID
        employer:
          type: object
          description: Reference to the employer posting this job.
          properties:
            id:
              type: string
              description: The employer's unique identifier on Indeed.
            employerName:
              type: string
              description: The employer's display name.
          example: example_value
        source:
          $ref: '#/components/schemas/JobSource'
        indeedApply:
          $ref: '#/components/schemas/IndeedApplyConfig'
        status:
          type: string
          description: The current status of the job posting on Indeed.
          enum:
          - ACTIVE
          - PAUSED
          - EXPIRED
          - CLOSED
          example: ACTIVE
        applicationUrl:
          type: string
          format: uri
          description: The URL where candidates can apply for the position.
          example: https://www.example.com
        createdAt:
          type: string
          format: date-time
          description: The timestamp when the job posting was created.
          example: '2026-01-15T10:30:00Z'
        updatedAt:
          type: string
          format: date-time
          description: The timestamp when the job posting was last updated.
          example: '2026-01-15T10:30:00Z'
        expiresAt:
          type: string
          format: date-time
          description: The timestamp when the job posting expires.
          example: '2026-01-15T10:30:00Z'
    Qualification:
      type: object
      description: A qualification required or preferred for the job position, such as education level, years of experience, certifications, or skills.
      properties:
        type:
          type: string
          description: The category of the qualification.
          enum:
          - EDUCATION
          - EXPERIENCE
          - CERTIFICATION
          - SKILL
          - LICENSE
          example: EXPERIENCE
        description:
          type: string
          description: Description of the qualification.
          example: 5+ years of software development experience
        required:
          type: boolean
          description: Whether this qualification is required or preferred.
          example: true
    Salary:
      type: object
      description: Salary or compensation details for the job posting.
      properties:
        minimumAmount:
          type: number
          format: double
          description: The minimum salary amount.
          example: 120000
        maximumAmount:
          type: number
          format: double
          description: The maximum salary amount.
          example: 180000
        currency:
          type: string
          description: ISO 4217 currency code.
          example: USD
        period:
          type: string
          description: The pay period for the salary.
          enum:
          - HOURLY
          - DAILY
          - WEEKLY
          - BIWEEKLY
          - MONTHLY
          - YEARLY
          example: YEARLY
    ScreenerQuestion:
      type: object
      description: A screener question configured on a job posting.
      properties:
        id:
          type: string
          description: Unique identifier for the screener question.
          example: abc123
        question:
          type: string
          description: The text of the question.
          example: Are you authorized to work in the United States?
        type:
          type: string
          description: The type of expected response.
          enum:
          - TEXT
          - BOOLEAN
          - SINGLE_SELECT
          - MULTI_SELECT
          - NUMERIC
          example: BOOLEAN
        required:
          type: boolean
          description: Whether the candidate must answer this question.
          example: true
        options:
          type: array
          description: Available options for select-type questions.
          items:
            type: string
          example: []
    PageInfo:
      type: object
      description: Pagination information for list responses.
      properties:
        hasNextPage:
          type: boolean
          description: Whether there are more results available.
          example: true
        hasPreviousPage:
          type: boolean
          description: Whether there are previous results available.
          example: true
        startCursor:
          type: string
          description: Cursor for the first item in the current page.
          example: example_value
        endCursor:
          type: string
          description: Cursor for the last item in the current page.
          example: example_value
    CreateJobPostingPayload:
      type: object
      description: Response payload from a job posting creation operation.
      properties:
        results:
          type: array
          items:
            type: object
            properties:
              jobPostingId:
                type: string
                description: The ID of the created or updated job posting.
              status:
                type: string
                enum:
                - CREATED
                - UPDATED
                - FAILED
              errors:
                type: array
                items:
                  $ref: '#/components/schemas/ApiError'
          example: []
        totalCreated:
          type: integer
          description: Total number of job postings successfully created.
          example: 10
        totalFailed:
          type: integer
          description: Total number of job postings that failed to create.
          example: 10
    ApiError:
      type: object
      description: An error returned by the Indeed API.
      properties:
        code:
          type: string
          description: A machine-readable error code.
          example: INVALID_INPUT
        message:
          type: string
          description: A human-readable description of the error.
          example: The employer name field is required.
        field:
          type: string
          description: The field that caused the error, if applicable.
          example: employerName
    Benefit:
      type: object
      description: A benefit offered with the job position.
      properties:
        type:
          type: string
          description: The type of benefit.
          enum:
          - HEALTH_INSURANCE
          - DENTAL_INSURANCE
          - VISION_INSURANCE
          - RETIREMENT_401K
          - PAID_TIME_OFF
          - PARENTAL_LEAVE
          - TUITION_REIMBURSEMENT
          - LIFE_INSURANCE
          - DISABILITY_INSURANCE
          - FLEXIBLE_SCHEDULE
          - REMOTE_WORK
          - RELOCATION_ASSISTANCE
          - EMPLOYEE_DISCOUNT
          - COMMUTER_BENEFITS
          - OTHER
          example: HEALTH_INSURANCE
        description:
          type: string
          description: Additional details about the benefit.
          example: A sample description.
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: OAuth 2.0 Bearer Token authentication. Obtain access tokens through the Indeed OAuth 2.0 authorization flow using your partner client credentials.
    OAuth2:
      type: oauth2
      description: Indeed OAuth 2.0 authentication for partner applications.
      flows:
        clientCredentials:
          tokenUrl: https://apis.indeed.com/oauth/v2/tokens
          scopes:
            employer_access: Access and manage employer data
            candidate_read: Read candidate and application data
            job_posting_write: Create and manage job postings
externalDocs:
  description: Indeed Partner Documentation
  url: https://docs.indeed.com/