Posting a job ad

Posting a job ad

The SEEK API surfaces two mutations to post job ads, postPosition and postPositionProfileForOpening. Posting typically takes less than a minute after which a PositionProfilePosted event will be emitted.
A unique idempotencyId needs to be generated by your software and provided as an input to each posting mutation. If your software has already posted a job ad with the same idempotencyId, a conflict payload will be returned. This allows your software to retry a posting mutation without the risk of posting duplicate job ads. Your identifiers are isolated from and will not conflict with those generated by other recruitment software providers.
Refer to the Mutation conflicts section for details on the differences between success and conflict payloads, and how they can be handled.

Operations

postPosition

The postPosition mutation creates a new position opening and posts a PositionProfile in a single operation.
MutationVariablesSuccess resultConflict result
mutation ($input: PostPositionInput!) {
  postPosition(input: $input) {
    ... on PostPositionPayload_Success {
      positionOpening {
        documentId {
          value
        }
      }
      positionProfile {
        profileId {
          value
        }
      }
    }
    ... on PostPositionPayload_Conflict {
      conflictingPositionOpening {
        documentId {
          value
        }
      }
      conflictingPositionProfile {
        profileId {
          value
        }
      }
    }
  }
}
A name and email address of at least one person must be provided in personContacts; SEEK may contact them if there is a problem with their job ad. The job ad is also attributed to their name in SEEK Analytics :

My ad usage

Filter ads posted by
User
All users
Gabriella Hettinger
10
Joel Dixon
1
Lucy Flatley
3
Classification
Note that physical addresses and phone numbers may be omitted:
JSON
Copy
// `positionOpening.postingRequester.personContacts[].communication`
{
  "email": [{ "address": "mary.manager@example.com" }],
  // This can be set to an empty array.
  "phone": [],
  // This can be omitted or set to an empty array.
  "address": []
}

postPositionProfileForOpening

A single position opening can contain a maximum of 25 position profiles. Once a position profile has been posted it will remain in the position opening until 180 days after its close date.
MutationVariablesSuccess resultConflict result
mutation ($input: PostPositionProfileForOpeningInput!) {
  postPositionProfileForOpening(input: $input) {
    ... on PostPositionProfileForOpeningPayload_Success {
      positionProfile {
        profileId {
          value
        }
      }
    }
    ... on PostPositionProfileForOpeningPayload_Conflict {
      conflictingPositionProfile {
        profileId {
          value
        }
      }
    }
  }
}

Events

PositionProfilePosted

PositionProfilePosted events are emitted when job ads have been posted on the SEEK job board. You will receive events for SEEK hirers you have a JobPosting relationship with at the time of posting.
In response to these events you can request fields from the position profile. For example, you could query:
This is an example of a webhook body containing a PositionProfilePosted event:
JSON
Copy
{
  "events": [
    {
      "id": "seekAnzPublicTest:event:events:KNYEK91zoe8JoZU9iv6853",
      "type": "PositionProfilePosted",
      "createDateTime": "2019-08-20T21:02:27.101Z",

      // This can be passed to the `positionProfile` query
      "positionProfileId": "seekAnzPublicTest:positionProfile:jobAd:2782PZfXV"
    }
  ],
  "subscriptionId": "seekAnzPublicTest:webhookSubscription:events:GykAb69qu1CwbaRLsuAsVf"
}