> ## Documentation Index
> Fetch the complete documentation index at: https://developers.cutshort.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Post a job

> Creates a fully configured job from minimal input: skills/tags derived from the JD, screening questionnaire auto-attached, and auto-outreach to matching candidates enabled. After posting, the job is reviewed and then goes live — typically ~30 minutes on business days; matching-candidate outreach starts once approved. Key requirement importance is honoured exactly as sent — we strongly recommend at most 3 `must_have` items (over-tight configs shrink outreach reach).

Requires scope `jobs:write` (production keys). Rate limits: 5 createJob + 120 global requests per 60s per API key.



## OpenAPI

````yaml /openapi/public-api-v1.json post /jobs
openapi: 3.1.0
info:
  title: Cutshort Public API v1
  version: 1.0.0
  description: >-
    Programmatic access to Cutshort's tech talent database. All endpoints
    require `Authorization: Bearer cs_live_<key>`.


    **Core flow:** search candidates → get candidate details (auto-unlock) →
    post a job → invite to apply (first contact) → list applications → send
    message (in-thread follow-up).
servers:
  - url: https://cutshort.io/api/v1
    description: Production
security:
  - ApiKeyAuth: []
tags:
  - name: Search
    description: Talent database search
  - name: Candidates
    description: Candidate detail with auto-unlock (contact info + resume)
  - name: Jobs
    description: Job posting and listing
  - name: Outreach
    description: >-
      Candidate outreach: first-contact invite to apply, and in-thread follow-up
      messages
  - name: Usage
    description: Cycle usage meters and quotas
  - name: Stages
    description: Job pipeline stages and counts
  - name: Applications
    description: List applications and move them between pipeline stages
paths:
  /jobs:
    post:
      tags:
        - Jobs
      summary: Post a job
      description: >-
        Creates a fully configured job from minimal input: skills/tags derived
        from the JD, screening questionnaire auto-attached, and auto-outreach to
        matching candidates enabled. After posting, the job is reviewed and then
        goes live — typically ~30 minutes on business days; matching-candidate
        outreach starts once approved. Key requirement importance is honoured
        exactly as sent — we strongly recommend at most 3 `must_have` items
        (over-tight configs shrink outreach reach).


        Requires scope `jobs:write` (production keys). Rate limits: 5 createJob
        + 120 global requests per 60s per API key.
      operationId: createJob
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - title
                - remoteType
                - experienceRange
                - salaryRange
                - jobDescription
              properties:
                title:
                  type: string
                  maxLength: 80
                  example: Senior Data Engineer
                remoteType:
                  type: string
                  enum:
                    - remote_only
                    - remote_okay
                    - remote_not_okay
                  description: locations is required unless remote_only
                roleType:
                  type: string
                  enum:
                    - full_time
                    - internship
                  default: full_time
                teamId:
                  type: string
                  description: >-
                    Optional team to create the job under; defaults to your
                    first team in the workspace
                hideSalary:
                  type: boolean
                  default: false
                  description: Hide the salary range on the public job page
                mandatorySkillsMatchType:
                  type: string
                  enum:
                    - any
                    - all
                  default: any
                  description: >-
                    How derived must-have skills gate matching: any = match any
                    of them; all = match all of them. Defaults to any when
                    omitted (same as the job-setup UI).
                locations:
                  type: array
                  items:
                    type: string
                  maxItems: 5
                  description: Plain city names, canonicalized server-side
                  example:
                    - Bangalore
                    - Pune
                experienceRange:
                  type: object
                  required:
                    - min
                    - max
                  properties:
                    min:
                      type: number
                    max:
                      type: number
                  description: Years of experience
                salaryRange:
                  type: object
                  required:
                    - min
                    - max
                  properties:
                    min:
                      type: number
                    max:
                      type: number
                  description: INR per annum (2500000 = 25 LPA)
                jobDescription:
                  type: string
                  maxLength: 20000
                keyRequirements:
                  type: array
                  maxItems: 8
                  description: >-
                    Optional; defaults generated from the JD when omitted.
                    Importance honoured as sent; strongly recommend at most 3
                    must_have.
                  items:
                    type: object
                    required:
                      - requirement
                    properties:
                      requirement:
                        type: string
                        maxLength: 300
                      importance:
                        type: string
                        enum:
                          - must_have
                          - nice_to_have
                        default: nice_to_have
      responses:
        '200':
          description: >-
            Job created and submitted for review. Goes live after review —
            typically ~30 minutes on business days.
          content:
            application/json:
              schema:
                type: object
                properties:
                  jobId:
                    type: string
                  publicUrl:
                    type: string
                    nullable: true
                  status:
                    type: string
                    example: submitted_for_review
                  title:
                    type: string
                  remoteType:
                    type: string
                  roleType:
                    type: string
                  locations:
                    type: array
                    items:
                      type: string
                  skills:
                    type: array
                    items:
                      type: string
                    description: Derived skill taxonomy codes
                  mandatorySkills:
                    type: array
                    items:
                      type: string
                  mandatorySkillsMatchType:
                    type: string
                    enum:
                      - any
                      - all
                    description: Applied must-have skills match mode (defaults to any)
                  keyRequirements:
                    type: array
                    items:
                      type: object
                      properties:
                        requirement:
                          type: string
                        importance:
                          type: string
                  screeningQuestionnaire:
                    type: object
                    properties:
                      attached:
                        type: boolean
                      questionCount:
                        type: integer
                  autoITA:
                    type: object
                    properties:
                      enabled:
                        type: boolean
                      savedSearchId:
                        type: string
                        nullable: true
        '400':
          description: Validation / location / team error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '502':
          description: Upstream job creation failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiError'
components:
  schemas:
    ApiError:
      type: object
      properties:
        error_code:
          type: string
        error_description:
          type: string
  responses:
    Unauthorized:
      description: Missing or invalid API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    Forbidden:
      description: Insufficient scope (e.g. eval key calling a production-only endpoint)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    TooManyRequests:
      description: >-
        Rate limit (error_code `rate_limit_exceeded`, `Retry-After` header) or
        cycle quota exhausted (`api_unlock_limit_reached`,
        `api_search_limit_reached`, `api_message_limit_reached`,
        `search_throttled`). Check GET /usage for used/limit.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      description: >-
        Workspace-scoped API key. Prefix: `cs_live_`. Eval keys (self-serve from
        Cutshort → Settings → Integrations → API Key) can search and get
        candidate details within small quotas; production keys add job posting
        and candidate messaging with higher limits.

````