seekAnz
and global
are used for real data in our production environment.The difference between these schemes is opaque to partners and largely vestigial;
seekAnz
objects were adapted from existing Australia & New Zealand infrastructure,
while global
objects were designed from the start to be used across the SEEK Group.Our documentation and examples should make it clear which scheme applies in the context of a given object or operation.seekAnzPublicTest
and globalPublicTest
are used for mock data in our Playground environment.Separate scheme IDs are used to reduce confusion with our production environment.seekAnz
scheme used when posting jobs and receiving applicants throughout APAC;
don’t dwell on the vestigial Anz
portion of the scheme ID.Object identifiers (OIDs) uniquely identify each object in the SEEK API.
The ObjectIdentifier
type in our schema mirrors the equivalent HR-JSON concept and looks something like this:{
"value": "globalPublicTest:candidate:uploaded:12uNaG7vqgW6G1jG7qp7ha"
}
query ($cursor: String!, $limit: Int!, $schemeId: String!) {
justAfter: events(after: $cursor, first: $limit, schemeId: $schemeId) {
# The two events that occurred just after the specified event
edges {
node {
createDateTime
typeCode
}
}
# Information used to query the next page of events, if any
pageInfo {
hasNextPage
endCursor
}
}
justBefore: events(before: $cursor, last: $limit, schemeId: $schemeId) {
# The two events that occurred just before the specified event
edges {
node {
createDateTime
typeCode
}
}
# Information used to query the previous page of events, if any
pageInfo {
hasPreviousPage
startCursor
}
}
}
Code
suffix and map to code lists defined by HR-JSON.
The currently defined values are documented in their descriptions,
but you should write your code to gracefully handle future additions.For example, the PositionOpening
object contains a statusCode
field that includes the following in its description:Incomplete
indicates the position opening is in a draft state.Active
indicates the position opening is open.Closed
indicates the position opening has been closed.__typename
meta field to trigger different branches in your code.For example, the Event
interface defines a typeCode
field:query ($id: String!) {
# Returns an Event interface
event(id: $id) {
# Meta field indicates the concrete type
__typename
# Code list field indicates the concrete type
typeCode
# GraphQL fragment can select fields from the concrete type
... on PositionProfilePostedEvent {
positionProfileId
}
}
}
createWebhookSubscription
mutation has the following return type:union CreateWebhookSubscriptionPayload =
| CreateWebhookSubscriptionPayload_Conflict
| CreateWebhookSubscriptionPayload_Success
conflicting
.
You can either check for the existence of this field or query the __typename
meta field to trigger different branches in your code.mutation ($input: CreateWebhookSubscriptionInput!) {
createWebhookSubscription(input: $input) {
# Meta field indicates the concrete type
__typename
... on CreateWebhookSubscriptionPayload_Conflict {
# Details of the existing webhook subscription that conflicts
conflictingWebhookSubscription {
id {
value
}
createDateTime
}
}
... on CreateWebhookSubscriptionPayload_Success {
# Details of the newly created webhook subscription
webhookSubscription {
id {
value
}
createDateTime
}
}
}
}
String
input field on a mutation has a maximum length.The SEEK API measures these lengths in Unicode characters;
you may also see these more precisely referred to as Unicode code points or UTF-32 code units .
This method of measurement is a closer match to the graphemes visible to an end user,
and is easy to replicate in a web browser or your programming language of choice.#!/bin/sh
input='👩👩👧👧'
printf "${input}" | wc -m
# 7
maxlength
attribute and JavaScript String.length
property perform their measurements.
However, this will impose a stricter limit than necessary on your hirers.<input maxlength="10" value="👩👩👧👧" />
<!-- 11 -->
String
input field has a maximum length of 255 characters.
Any input field that deviates from this default will contain explicit documentation in the GraphQL schema, like so:String
input field may have a stricter limit expressed in bytes in UTF-8 encoding.
This currently applies to email addresses,
object identifiers,
and HMAC secret keys for webhook signing.
SEEK will never send you an object identifier that does not satisfy this limit,
but other input fields of this nature will contain explicit schema documentation:const input = "👩👩👧👧";
new TextEncoder().encode(input).length;
// 25 bytes in UTF-8 encoding
input.length;
// 11 UTF-16 code units
Array.from(input).length;
// 7 characters
events
query should not be polled for new events more than once a minute.Webhooks should be used if you require low latency or deal with high volumes.