---
title: "Listing job offers"
method: GET
path: "/jobs/{jobId}/applications/{applicationId}/job-offers"
tags: ["Job Offers"]
---

# Listing job offers

`GET /jobs/{jobId}/applications/{applicationId}/job-offers`

## Request

- Base URL: `https://api.gupy.io/api/v1`
- URL: `https://api.gupy.io/api/v1/jobs/{jobId}/applications/{applicationId}/job-offers`
- Auth: HTTP bearer

Returns the list of job offers linked to a candidate application.
Each offer includes a `deliveries` array with the delivery history (channel, status, sentAt, createdAt).

## Path parameters

- `jobId` integer, required
- `applicationId` integer, required

## Query parameters

- `status` 'NOT_SENT' | 'SENT' | 'VIEWED' | 'ACCEPTED' | 'REJECTED' | 'CANCELED'
- `perPage` integer
- `page` integer

## Response `200`

A paginated list of job offers

- PaginatedJobOffer: A paginated list of job offers
  - `results` JobOffer[], required
    - `id` integer, required: Job offer ID
    - `jobId` integer, required: Job ID
    - `applicationId` integer, required: Application ID
    - `status` 'NOT_SENT' | 'SENT' | 'VIEWED' | 'ACCEPTED' | 'REJECTED' | 'CANCELED', required: Job offer status
    - `sentAt` string, date-time, nullable: Date when the offer was sent
    - `answeredAt` string, date-time, nullable: Date when the candidate answered the offer
    - `rejectReason` string, nullable: Reason provided when the offer was rejected
    - `salaryAmount` number, double, required: Proposed salary amount
    - `salaryCurrency` string, required: Salary currency symbol
    - `admissionDate` string, date-time, required: Planned admission date
    - `admissionType` 'employee_admission' | 'employee_readmission' | 'employee_reintegration' | 'unrelated_worker_hiring' | 'internal_transfer', required: Hiring type
    - `templateId` integer, required: Email template ID used as the offer body source
    - `body` string, required: Job offer body content with resolved placeholders
    - `createdAt` string, date-time, required: Creation date
    - `updatedAt` string, date-time, required: Last update date
    - `createdBy` string, nullable: Name of the user who created the offer
    - `candidatePortalUrl` string, uri, nullable: Candidate portal URL for the offer. Null when status is NOT_SENT or CANCELED.
    - `deliveries` JobOfferDelivery[], required: Delivery history for this job offer, ordered by createdAt ascending
      - `id` integer, required: Delivery ID
      - `channel` 'email' | 'whatsapp' | 'integration', required: Delivery channel
      - `status` 'SENDING' | 'SENT' | 'SEND_FAILED' | 'INVALID_RECIPIENT', required: Delivery status. Internal PROCESSING (worker claim) is exposed as SENDING.
      - `sentAt` string, date-time, nullable, required: Date when this delivery was successfully sent. Null while sending or on failure.
      - `createdAt` string, date-time, required: Delivery record creation date
  - `totalResults` integer, required
  - `page` integer, required
  - `totalPages` integer, required

## Other responses

- `400`: BadRequest / Invalid Input
- `401`: Unauthorized
- `403`: Forbidden
- `404`: NotFound / Resource not found

## Changes

- **2026-11-03** `b84c14658872`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/gupy/apis/gupy-public-api/changes/jobs/:jobId/applications/:applicationId/job-offers/get.md)

---

[API](https://skmtc.dev/gupy/apis/gupy-public-api.md) - [All operations](https://skmtc.dev/gupy/apis/gupy-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/gupy/apis/gupy-public-api/revisions/b84c14658872?raw)
