v1

latestOpenAPI 3.1.02026-07-261770816.7 KB
Offers

List offers

Offers are the formal job offers extended to a candidate's application. Each offer belongs to one application and carries a status (Created, Accepted, Rejected, or Deprecated), a proposed start date, an optional opening_id, and a custom_fields map that holds compensation components (base pay, equity, bonus, etc.) alongside any other offer custom fields configured on the hiring plan. Greenhouse versions offers — changing the start date, opening, or a version-triggering custom field creates a new offer row with an incremented version for the same application; pass current_only=true to filter the list down to the latest version per application. Filter by parent with application_ids, job_ids, candidate_ids, or opening_ids; combine status=Accepted with the resolved_at filter as a hire-date filter. Offer approvals flow through a separate approval_flow — see /v3/approval_flows for status.

get/v3/offers

Query parameters

cursorstring

Cursor link for pagination from previous page response header. Do not use any other parameters when using this.

per_pageinteger

Number of results per page

idsinteger[]

Comma separated list

gtestring date-time
ltestring date-time
gtstring date-time
ltstring date-time
gtestring date-time
ltestring date-time
gtstring date-time
ltstring date-time
application_idsinteger[]

Comma separated list

job_idsinteger[]

Return only offers extended on applications attached to these job (hiring plan) ids. Matches the application's current job at the time the offer was generated.

candidate_idsinteger[]

Comma separated list

opening_idsinteger[]

Return only offers tied to these opening (headcount slot) ids. An offer is made against a specific opening on the job — use GET /v3/openings?job_ids=... to look ids up.

fieldsstring[]

Comma separated list of fields to return

current_onlyboolean

When true, returns only the latest version of each offer per application — superseded prior versions are excluded. Combine with application_ids or candidate_ids to retrieve the current offer for a specific application or candidate.

custom_field_option_idinteger

Return only offers whose offer custom field value selects this single-select or multi-select option id.

status'Created' | 'Accepted' | 'Rejected' | 'Deprecated'

Filter by offer status. Case-insensitive match against one of Created, Accepted, Rejected, or Deprecated (the status enum on the response).

gtestring date-time
ltestring date-time
gtstring date-time
ltstring date-time

Filter by the timestamp the offer was resolved (Accepted or Rejected). Pass any combination of gte, lte, gt, lt as ISO-8601 date-times (e.g. resolved_at[gte]=2026-01-01T00:00:00Z&resolved_at[lte]=2026-04-01T00:00:00Z). Useful as a hire-date filter alongside status=Accepted.

gtestring date
ltestring date
gtstring date
ltstring date

Filter by the date the offer was sent to the candidate. Pass any combination of gte, lte, gt, lt as ISO-8601 dates (e.g. sent_on[gte]=2026-01-01&sent_on[lte]=2026-04-01).

gtestring date
ltestring date
gtstring date
ltstring date

Filter by the candidate's proposed start date on the offer. Pass any combination of gte, lte, gt, lt as ISO-8601 dates (e.g. starts_on[gte]=2026-01-01&starts_on[lte]=2026-04-01).

Response

Successful

idinteger
created_atstring date-time
updated_atstring date-time
versioninteger

Revision number of this offer within its application. Greenhouse creates a new offer row (incrementing version) whenever a tracked field on an existing offer changes — typically starts_on, opening_id, or a custom field configured to trigger a new version. Pair with current_only=true to filter the list endpoint down to the latest version per application.

application_idinteger

Id of the application this offer is extended on. Every offer belongs to exactly one application; the offer is voided if the application is rejected or deleted.

job_idinteger

Id of the job this offer's application is on.

candidate_idinteger

Id of the candidate (person) receiving this offer. Resolved through the offer's application.

opening_idinteger nullable

Id of the specific opening this offer is being extended for. null when the offer has not yet been linked to an opening.

status'Created' | 'Accepted' | 'Rejected' | 'Deprecated'

Lifecycle status of the offer. Created for offers still being drafted or pending approval, Accepted once the candidate accepts, Rejected if declined or withdrawn, and Deprecated for superseded prior versions (a new offer version replaces an earlier one with this status).

starts_onstring date nullable

Candidate's proposed start date, in ISO 8601 (YYYY-MM-DD). null when no start date has been set on the offer.

sent_onstring date nullable

Date the offer was sent to the candidate, in ISO 8601 (YYYY-MM-DD). null until the offer has been sent.

resolved_atstring date-time nullable

Timestamp the offer was resolved (Accepted or Rejected), in ISO 8601. Date updates submitted through PATCH /v3/offers/{id} are normalized to noon UTC on the supplied date. null while the offer is still Created or has been superseded as Deprecated without a resolution.

custom_fieldsobject nullable