PositionProfile object.Although most fields have equivalents in the SEEK API, their validation rules can diverge significantly.
For example, if a hirer isn’t configured to link out to an external apply form, the Job Posting API would silently ignore an applicationFormUrl while the SEEK API will respond with BAD_USER_INPUT.
You should test your SEEK API integration to ensure it still handles invalid or conflicting inputs correctly.Job Posting API field | Deprecated | PositionProfile field |
|---|---|---|
id | profileId.value | |
thirdParties.advertiserId | positionOrganizations[].id.value | |
thirdParties.agentId | ||
advertisementType | postingInstructions[].seekAnzAdvertisementType | |
jobTitle | positionTitle | |
searchJobTitle | ||
location.id + location.areaId | positionLocation[].id.value | |
subclassificationId | jobCategories[].id.value | |
workType | seekAnzWorkTypeCode | |
salary.type | offeredRemunerationPackage.basisCode | |
salary.minimum | offeredRemunerationPackage.ranges[].minimumAmount.value | |
salary.maximum | offeredRemunerationPackage.ranges[].maximumAmount.value | |
salary.details | offeredRemunerationPackage.descriptions | |
jobSummary | positionFormattedDescriptions[] (of description SearchSummary) | |
advertisementDetails | positionFormattedDescriptions[] (of description AdvertisementDetails) | |
contact | Contact details will be set under positionOpening | |
video.url | seekVideo.url | |
video.position | seekVideo.position | |
applicationEmail | Use Optimised Apply to programmatically retrieve candidate applications | |
applicationFormUrl | postingInstructions[].applicationMethods[].applicationUri.url | |
endApplicationUrl | ||
screenId | Use SEEK API questionnaires | |
jobReference | seekHirerJobReference | |
agentJobReference | seekBillingReference | |
template | ||
standout.logoId | Use postingInstructions[].brandingId | |
standout.brandingId | postingInstructions[].brandingId | |
bullets | positionFormattedDescriptions[] (of description SearchBulletPoint) | |
recruiter.fullName | positionOpening.postingRequester.personContacts.name.formattedName | |
recruiter.email | positionOpening.postingRequester.personContacts.communication.email.address | |
recruiter.teamName | ||
additionalProperties |
| |
expiryDate | postingInstructions[].end | |
state | State is now based on postingInstructions start and end dates. | |
creationId | postingInstructions[].idempotencyId; see idempotency |
Description | Job Posting API endpoint | SEEK API operation |
|---|---|---|
POST /advertisement | ||
PUT /advertisement/<id> | ||
PATCH /advertisement/<id> | ||
GET /advertisement/<id> | ||
GET /advertisement | Deprecated. Use webhooks to receive events when positions are posted. | |
GET /advertisement?advertiserId=<id> |
POST to /advertisement with a body of the job ad contents.POST /advertisementHost: adposting-integration.cloud.seek.com.au
{ "thirdParties": { "advertiserId": "seekAnzPublicTest:organization:seek:93WyyF1h" }, "advertisementType": "Classic", "jobTitle": "Associate Developer", "location": { "id": "seekAnzPublicTest:location:seek:QVS62e6K" }, "subclassificationId": "seekAnzPublicTest:jobCategory:seek:2EFstqFvP", "workType": "PartTime", "salary": { "type": "HourlyRate", "minimum": 70, "maximum": 85 }, "jobSummary": "Start your software development career with a dynamic & growing team", "advertisementDetails": "A newly created role for an ambitious <b>junior</b> or <b>graduate</b> developer. Be part of a great team in the Bendigo area.", "contact": { "name": "Mary Manager", "phone": "03 8517 4100", "email": "mary.manager@example.com" }, "creationId": "6eaeb58c-cc38-4b0e-8353-daa3011f1ece"}postPosition mutation with input of PostPositionInput.mutation ($input: PostPositionInput!) {
postPosition(input: $input) {
... on PostPositionPayload_Success {
positionOpening {
documentId {
value
}
}
positionProfile {
profileId {
value
}
}
}
... on PostPositionPayload_Conflict {
conflictingPositionProfile {
profileId {
value
}
}
conflictingPositionOpening {
documentId {
value
}
}
}
}
}PUT to /advertisement/{advertisementId} with a body of the job ad contents.PUT /advertisement/8e2fde50-bc5f-4a12-9cfb-812e50500184Host: adposting-integration.cloud.seek.com.au
{ "thirdParties": { "advertiserId": "seekAnzPublicTest:organization:seek:93WyyF1h" }, "advertisementType": "Premium", "jobTitle": "Lead Developer", "location": "seekAnzPublicTest:location:seek:QVS62e6K", "subclassificationId": "seekAnzPublicTest:jobCategory:seek:2EFstqFvP", "workType": "FullTime", "salary": { "type": "AnnualPackage", "minimum": 100000, "maximum": 130000, "details": "Up to $130k excluding super" }, "jobSummary": "Experienced software developer wanted to lead an existing team.", "advertisementDetails": "<p>Acme Inc is looking for an experienced software developer with management experience to lead their cloud transformation.</p><p>You should bring your passion for both technology and people to this exciting role.</p>", "standout": { "bullets": [ "Line management required", "Need experience with cloud deployments", "Competitive benefits packages" ] }, "video": { "url": "https://www.youtube.com/embed/Q3UvigPHCjI", "position": "Above" }}updatePostedPositionProfile mutation with input of UpdatePostedPositionProfileInput.mutation ($input: UpdatePostedPositionProfileInput!) {
updatePostedPositionProfile(input: $input) {
positionProfile {
profileId {
value
}
}
}
}PATCH to /advertisement/{advertisementId} with a body describing the field to modify.PATCH /advertisement/8e2fde50-bc5f-4a12-9cfb-812e50500184Host: adposting-integration.cloud.seek.com.au
[ { "op": "replace", "path": "state", "value": "Expired" }]end date specified in their posting instructions.
This can be provided when posting or updating a job ad.
SEEK strongly recommends using automatic closure instead of scheduled events within your software.While the updatePostedPositionProfile mutation mostly behaves like an HTTP PUT,
omitting the UpdatePostingInstructionInput.end field will preserve the existing end date like an HTTP PATCH.
See the documentation on updating a job ad in the Job Posting use case for more information.You can explicitly close job ads earlier using the GraphQL closePostedPositionProfile mutation with input of ClosePostedPositionProfileInput.mutation ($input: ClosePostedPositionProfileInput!) {
closePostedPositionProfile(input: $input) {
positionProfile {
profileId {
value
}
}
}
}GET to /advertisement/{advertisementId}.GET /advertisement/1c855f8d-86a9-44f4-b7ab-250e01ff8a77Host: adposting-integration.cloud.seek.com.au
positionProfile query with a required id input.query ($id: String!) {
positionProfile(id: $id) {
profileId {
value
}
positionOrganizations {
id {
value
}
name
seekAnzAdvertiserId
}
positionOpening {
postingRequester {
personContacts {
name {
formattedName
}
communication {
email {
address
}
}
}
}
}
positionTitle
positionLocation {
id {
value
}
name
}
jobCategories {
id {
value
}
name
}
positionFormattedDescriptions {
descriptionId {
value
}
content
}
seekHirerJobReference
seekAnzWorkTypeCode
offeredRemunerationPackage {
basisCode
ranges {
minimumAmount {
value
currency
}
maximumAmount {
value
currency
}
intervalCode
}
descriptions
}
seekVideo {
url
seekAnzPositionCode
}
postingInstructions {
seekAdvertisementProduct {
label
}
applicationMethods {
applicationUri {
url
}
}
brandingId
start
end
}
positionUri
}
}GET to /advertisement.GET /advertisementHost: adposting-integration.cloud.seek.com.au
positionOpenings query.You can also be notified when a job ad goes live with the PositionProfilePosted event, which is detailed in the next phase.Job Posting APIGET to /advertisement?advertiserId={advertiserID}.GET /advertisement?advertiserId=10000Host: adposting-integration.cloud.seek.com.au
positionOpenings query with a required hirerId input.
The positionOpenings query returns a paginated list of PositionOpening objects.
You can select fields from its nested PositionOpening.paginatedPositionProfiles to retrieve information about a subset of its job ads.query ($hirerId: String!) {
positionOpenings(hirerId: $hirerId) {
edges {
node {
statusCode
paginatedPositionProfiles {
edges {
node {
profileId {
value
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
}
pageInfo {
hasNextPage
endCursor
}
}
}Criteria | Description |
|---|---|
Existing integration maintained | Hirer can continue to manage jobs posted via the Job Posting API |
Job ad posted successfully | Hirer can successfully post a job ad via the SEEK API |
Job ad updated successfully | Hirer can successfully update a job ad via the SEEK API |
Job ad closed successfully | Hirer can successfully close a job ad via the SEEK API |
Job ad viewed successfully | Hirer can view job ad details via the SEEK API |
Job ads listed successfully | Hirer can see a list of their job ads posted via the SEEK API |