> ## 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.

# List applications in a job stage

> Lists applications for one stage (default: applications / candidates). Fitment filter default strong,fair (excludes weak/not_a_fit); pass fitment=strong or fitment=strong,fair,weak. autoUnlock default true unlocks locked candidates on the page; autoUnlock=false returns only already-unlocked applications. Unlocks always run upstream (plan credits, download counts, events); only the sent stage counts against the workspace API unlock quota. Requires applications:read.



## OpenAPI

````yaml /openapi/public-api-v1.json get /jobs/{jobId}/applications
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/{jobId}/applications:
    get:
      tags:
        - Applications
      summary: List applications in a job stage
      description: >-
        Lists applications for one stage (default: applications / candidates).
        Fitment filter default strong,fair (excludes weak/not_a_fit); pass
        fitment=strong or fitment=strong,fair,weak. autoUnlock default true
        unlocks locked candidates on the page; autoUnlock=false returns only
        already-unlocked applications. Unlocks always run upstream (plan
        credits, download counts, events); only the sent stage counts against
        the workspace API unlock quota. Requires applications:read.
      operationId: listApplicationsOfJob
      parameters:
        - name: jobId
          in: path
          required: true
          schema:
            type: string
        - name: stageId
          in: query
          schema:
            type: string
          description: 'From GET /jobs/{jobId}/stages. Default: applications stage.'
        - name: fitment
          in: query
          schema:
            type: string
            default: strong,fair
          description: >-
            Comma-separated: strong, fair, weak. Default strong,fair. Rows with
            no fitment verdict are always included.
        - name: autoUnlock
          in: query
          schema:
            type: boolean
            default: true
          description: >-
            Default true: unlock locked candidates on the page. false: omit
            locked applications. API unlock quota applies only for the sent
            stage.
        - name: sort
          in: query
          schema:
            type: string
            enum:
              - relevance
              - recency
            default: relevance
        - $ref: '#/components/parameters/page'
        - $ref: '#/components/parameters/pageSizeLimited'
      responses:
        '200':
          description: Stage-wise applications page
          content:
            application/json:
              schema:
                type: object
                properties:
                  jobId:
                    type: string
                  stages:
                    type: array
                    items:
                      type: object
                      properties:
                        stageId:
                          type: string
                        stageType:
                          type: string
                          nullable: true
                        stageName:
                          type: string
                          nullable: true
                        applications:
                          type: array
                          items:
                            $ref: '#/components/schemas/ApplicationRow'
                  page:
                    type: integer
                  pageSize:
                    type: integer
                  totalCount:
                    type: integer
                  totalCountIsCapped:
                    type: boolean
                  fetchLimit:
                    type: integer
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  parameters:
    page:
      name: page
      in: query
      schema:
        type: integer
        default: 1
        minimum: 1
    pageSizeLimited:
      name: pageSize
      in: query
      schema:
        type: integer
        default: 10
        minimum: 1
        maximum: 20
      description: Results per page (default 10, max 20)
  schemas:
    ApplicationRow:
      type: object
      description: >-
        Application row: search-hit triage fields plus unlocked identity, resume
        URL, and screening Q&A.
      properties:
        applicationId:
          type: string
        jobId:
          type: string
        threadId:
          type: string
          nullable: true
        talentCardId:
          type: string
        addedToCurrentStageOn:
          type: string
          format: date-time
          nullable: true
        lastActivityOn:
          type: string
          format: date-time
          nullable: true
        relevance:
          type: object
          properties:
            shortlistingCriteriaScore:
              type: number
              nullable: true
            fitment:
              type: string
              nullable: true
              description: strong_fit | maybe_a_fit | not_a_fit
            fitmentReason:
              type: string
              nullable: true
        unlockedNow:
          type: boolean
          description: true when this call spent an unlock credit for this candidate
        headline:
          type: string
        experience:
          type: number
        locations:
          type: array
          items:
            type: string
        currentLocation:
          type: string
        currentCompany:
          type: string
        joiningAvailability:
          $ref: '#/components/schemas/JoiningAvailability'
        lastSeen:
          type: string
          format: date-time
          nullable: true
        currentSalary:
          type: number
        workHistory:
          type: array
          items:
            type: string
        education:
          type: array
          items:
            type: string
        profileSignals:
          $ref: '#/components/schemas/ProfileSignals'
        redactedResumeText:
          type: string
        displayName:
          type: string
        email:
          type: string
          nullable: true
        phone:
          type: string
          nullable: true
        originalResumeFileName:
          type: string
        originalResumeDownloadUrl:
          type: string
        screeningQuestions:
          type: array
          items:
            type: object
    JoiningAvailability:
      type: object
      description: >-
        Structured joining availability. status is immediate | on_notice_period
        | not_resigned (or null if unknown).
      properties:
        status:
          type: string
          nullable: true
          enum:
            - immediate
            - on_notice_period
            - not_resigned
            - null
        noticePeriodEndsOn:
          type: string
          format: date-time
          nullable: true
        canJoinHowSoonDays:
          type: number
          nullable: true
          description: Notice period length in days when status is not_resigned
    ProfileSignals:
      type: object
      description: >-
        AI-evaluated profile signals. Each scalar field is { score, level,
        reason } or null (null = not evaluated, not a negative signal).
      properties:
        educationPedigree:
          $ref: '#/components/schemas/ProfileSignal'
        workQuality:
          $ref: '#/components/schemas/ProfileSignal'
        careerGrowth:
          $ref: '#/components/schemas/ProfileSignal'
        startupExperience:
          $ref: '#/components/schemas/ProfileSignal'
        entrepreneurship:
          $ref: '#/components/schemas/ProfileSignal'
        jobTenure:
          $ref: '#/components/schemas/ProfileSignal'
        industryTags:
          type: array
          items:
            $ref: '#/components/schemas/IndustryTag'
    ApiError:
      type: object
      properties:
        error_code:
          type: string
        error_description:
          type: string
    ProfileSignal:
      type: object
      nullable: true
      properties:
        score:
          type: number
        level:
          type: string
        reason:
          type: string
          nullable: true
    IndustryTag:
      type: object
      properties:
        tag:
          type: string
        label:
          type: string
        score:
          type: number
        reason:
          type: string
          nullable: true
  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'
    NotFound:
      description: Resource not found
      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.

````