sendSignal and sendSignals mutations.When implementing signal capture in your software,
you will need to make two related design decisions:timestamp that represents when the status update actually occurred in your softwareIt must not represent when the status update was sent to SEEK at the end of the period.Event | Timestamp | Use as signal timestamp? |
|---|---|---|
Hirer moves application to Shortlist status | 2020-01-01T09:00:00.000Z | |
Partner synchronises application status updates for the past 24 hours | 2020-01-02T00:00:00.000Z |
Event | Timestamp | Send as independent signal? |
|---|---|---|
Hirer moves application to Shortlist status | 2020-01-01T09:00:00.000Z | |
Hirer moves application to Phone screen status | 2020-01-01T10:00:00.000Z | |
Hirer moves application to First interview status | 2020-01-01T17:00:00.000Z |
sendSignal mutation for simplicity,
any of the documented signals can be batched together in a sendSignals mutation.As a general rule,
use the batch sendSignals mutation if your software may send more than one signal at a time,
including if it:{"input": {
"signals": [
{
"typeCode": "ApplicationStatusUpdate",
"token": "globalPublicTest-WfRFAhG25YC8ADe3QvxAVz",
"current": {
"status": {
"label": "Successful",
"index": 11,
"total": 14
},
"success": true,
"timestamp": "2020-01-02T00:00:00.000Z",
"phase": {
"label": "HIRED",
"index": 5,
"total": 7
}
},
"previous": {
"status": {
"label": "Accepted",
"index": 7,
"total": 14
},
"success": null,
"timestamp": "2020-01-01T00:00:00.000Z",
"phase": {
"label": "OFFER",
"index": 4,
"total": 7
}
}
},
{
"typeCode": "PositionStatusUpdate",
"positionProfileIds": "seekAnzPublicTest:positionProfile:jobAd:27cuZeA47",
"current": {
"status": {
"label": "Withdrawn",
"index": 6,
"total": 6
},
"success": false,
"timestamp": "2020-01-02T00:00:00.000Z",
"phase": {
"label": "CLOSED",
"index": 4,
"total": 4
}
},
"previous": {
"status": {
"label": "Review",
"index": 4,
"total": 6
},
"success": null,
"timestamp": "2020-01-01T00:00:00.000Z",
"phase": {
"label": "OPEN",
"index": 3,
"total": 4
}
}
}
]
}
}sendSignals operation.
If you have more than 100 signals to send,
split them into chunks of 100 and run multiple operations,
monitoring the SEEK API responses for rate limiting errors.Selection signal data remains valid for 180 days from the time of generation.
The relevant identifiers are different for different signal types, however the records they relate to will all remain valid for a 180 day lifecycle.The identifiers for the different signal types are:Signal type | Identifier(s) | Expiry time |
|---|---|---|
Application complete for external applications | token | 180 days after the token is generated |
Application status update for external applications | token, positionProfileIds | 180 days after the token is generated |
Application status update for Optimised Apply | candidateApplicationProfileId | 180 days after the candidate application is created |
Position status update | positionProfileIds | 180 days after the position profile is posted |
sendSignal or sendSignals mutation, the SEEK API will internally handle the error and no error message will be returned.The sendSignal and sendSignals mutations will return errors consistent with our documented GraphQL error responses.
If your software receives authentication or transient server errors, it must retry sending of signals until successful.
Ensure you have monitoring in place to detect and alert on errors when sending signals, to ensure there are no gaps in data.
Take particular care with rate limiting errors if your software may send a large number of signals in quick succession.A BAD_USER_INPUT error may occur if there is a structural issue with the token.
Ensure that the token exactly matches the seek-token that was received from the redirect.We recommend that you log full requests and responses to the sendSignal and sendSignals mutations during development to facilitate debugging.
Use a unique X-Request-Id for each request to assist in support investigations;
see our guidance on tracing requests for more information.