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

# List job offers

> Retrieve a paginated list of offers extended to candidates, with the job, client company, person, status, key dates, offer compensation, owners (team members credited on the offer), and client contacts attached to the offer.

**Filters**: `job_id`, `candidate_id`, `person_id`, `job_offer_status_id`, `status_type` (pending, accepted, rejected, rescinded), and `extended_date_after` / `extended_date_before` (ISO 8601 date range).

**Sorting**: `sort_by` (created_at, updated_at, extended_date, accepted_date, candidate_start_date) with `sort_order` (asc/desc, default desc).

**Pagination**: Use `offset` and `limit` query params (max 100 per page).

**Access**: Session and OAuth callers need `org:reports:offer_tracking` (`org:admin` bypasses). API keys need the `offers:read` scope. Compensation fields (`compensation_*`, `bonus_type`, equity grants, `relocation_bonus`, `sign_on_bonus`, `total_estimated_compensation`) are omitted for API keys without `compensation:read`.

Offers on jobs the caller cannot access are not returned.



## OpenAPI

````yaml /api-reference/openapi-v1.json get /v1/job-offers
openapi: 3.1.0
info:
  title: Stardex API (v1)
  version: 1.0.0
  description: >-
    Stardex ATS API — manage candidates, jobs, companies, and recruiting
    workflows.
servers:
  - url: https://api.stardex.ai
    description: Production API server
security:
  - bearerAuth: []
tags:
  - name: Persons
    description: Manage person records — contacts, work history, and custom fields.
  - name: Jobs
    description: Manage job postings — pipeline stages, team members, and custom fields.
  - name: Candidates
    description: Manage candidate records and pipeline stage transitions.
  - name: Companies
    description: Browse and retrieve company records.
  - name: Lists
    description: Create, search, and retrieve saved person and company lists.
  - name: Person Activities
    description: Create and manage activity records (notes, emails, meetings) for persons.
  - name: Team Members
    description: List team members for use in search filters and assignments.
  - name: Custom Fields
    description: Retrieve custom field definitions and tag options for search filters.
