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
# 7maxlength 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 charactersevents 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.