This content has been archived. It may contain guidance that is no longer relevant.
Any job ads posted via the Job Posting API cannot be managed by the SEEK API
and vice versa. We recommend a progressive rollout, moving hirers onto the
new integration with a clear distinction of job ads managed by the Job
Posting API versus the SEEK API.
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.Request
Copy
POST /advertisement
Host: 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.Request
Copy
PUT /advertisement/8e2fde50-bc5f-4a12-9cfb-812e50500184
Host: 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.Request
Copy
PATCH /advertisement/8e2fde50-bc5f-4a12-9cfb-812e50500184
Host: 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}
.RequestResponse
Copy
GET /advertisement/1c855f8d-86a9-44f4-b7ab-250e01ff8a77
Host: 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 {
seekAnzAdvertisementType
applicationMethods {
applicationUri {
url
}
}
brandingId
start
end
}
positionUri
}
}
GET
to /advertisement
.Request
Copy
GET /advertisement
Host: 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}
.Request
Copy
GET /advertisement?advertiserId=10000
Host: 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 |