paths:
  /v1/job-offers:
    get:
      tags:
        - Job Offers
      summary: List job offers
      description: >-
        Retrieve a paginated list of offers extended to candidates, with the
        job, client company, person, status, key dates, offer compensation,
        owners (team members credited on the offer), and client contacts
        attached to the offer.


        **Filters**: `job_id`, `candidate_id`, `person_id`,
        `job_offer_status_id`, `status_type` (pending, accepted, rejected,
        rescinded), and `extended_date_after` / `extended_date_before` (ISO 8601
        date range).


        **Sorting**: `sort_by` (created_at, updated_at, extended_date,
        accepted_date, candidate_start_date) with `sort_order` (asc/desc,
        default desc).


        **Pagination**: Use `offset` and `limit` query params (max 100 per
        page).


        **Access**: Session and OAuth callers need `org:reports:offer_tracking`
        (`org:admin` bypasses). API keys need the `offers:read` scope.
        Compensation fields (`compensation_*`, `bonus_type`, equity grants,
        `relocation_bonus`, `sign_on_bonus`, `total_estimated_compensation`) are
        omitted for API keys without `compensation:read`.


        Offers on jobs the caller cannot access are not returned.
      operationId: listJobOffers
      parameters:
        - schema:
            type:
              - integer
              - 'null'
            minimum: 0
            default: 0
            description: Records to skip for pagination. Defaults to 0.
          required: false
          name: offset
          in: query
        - schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 100
            description: Max records per page (1–100). Defaults to 100.
          required: false
          name: limit
          in: query
        - schema:
            type: string
            format: uuid
            description: Only return offers for this job.
          required: false
          name: job_id
          in: query
        - schema:
            type: string
            format: uuid
            description: >-
              Only return offers for this candidate record (a person on a
              specific job).
          required: false
          name: candidate_id
          in: query
        - schema:
            type: string
            format: uuid
            description: Only return offers made to this person, across all jobs.
          required: false
          name: person_id
          in: query
        - schema:
            type: string
            format: uuid
            description: >-
              Only return offers in this status. Get status IDs from GET
              /v1/job-offers/statuses.
          required: false
          name: job_offer_status_id
          in: query
        - schema:
            type: string
            enum:
              - pending
              - accepted
              - rejected
              - rescinded
            description: >-
              Only return offers whose status belongs to this lifecycle
              category: `pending`, `accepted`, `rejected`, or `rescinded`.
          required: false
          name: status_type
          in: query
        - schema:
            type: string
            description: >-
              Return offers extended at or after this timestamp (ISO 8601).
              Example: `2026-04-01T00:00:00Z`.
          required: false
          name: extended_date_after
          in: query
        - schema:
            type: string
            description: >-
              Return offers extended at or before this timestamp (ISO 8601).
              Example: `2026-04-30T23:59:59Z`.
          required: false
          name: extended_date_before
          in: query
        - schema:
            type: string
            enum:
              - created_at
              - updated_at
              - extended_date
              - accepted_date
              - candidate_start_date
            default: created_at
            description: >-
              Column to sort results by. Defaults to `created_at`. Offers with
              no value for the chosen date sort last.

              - `created_at` — when the offer was recorded

              - `updated_at` — when the offer was last changed

              - `extended_date` — when the offer was extended to the candidate

              - `accepted_date` — when the candidate accepted

              - `candidate_start_date` — when the candidate is expected to start
          required: false
          name: sort_by
          in: query
        - schema:
            type: string
            enum:
              - asc
              - desc
            default: desc
            description: Sort direction. Defaults to `desc` (newest first).
          required: false
          name: sort_order
          in: query
      responses:
        '200':
          description: Job offers fetched
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobOffersListResponse'
              example:
                success: true
                data:
                  - id: 7e8f9012-3456-4789-a012-bcdef0123456
                    job_id: 1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d
                    job_name: VP of Engineering
                    job_company_id: 2b3c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d6e
                    job_company_name: Acme Corp
                    candidate_id: 3c4d5e6f-7a8b-4c9d-8e1f-2a3b4c5d6e7f
                    person_id: 4d5e6f7a-8b9c-4d0e-9f2a-3b4c5d6e7f8a
                    person_name: Jordan Lee
                    status:
                      id: 5e6f7a8b-9c0d-4e1f-8a3b-4c5d6e7f8a9b
                      name: Accepted
                      color: '#22c55e'
                      status_type: accepted
                    owners:
                      - id: 6f7a8b9c-0d1e-4f2a-9b4c-5d6e7f8a9b0c
                        name: Jane Smith
                        first_name: Jane
                        last_name: Smith
                        image_url: https://img.clerk.com/jane-smith.png
                    client_contacts:
                      - id: 7a8b9c0d-1e2f-4a3b-8c5d-6e7f8a9b0c1d
                        person_id: 8b9c0d1e-2f3a-4b4c-9d6e-7f8a9b0c1d2e
                        name: Morgan Patel
                        first_name: Morgan
                        last_name: Patel
                        image_url: https://media.example.com/morgan-patel.jpg
                    extended_date: '2026-04-02T00:00:00.000Z'
                    accepted_date: '2026-04-09T00:00:00.000Z'
                    candidate_start_date: '2026-05-04T00:00:00.000Z'
                    compensation_currency: USD
                    compensation_base: 285000
                    compensation_bonus: 20
                    bonus_type: percent
                    annual_equity_grant_percent: null
                    annual_equity_grant_amount: 50000
                    initial_equity_grant_percent: 0.25
                    initial_equity_grant_amount: 400000
                    relocation_bonus: 15000
                    sign_on_bonus: 25000
                    total_estimated_compensation: 392000
                    note: Accepted after a second-round counter on base.
                    created_at: '2026-04-02T15:20:00.000Z'
                    updated_at: '2026-04-09T18:05:00.000Z'
                meta:
                  total: 12
                  offset: 0
                  limit: 20
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                      - false
                    description: Always false for error responses.
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: >-
                          Machine-readable error code (e.g. "VALIDATION_ERROR",
                          "NOT_FOUND").
                      message:
                        type: string
                        description: Human-readable error description.
                    required:
                      - code
                      - message
                required:
                  - success
                  - error
        '403':
          description: Caller lacks permission to view job offers
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                      - false
                    description: Always false for error responses.
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: >-
                          Machine-readable error code (e.g. "VALIDATION_ERROR",
                          "NOT_FOUND").
                      message:
                        type: string
                        description: Human-readable error description.
                    required:
                      - code
                      - message
                required:
                  - success
                  - error
        '404':
          description: Resource not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                      - false
                    description: Always false for error responses.
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: >-
                          Machine-readable error code (e.g. "VALIDATION_ERROR",
                          "NOT_FOUND").
                      message:
                        type: string
                        description: Human-readable error description.
                    required:
                      - code
                      - message
                required:
                  - success
                  - error
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                      - false
                    description: Always false for error responses.
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: >-
                          Machine-readable error code (e.g. "VALIDATION_ERROR",
                          "NOT_FOUND").
                      message:
                        type: string
                        description: Human-readable error description.
                    required:
                      - code
                      - message
                required:
                  - success
                  - error
