The SEEK API surfaces two mutations to post job ads,
postPosition
and postPositionProfileForOpening
.
Posting typically takes less than a minute after which a PositionProfilePosted
event will be emitted.Job ads on SEEK have a maximum period of 30 days.
Your software must allow hirers to advertise a job on SEEK for this full period.
Requests that carry a job posting mutation must be idempotent .
This removes the risk of unintentionally posting duplicate job ads when your software needs to retry a request due to an error.
A unique
idempotencyId
is required when posting a job ad.
We recommend that you generate a new v4 UUID before sending the first request to post each job ad, and to reuse that identifier on all subsequent retries of the same job ad.If your software has already posted a job ad with the same
idempotencyId
,
the SEEK API will return a PostPositionPayload_Conflict
or PostPositionProfileForOpeningPayload_Conflict
result in accordance with our mutation conflict convention.
If your software was retrying a job posting request,
you can treat the conflict result as a success as it indicates the job ad has already been posted.
See the code samples below for practical examples of these conflict results.The SEEK API deduplicates job ads posted by your software based on their
idempotencyId
s.
Your software should never reuse an idempotencyId
when posting a different job ad;
this may result in subsequent job ads being missed or other unexpected behaviour.
Your identifiers are isolated and will not conflict with those generated by other recruitment software providers.The following sample mutations are provided for demonstration purposes only;
they are not executable in the Playground environment.
You should use your live partner credentials to post a job ad under your unsearchable SEEK test hirer for end-to-end testing.
The
postPosition
mutation creates a new position opening and posts a PositionProfile
in a single operation.mutation ($input: PostPositionInput!) {
postPosition(input: $input) {
... on PostPositionPayload_Success {
positionOpening {
documentId {
value
}
}
positionProfile {
profileId {
value
}
}
}
... on PostPositionPayload_Conflict {
conflictingPositionOpening {
documentId {
value
}
}
conflictingPositionProfile {
profileId {
value
}
}
}
}
}
The
postPositionProfileForOpening
mutation posts a new PositionProfile
within an existing position opening.A single position opening can contain a maximum of 300 position profiles.
Once a position profile has been posted it will remain in the position opening until 180 days after its close date.
mutation ($input: PostPositionProfileForOpeningInput!) {
postPositionProfileForOpening(input: $input) {
... on PostPositionProfileForOpeningPayload_Success {
positionProfile {
profileId {
value
}
}
}
... on PostPositionProfileForOpeningPayload_Conflict {
conflictingPositionProfile {
profileId {
value
}
}
}
}
}
You will receive a
FORBIDDEN
error if the hirer in positionOrganizations
does not match the PostingRequester.id
of the existing position opening.PositionProfilePosted
events are emitted when job ads have been posted on the SEEK job board.
You will receive events for SEEK hirers you have a JobPosting
relationship with at the time of posting.In response to these events you can request fields from the position profile.
For example, you could query:
- The
positionUri
field to provide a hirer with a link to the live job ad. - The
postingInstructions.end
field to retrieve the calculated end date if one wasn’t specified during posting.
This is an example of a webhook body containing a
PositionProfilePosted
event:JSON
Copy
{
"events": [
{
"id": "seekAnzPublicTest:event:events:UeFHntCu5giQh9Z6CRc2J7",
"type": "PositionProfilePosted",
"createDateTime": "2019-08-20T21:02:24.611Z",
// This can be passed to the `positionProfile` query
"positionProfileId": "seekAnzPublicTest:positionProfile:jobAd:26d9DVAzs",
// This is only available for signed webhook subscriptions
"hirerId": "seekAnzPublicTest:organization:seek:93WyyF1h"
}
],
"subscriptionId": "seekAnzPublicTest:webhookSubscription:events:Kyak8JfPKhHCAXM2s9b9wX",
"url": "https://example.com/1/2/3"
}