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.
A unique
idempotencyId
needs to be provided as an input to each job posting mutation.
An idempotencyId
should be randomly generated before executing the mutation, and an identical mutation input should be provided for all subsequent retries.
Using the same idempotencyId
with differing mutation inputs can lead to unexpected behaviour.In scenarios where your software needs to retry a job posting mutation due to an error, the use of an
idempotencyId
removes the risk of accidentally posting duplicate job ads.
If your software has already posted a job ad with the same idempotencyId
, a PostPositionPayload_Conflict
or PostPositionProfileForOpeningPayload_Conflict
payload will be returned.
Your identifiers are isolated and will not conflict with those generated by other recruitment software providers.Refer to the Mutation conflicts section for details on the differences between success and conflict payloads, and how they can be handled.
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"
}