---
title: "Create Offer"
method: POST
path: "/api/v2/ats/offers"
tags: ["Offer"]
---

# Create Offer

`POST /api/v2/ats/offers`

Create a prefilled DRAFT offer for a candidate on a position. positionId and profileId are required; applicationId is optional -- when omitted, the candidate's latest application to the position is linked. The candidate must already have an application to the position; if they have none the request is rejected (advance the candidate into the position's pipeline first via the application-stages API). Field values are set in a separate PATCH /offers/ call (two-step create, mirroring the UI create -> intake-form flow). Returns the full created offer. If an offer already exists for the candidate+position, that existing offer is returned.

## Query parameters

- `prefill` boolean

## Headers

- `Authorization` string, required

## Request body

- OfferCreateSchema
  - `positionId` integer, required — job id. Accepts an integer or a numeric string.
  - `applicationId` integer, nullable — application id to link the offer to. If omitted, the candidate's latest application to the position is used.
  - `profileId` string, required — unique identifier for profile. Accepts the numeric profile id as a string or an encoded profile id; resolved to the numeric id OfferSchema returns as profileId.

## Response `200`

OK

- OfferSchema
  - `createdAt` integer, nullable — Timestamp of when the offer was created
  - `stockVestingFrequency` string, nullable — Stock vesting frequency
  - `versions` string[], nullable — All versions of the offer
  - `stockOptionsType` string, nullable — Type of stock options
  - `offerStatus` string, nullable — status of the offer
  - `profileId` string, nullable — unique identifier for profile
  - `candidateAddress` string, nullable — Candidate address
  - `currency` string, nullable — Currency for compensation
  - `version` string, nullable — Version of the offer
  - `groupId` string, nullable — group id
  - `relocationBonus` number, float, nullable — Relocation bonus amount
  - `jobTitle` string, nullable — Job title
  - `workplaceType` 'remote_global' | 'remote_local' | 'hybrid' | 'onsite', nullable — Workplace type. Possible values: ['remote_global', 'remote_local', 'hybrid', 'onsite']
  - `payGradeId` integer, nullable — Pay grade of the offer
  - `variableBonus` number, float, nullable — Variable bonus amount
  - `note` string, nullable — Additional notes
  - `customInfo` object, nullable — Custom info
  - `jobLocation` string, nullable — Job location
  - `bonusPayFrequency` string, nullable — Bonus pay frequency
  - `joiningDate` string, nullable — Joining date
  - `offerId` integer, nullable — Offer id
  - `templateId` integer, nullable — Template id of the template used to create the offer
  - `countryCode` string, nullable — Country code
  - `offerLetter` object, nullable — Offer letter details
  - `stockOptionsDescription` string, nullable — Stock options description
  - `candidateEmail` string, nullable — Candidate email address
  - `visaType` string, nullable — Visa type
  - `isPeopleManagerRole` boolean, nullable — Whether this is a people manager role
  - `stockOptionsTotalVestingYears` integer, nullable — Total years for stock options vesting
  - `isRehire` boolean, nullable — Whether this is a rehire
  - `watchers` string[], nullable — Watchers
  - `updatedAt` integer, nullable — Timestamp of when the offer was last updated
  - `salaryAmount` number, float, nullable — Base salary amount
  - `shiftAllowance` number, float, nullable — Shift allowance amount
  - `stockOptionsAmount` number, float, nullable — Stock options amount
  - `totalCompensation` number, float, nullable — Total compensation amount
  - `createdBy` string, nullable — User email who created the offer
  - `basePayFrequency` string, nullable — Base pay frequency
  - `candidateFullName` string, nullable — Candidate full name
  - `joiningBonus` number, float, nullable — Joining bonus amount
  - `stockOptionsPercentageVesting` string, nullable — Stock options vesting percentage
  - `positionId` integer, nullable — job id
  - `stockVestingStartDate` string, nullable — Stock vesting start date
  - `applicationId` integer, nullable — application id

---

[API](https://skmtc.net/eightfold/apis/api-server-v2-service-service.md) · [All operations](https://skmtc.net/eightfold/apis/api-server-v2-service-service/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/eightfold/api-server-v2-service-service/versions/0fb26f4e41bf/schema)
