postPositionFromDraft.
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.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.
This will ensure that we do not contact you unnecessarily about errored job ads that eventually succeed in going live on SEEK, as it provides a common thread across all attempts to post that job ad.If your software has already posted a job ad with the same idempotencyId,
the SEEK API will return a PostPositionFromDraftPayload_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 idempotencyIds.
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 postPositionFromDraft mutation creates a new position opening and posts a PositionProfile in a single operation.mutation ($draftPositionProfileId: String!) {
postPositionFromDraft(draftPositionProfileId: $draftPositionProfileId) {
... on PostPositionFromDraftPayload_Success {
positionOpening {
documentId {
value
}
}
positionProfile {
profileId {
value
}
}
}
... on PostPositionFromDraftPayload_Conflict {
conflictingPositionOpening {
documentId {
value
}
}
conflictingPositionProfile {
profileId {
value
}
}
}
}
}BAD_USER_INPUT if the draft job ad is incomplete or contains invalid data.
In this case, your software should allow the hirer to return to the Enhanced Job Posting panel, passing in the draftPositionProfileId to allow them to correct any issues before attempting to post the job ad again.You will receive events for SEEK hirers you have a JobPosting relationship with.A PositionProfilePosted event is emitted when a job ad has been newly posted to the SEEK employment marketplace.
The PositionProfileUpdated event is emitted when an existing job ad is updated.In response to these events you can request fields from the position profile.
For example, you could query:positionUri field to provide a hirer with a link to the live job ad.postingInstructions.end field to retrieve the calculated end date if one wasn’t specified during posting.PositionProfilePosted event:{"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",
"expireDateTime": "2019-09-13T22:16:10.593Z"
}