components:
  schemas:
    JobOffersListResponse:
      type: object
      properties:
        success:
          type: boolean
          enum:
            - true
        data:
          type: array
          items:
            $ref: '#/components/schemas/JobOfferListItem'
        meta:
          type: object
          properties:
            total:
              type: number
              description: Total matching records across all pages.
            offset:
              type: number
              description: Current pagination offset.
            limit:
              type: number
              description: Page size used for this request.
          required:
            - total
            - offset
            - limit
      required:
        - success
        - data
        - meta
    JobOfferListItem:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Offer UUID.
        job_id:
          type: string
          format: uuid
          description: Job UUID.
        job_name:
          type:
            - string
            - 'null'
          description: Job title.
        job_company_id:
          type:
            - string
            - 'null'
          format: uuid
          description: Client company UUID for the job.
        job_company_name:
          type:
            - string
            - 'null'
          description: Client company name for the job.
        candidate_id:
          type: string
          format: uuid
          description: Candidate record UUID (the person on this job).
        person_id:
          type:
            - string
            - 'null'
          format: uuid
          description: UUID of the person who received the offer.
        person_name:
          type:
            - string
            - 'null'
          description: Name of the person who received the offer.
        status:
          type:
            - object
            - 'null'
          properties:
            id:
              type: string
              format: uuid
              description: Offer status UUID.
            name:
              type: string
              description: Status name (e.g. "Verbal Accept").
            color:
              type:
                - string
                - 'null'
              description: Hex color code.
            status_type:
              type: string
              enum:
                - pending
                - accepted
                - rejected
                - rescinded
              description: >-
                Lifecycle category of the status: pending, accepted, rejected,
                or rescinded.
          required:
            - id
            - name
            - color
            - status_type
          description: Current offer status. Null if no status is set.
        owners:
          type: array
          items:
            $ref: '#/components/schemas/JobOfferOwner'
          description: >-
            Team members credited on the offer, in the order they were added.
            Empty if none.
        client_contacts:
          type: array
          items:
            $ref: '#/components/schemas/JobOfferClientContact'
          description: >-
            Client contacts attached to the offer, in the order they were added.
            Deleted contacts are omitted. Empty if none.
        extended_date:
          type:
            - string
            - 'null'
          description: ISO 8601 date the offer was extended.
        accepted_date:
          type:
            - string
            - 'null'
          description: ISO 8601 date the offer was accepted.
        candidate_start_date:
          type:
            - string
            - 'null'
          description: ISO 8601 anticipated start date.
        compensation_currency:
          type:
            - string
            - 'null'
          description: >-
            ISO 4217 currency code. Omitted for API-key callers without the
            `compensation:read` scope.
        compensation_base:
          type:
            - number
            - 'null'
          description: >-
            Base salary offered. Omitted for API-key callers without the
            `compensation:read` scope.
        compensation_bonus:
          type:
            - number
            - 'null'
          description: >-
            Bonus offered: a cash amount or a percentage of base, per
            `bonus_type`. Omitted for API-key callers without the
            `compensation:read` scope.
        bonus_type:
          type:
            - string
            - 'null'
          enum:
            - fixed
            - percent
          description: >-
            Whether `compensation_bonus` is a fixed amount or a percent of base.
            Omitted for API-key callers without the `compensation:read` scope.
        annual_equity_grant_percent:
          type:
            - number
            - 'null'
          description: >-
            Annual equity grant, as a percent. Omitted for API-key callers
            without the `compensation:read` scope.
        annual_equity_grant_amount:
          type:
            - number
            - 'null'
          description: >-
            Annual equity grant amount. Omitted for API-key callers without the
            `compensation:read` scope.
        initial_equity_grant_percent:
          type:
            - number
            - 'null'
          description: >-
            Initial equity grant, as a percent. Omitted for API-key callers
            without the `compensation:read` scope.
        initial_equity_grant_amount:
          type:
            - number
            - 'null'
          description: >-
            Initial equity grant amount. Omitted for API-key callers without the
            `compensation:read` scope.
        relocation_bonus:
          type:
            - number
            - 'null'
          description: >-
            Relocation bonus amount. Omitted for API-key callers without the
            `compensation:read` scope.
        sign_on_bonus:
          type:
            - number
            - 'null'
          description: >-
            One-time sign-on bonus amount. Omitted for API-key callers without
            the `compensation:read` scope.
        total_estimated_compensation:
          type:
            - number
            - 'null'
          description: >-
            Total estimated compensation. Omitted for API-key callers without
            the `compensation:read` scope.
        note:
          type:
            - string
            - 'null'
          description: Offer notes.
        created_at:
          type: string
          description: ISO 8601 creation timestamp.
        updated_at:
          type: string
          description: ISO 8601 last update timestamp.
      required:
        - id
        - job_id
        - job_name
        - job_company_id
        - job_company_name
        - candidate_id
        - person_id
        - person_name
        - status
        - owners
        - client_contacts
        - extended_date
        - accepted_date
        - candidate_start_date
        - note
        - created_at
        - updated_at
    JobOfferOwner:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Team member UUID. Matches IDs from GET /v1/team-members.
        name:
          type:
            - string
            - 'null'
          description: Team member full name.
        first_name:
          type:
            - string
            - 'null'
          description: Team member first name.
        last_name:
          type:
            - string
            - 'null'
          description: Team member last name.
        image_url:
          type:
            - string
            - 'null'
          description: Team member profile image URL.
      required:
        - id
        - name
        - first_name
        - last_name
        - image_url
    JobOfferClientContact:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: >-
            Client contact UUID (`client_contacts.id`), not the junction-row
            UUID.
        person_id:
          type:
            - string
            - 'null'
          format: uuid
          description: >-
            UUID of the person this contact represents. Use GET /v1/persons/{id}
            for contact details.
        name:
          type:
            - string
            - 'null'
          description: Contact's full name.
        first_name:
          type:
            - string
            - 'null'
          description: Contact's first name.
        last_name:
          type:
            - string
            - 'null'
          description: Contact's last name.
        image_url:
          type:
            - string
            - 'null'
          description: Contact's profile image URL.
      required:
        - id
        - person_id
        - name
        - first_name
        - last_name
        - image_url
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Authenticate with a Bearer token: API key, OAuth token, or session
        token.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.