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 /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.MutationVariables
CopyGraphQL Explorer
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-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/watch?v=Q3UvigPHCjI", "position": "Above" }}updatePostedPositionProfile mutation with input of UpdatePostedPositionProfileInput.MutationVariables
CopyGraphQL Explorer
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-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.MutationVariables
CopyGraphQL Explorer
mutation ($input: ClosePostedPositionProfileInput!) {
closePostedPositionProfile(input: $input) {
positionProfile {
profileId {
value
}
}
}
}GET to /advertisement/{advertisementId}.RequestResponse
Copy
GET /advertisement/1c855f8d-86a9-44f4-b7ab-250e01ff8a77Host: adposting-integration.cloud.seek.com.au
positionProfile query with a required id input.GraphQLVariablesResponse
CopyGraphQL Explorer
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.Request
Copy
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}.Request
Copy
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.QueryVariables
CopyGraphQL Explorer
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 |