This content has been archived. It may contain guidance that is no longer relevant.
The retired Job Posting API had a REST-based interface for managing SEEK job ads.
The SEEK API allows you to manage SEEK job ads through GraphQL queries and mutations.
The following documentation compares examples of each type of action (create, update, expire and get) in the Job Posting API with the equivalent in the SEEK API.
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.
There are two recommended ways of scaling usage of the SEEK API to all of your SEEK hirers.
Recruitment software often has the ability to post job ads to multiple job boards at the same time for a single job requisition.
If this applies to your software, you can create an entirely new job board and integration for the SEEK API.
This also facilitates the creation of a new user experience to match up with any new value propositions within the SEEK API.
If you would like to maintain your current integration patterns and migrate to use the SEEK API, build your new SEEK API integration to be run in parallel with your Job Posting API integration, not for a direct changeover.
New jobs will be posted and managed via the SEEK API, while older jobs will continue to use the Job Posting API integration until they are closed.
There is currently no method of migrating jobs posted via the Job Posting API to the SEEK API.
This table compares the data structures of a job ad in the Job Posting API with 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 |
The SEEK API has a number of equivalent queries & mutations for posting and managing job ads.
The following examples assume your Job Posting API integration had already migrated to object identifiers.
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> |
Job Posting API
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"
}
SEEK API
GraphQL
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
}
}
}
}
}
For more general information, see the documentation on posting a job ad in the Job Posting use case.
Job Posting API
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"
}
}
SEEK API
GraphQL
updatePostedPositionProfile
mutation with input of UpdatePostedPositionProfileInput
.For more general information, see the documentation on updating a job ad in the Job Posting use case.
Job Posting API
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"
}
]
SEEK API
The SEEK API supports automatically closing job ads on the
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
.For more general information, see the documentation on closing a job ad in the Job Posting use case.
Job Posting API
GET
to /advertisement/{advertisementId}
.RequestResponse
Copy
GET /advertisement/1c855f8d-86a9-44f4-b7ab-250e01ff8a77
Host: adposting-integration.cloud.seek.com.au
SEEK API
GraphQL
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
}
}
For more general information, see the documentation on querying a job ad in the Job Posting use case.
Job Posting API
GET
to /advertisement
.Request
Copy
GET /advertisement
Host: adposting-integration.cloud.seek.com.au
SEEK API
It’s not possible to enumerate all advertisements for an integration partner in the SEEK API.
You can only get all advertisements for a particular hirer using
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 API
GET
to /advertisement?advertiserId={advertiserID}
.Request
Copy
GET /advertisement?advertiserId=10000
Host: adposting-integration.cloud.seek.com.au
SEEK API
GraphQL
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.For more general information, see the documentation on position openings in the Job Posting use case.
In order to move to the next phase, you will need to have completed the following:
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 |