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

# Getting a job offer

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

## Request

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

Returns the details of a specific job offer for the given application.

## Path parameters

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

## Response `200`

Job offer details

- JobOffer: Job offer resource
  - `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

## Other responses

- `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/:jobOfferId/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)
