Noteworthy additions and changes to the SEEK API are documented here.
We’ve extended webhook subscriptions with a new mutation
replayWebhookSubscription
,
which resends undelivered events from the past 90 days to your subscription endpoint.This makes it easy for you to recover from downtime without building a bespoke replay mechanism on top of the
events
query.MutationVariables
Copy Playground
mutation($input: ReplayWebhookSubscriptionInput!) {
replayWebhookSubscription(input: $input) {
webhookSubscription {
id {
value
}
}
}
}
We’ve extended Profile Apply with additional structured information on the
CandidateProfile
object:certifications
lists certifications and licences the candidate holds.education.descriptions
adds free-text descriptions to the candidate’s education history.
QueryVariables
Copy Playground
query($id: String!) {
candidateProfile(id: $id) {
education {
descriptions
}
certifications {
name
issuingAuthority {
name
}
issueDate
effectiveTimePeriod {
validTo
}
descriptions
}
}
}
We’ve introduced a new result format for mutations that create objects.
This enables explicit handling of mutation conflicts.
💥 The new format can be seen in the
createWebhookSubscription
and uploadCandidate
mutations.
If your software creates webhook subscriptions,
update the selection set to account for this change:GraphQL
Copy
mutation($input: CreateWebhookSubscriptionInput!) {
createWebhookSubscription(input: $input) {
- webhookSubscription {
- id {
- value
- }
- }
+ __typename
+ ... on CreateWebhookSubscriptionPayload_Success {
+ webhookSubscription {
+ id {
+ value
+ }
+ }
+ }
+ ... on CreateWebhookSubscriptionPayload_Conflict {
+ conflictingWebhookSubscription {
+ id {
+ value
+ }
+ }
}
}
}
Then, update your code to check for conflicts in one of two new ways:
JavaScript
Copy
if (
- // Old: make assumptions based on semi-structured errors array
- response.errors?.some(
- (err) =>
- err.extensions.code === 'BAD_USER_INPUT' &&
- err.message === 'Subscription already exists',
- )
+ // Option 1: test for existence of conflict field
+ response.data?.conflictingWebhookSubscription
+ // Option 2: test name of the response type
+ response.data?.__typename === 'CreateWebhookSubscriptionPayload_Conflict'
) {
// Handle conflict here
}
We’ve extended Job Posting with two new features:
- Query the nearest locations for a geolocation.This enables you to suggest a SEEK location closest to an end user, or map to a SEEK location from an internal location hierarchy.QueryVariablesCopy Playground
query($first: Int, $geoLocation: GeoLocationInput!, $schemeId: String!) {
nearestLocations(
first: $first
geoLocation: $geoLocation
schemeId: $schemeId
) {
contextualName
}
}
- Query the brandings available for StandOut and Premium ads.This enables you to include a branding preview and picker in your posting flow.QueryVariablesCopy Playground
query($after: String, $first: Int, $hirerId: String!) {
advertisementBrandings(after: $after, first: $first, hirerId: $hirerId) {
edges {
node {
name
}
}
}
}
We’ve extended our documentation with new guidance:
- GraphQL usageWe’ve documented some introductory concepts specific to the SEEK API, along with general guidance for using GraphQL in your software. This includes strong advice around using GraphQL variables to prevent code injection.
- We’ve included advice on reprocessing “duplicate” webhooks. In the rare event of a data quality issue, this allows SEEK to perform remediation and prompt your software to automatically re-retrieve the affected objects.
- SEEK Application Export migrationWe’ve described a new transition approach that allows you to run both integrations simultaneously and de-duplicate applications rather than candidates. We’ve also noted some potential gotchas.
We’ve refreshed our schema documentation site!
It should be easier to navigate and drill down into nested objects.
When a candidate applies on SEEK through a supported channel,
they consent to share a snapshot of their SEEK profile with the hirer.
We’ve extended Application Export with more structured information on the
CandidateProfile
object:employment
includes multiple roles from the candidate’s employment history, along with a description of their achievements and responsibilities in each role.education
describes educational programmes that the candidate has completed and is currently pursuing.qualifications
lists the self-asserted skills of the candidate.
QueryVariables
Copy Playground
query($id: String!) {
candidateProfile(id: $id) {
employment {
positionHistories {
descriptions
}
}
education {
educationDegrees {
name
}
}
qualifications {
competencyName
}
}
}
See our documentation on exporting candidate profiles for more information.