### Example Selected Product JSON Structure Source: https://developer.seek.com/migration-guides/jobstreet-and-jobsdb-uplift/phase-2-job-posting/ad-selection/panel Provides an example of the `selectedProduct` JSON object returned by the new Ad Selection Panel, showcasing its structure including the product ID, branding features (cover image and logo indicators), and search bullet points configuration. ```JSON { "selectedProduct": { "id": "globalPublicTest:advertisementProduct:products:AXwwLCx2cqKvgEvULe6reS", "features": { "branding": { "coverImageIndicator": false, "logoIndicator": true }, "searchBulletPoints": null } } } ``` -------------------------------- ### Complete HTML Example for Matching Candidates Widget Integration Source: https://developer.seek.com/use-cases/proactive-sourcing/widgets This comprehensive HTML example provides a full, runnable page structure that combines the SDK script inclusion with the `ts-matching-candidates` widget. It illustrates how to set up a basic web page to display the widget with specific search criteria. ```HTML ``` -------------------------------- ### Example Variables for Post Position Profile GraphQL Mutation Source: https://developer.seek.com/use-cases/job-posting/managing-job-ads/posting-a-job-ad This JSON object provides an example of the input variables required for the `postPositionProfileForOpening` GraphQL mutation. It demonstrates how to specify details such as position title, opening ID, organization, formatted descriptions, remuneration, work type, video, categories, location, and posting instructions. ```JSON { "input": { "positionProfile": { "positionTitle": "Principal Developer", "positionOpeningId": "globalPublicTest:positionOpening:positions:876y9hibtZZvv6vgtQx4zd", "positionOrganizations": "seekAnzPublicTest:organization:seek:93WyyF1h", "positionFormattedDescriptions": [ { "descriptionId": "SearchSummary", "content": "Experienced software developer wanted to lead an existing team." }, { "descriptionId": "SearchBulletPoint", "content": "Line management required" }, { "descriptionId": "SearchBulletPoint", "content": "Need experience with cloud deployments" }, { "descriptionId": "SearchBulletPoint", "content": "Competitive benefits packages" }, { "descriptionId": "AdvertisementDetails", "content": "

Acme Inc is looking for an experienced software developer with management experience to lead their cloud transformation.

You should bring your passion for both technology and people to this exciting role.

" } ], "offeredRemunerationPackage": { "basisCode": "Salaried", "ranges": { "minimumAmount": { "value": 100000, "currency": "AUD" }, "maximumAmount": { "value": 130000, "currency": "AUD" }, "intervalCode": "Year" }, "descriptions": [ "Up to $130k excluding super" ] }, "seekAnzWorkTypeCode": "FullTime", "seekWorkArrangementCodes": [ "Remote" ], "seekVideo": { "url": "https://www.youtube.com/embed/Q3UvigPHCjI", "seekAnzPositionCode": "Above" }, "jobCategories": "seekAnzPublicTest:jobCategory:seek:2EFstqFvP", "positionLocation": "seekAnzPublicTest:location:seek:uxLiTMNo", "postingInstructions": { "seekAdvertisementProductId": "globalPublicTest:adProduct:seekApi:EWHKTY9D6mJFiA5EH6P7MFaUj6LchctVWMg2zsCHxbpQ", "idempotencyId": "6eaeb58c-cc38-4b0e-8353-daa3011f1ece" } } } } ``` -------------------------------- ### Full Example of SeekApi Panel Rendering Source: https://developer.seek.com/use-cases/ad-performance/panel A comprehensive example demonstrating how to call `SeekApi.render` with a DOM element and a configuration object. It includes a placeholder `getAuthToken` function and specifies the `positionProfileId` for the job ad. ```JavaScript SeekApi.render( document.getElementById('seekAdPerformanceContainerDiv'), 'adPerformance', { // Function to call to retrieve the browser token to use when calling the // SEEK API, see "Step 3" for more details. getAuthToken: () => { return Promise.resolve('browser token'); }, // Object identifier for the job ad to be displayed. positionProfileId: 'seekAnzPublicTest:positionProfile:jobAd:2782PZfXV' } ); ``` -------------------------------- ### Example GraphQL Query and Variables for Advertisement Products Source: https://developer.seek.com/use-cases/job-posting/ad-selection/v2/graphql A complete example demonstrating the `advertisementProducts` GraphQL query with a sample `positionProfile` input. This showcases how to structure the input variables for a typical job posting scenario, including job categories, location, organization, title, remuneration details, and work type. ```GraphQL query advertisementProducts( $positionProfile: AdvertisementProducts_PositionProfileInput! $selectedAdvertisementProductId: String ) { advertisementProducts( positionProfile: $positionProfile selectedAdvertisementProductId: $selectedAdvertisementProductId ) { products { id { value } label description sellingPoints { text } price { summary } selected features { branding { coverImageIndicator logoIndicator } searchBulletPoints { limit } } payment { summaryHtml } } information } } ``` ```JSON { "positionProfile": { "jobCategories": "seekAnzPublicTest:jobCategory:seek:72J8gpm5", "positionLocation": "seekAnzPublicTest:location:seek:2FqwWaaMV", "positionOrganizations": "seekAnzPublicTest:organization:seek:93WyyF1h", "positionTitle": "Billing Team Lead", "offeredRemunerationPackage": { "basisCode": "Salaried", "descriptions": [ "70-90k plus super" ], "ranges": [ { "intervalCode": "Year", "minimumAmount": { "currency": "AUD", "value": 70000 }, "maximumAmount": { "currency": "AUD", "value": 90000 } } ] }, "seekAnzWorkTypeCode": "FullTime" } } ``` -------------------------------- ### Example GraphQL HTTP POST Request Source: https://developer.seek.com/graphql A basic example demonstrating how to send a GraphQL query to the SEEK API using an HTTP POST request. It includes standard headers for language, authorization, content type, user agent, and tracing IDs, along with a JSON payload containing a simple 'version' query. ```HTTP POST https://graphql.seek.com/graphql HTTP/1.1 Accept-Language: en-AU Authorization: Bearer PARTNER_TOKEN_HERE Content-Type: application/json User-Agent: example-application/1.2.3 X-Request-Id: a9e3d78d-576d-470b-b1d2-52f4921be25c X-Session-Id: b5a8774c-c450-4906-a25c-861bce129106 { "query": "{ version }" } ``` -------------------------------- ### GraphQL Query: Fetch All Hirer Organizations Source: https://developer.seek.com/auth/hirer-relationships Example GraphQL query to fetch a paginated list of hiring organizations based on specified relationship types. This query demonstrates how to use the 'hiringOrganizations' endpoint with variables for filtering and pagination. ```GraphQL query ($schemeId: String!, $relationshipTypeCodes: [String!]!, $first: Int) { hiringOrganizations( schemeId: $schemeId filter: { relationshipTypeCodes: $relationshipTypeCodes } first: $first ) { edges { node { id { value } name } } pageInfo { hasNextPage endCursor } } } ``` -------------------------------- ### Advertisement Products API Reference and Usage Guide Source: https://developer.seek.com/use-cases/job-posting/ad-selection/v2/graphql Detailed documentation for displaying and managing job advertisement products, including field descriptions, usage recommendations, and best practices for handling dynamic product IDs and drafts. ```APIDOC Advertisement Products Schema Fields and Display Guidelines: products: Path: products Description: Display products in the returned list order. Recommendation: We recommend a tile layout. Schema Link: /schema/named-type/AdvertisementProducts#/field/products products[].selected: Path: products[].selected Description: Pre-select the product with a 'selected' indicator set to 'true'. Note: If all indicators are 'false', then no ad product should be selected by default. Usage Context: Typically returned when providing 'positionProfile.profileId' to update a job ad or 'selectedAdvertisementProductId' to restore a draft selection. Schema Link: /schema/named-type/AdvertisementProduct#/field/selected products[].label: Path: products[].label Description: Display the label as the headline of the product. Schema Link: /schema/named-type/AdvertisementProduct#/field/label products[].price.summary: Path: products[].price.summary Description: Display the price summary after the label. Note: If the price is null, do not display a price. Schema Link: /schema/named-type/AdvertisementProductPriceDetails#/field/summary products[].description: Path: products[].description Description: Display the description after the price summary. Schema Link: /schema/named-type/AdvertisementProduct#/field/description products[].sellingPoints: Path: products[].sellingPoints Description: Display the selling points alongside the product. Recommendation: We recommend an unordered list of the inner 'text's. Schema Link: /schema/named-type/AdvertisementProduct#/field/sellingPoints information: Path: information Description: Display informational text below the products. Note: This field must be dynamically retrieved from the response as it may contain tailored legal disclaimers. Schema Link: /schema/named-type/AdvertisementProducts#/field/information products[].payment.summaryHtml: Path: products[].payment.summaryHtml Description: Conditionally display the payment summary below the products. Condition: This field should only be displayed when a product is selected. Alternative: If rendering HTML is impractical, use the plain-text 'summary' instead. Schema Link: /schema/named-type/AdvertisementProductPaymentDetails#/field/summaryHtml products[].features: Path: products[].features Description: Conditionally display subsequent fields to select a brand or enter search bullet points on the job posting form. Condition: Each field should only be displayed when a product is selected and the corresponding feature is supported by the selected product. Schema Link: /schema/named-type/AdvertisementProduct#/field/features Managing Variable Job Ads: - Due to the variable nature of SEEK’s product ladder, GraphQL queries return ephemeral product IDs. - These IDs reference the set of products quoted at that point in time. - When a hirer selects a product and its identifier is propagated to post or update a job ad, SEEK attempts to lock in the exact quoted product features and pricing. - Ad products presented to a hirer are only valid within the context of the workflow they were executing. - Product IDs cannot be persisted long term; they should not be stored alongside a posted job ad for subsequent update workflows or to build hardcoded mappings. Handling Drafts: - The selected product ID may be temporarily stored in a job ad draft. - When resuming a posting workflow from a draft, the previous product ID must not be directly used to post the job ad. - Instead, pass the previous product ID to the 'advertisementProducts' query as the 'selectedAdvertisementProductId' argument. - The query will then pre-select an equivalent ad product and return new product IDs that can be used to post the job ad. - Query Link: /schema/query/advertisementProducts - Argument Link: /schema/query/advertisementProducts#/argument/selectedAdvertisementProductId ``` -------------------------------- ### Sample GraphQL Query for Position Openings Source: https://developer.seek.com/schema/query/positionOpenings An example GraphQL query demonstrating how to retrieve position openings using the hirerId argument and access cursor information for pagination. ```GraphQL query ($hirerId: String!) { positionOpenings(hirerId: $hirerId) { edges { cursor } } } ``` -------------------------------- ### GraphQL Query: Fetch Current Hirer Details Source: https://developer.seek.com/auth/hirer-relationships Example GraphQL query to retrieve details of the hirer associated with the currently used browser token. This query does not require explicit arguments as it uses the token's context to identify the hirer. ```GraphQL query { self { hirer { id { value } name seekApiCapabilities { relationshipTypeCodes } } } } ``` -------------------------------- ### JSON Example: Hirer Relationship Changed Webhook Body Source: https://developer.seek.com/auth/hirer-relationships An example of the JSON payload received for a 'HirerRelationshipChanged' webhook event. This demonstrates the typical structure and data contained within such an event, useful for parsing incoming webhook notifications. ```JSON { "events": [ { "id": "seekAnzPublicTest:event:events:RJrWs6Kw13TvACTTXG6qZg", "type": "HirerRelationshipChanged", "createDateTime": "2020-10-20T23:13:58.804Z", "hirerId": "seekAnzPublicTest:organization:seek:93WyyF1h" } ], "subscriptionId": "seekAnzPublicTest:webhookSubscription:events:RNzsabxEX56cuRepCD9A8j", "url": "https://example.com/webhook", "expireDateTime": "2019-09-13T22:16:10.593Z" } ``` -------------------------------- ### Sample GraphQL Mutation for Replaying Webhook Subscriptions Source: https://developer.seek.com/schema/mutation/replayWebhookSubscription A complete GraphQL mutation example demonstrating how to call `replayWebhookSubscription`. The example shows how to pass an `$input` variable and how to query for specific fields within the `webhookSubscription` object in the returned payload, including `hirerId`, `id`, and `schemeId`. ```GraphQL mutation ($input: ReplayWebhookSubscriptionInput!) { replayWebhookSubscription(input: $input) { webhookSubscription { hirerId { value } id { value } schemeId } } } ``` -------------------------------- ### GraphQL Variables: Example for Create Application Questionnaire Source: https://developer.seek.com/use-cases/job-posting/questionnaires/ats-questions An example JSON payload for the `CreateApplicationQuestionnaireInput` variable, demonstrating how to define a questionnaire with a `FreeText` question and a `PrivacyConsent` component. This structure is used with the `createApplicationQuestionnaire` mutation. ```JSON { "input": { "applicationQuestionnaire": { "hirerId": "seekAnzPublicTest:organization:seek:93WyyF1h", "components": [ { "componentTypeCode": "Question", "question": { "componentTypeCode": "Question", "value": "question1", "questionHtml": "Tell us about your relevant mock data experience", "responseTypeCode": "FreeText" } }, { "componentTypeCode": "PrivacyConsent", "privacyConsent": { "componentTypeCode": "PrivacyConsent", "value": "consent1", "descriptionHtml": "Do you agree to our privacy policy?", "privacyPolicyUrl": { "url": "https://www.seek.com.au/privacy/" } } } ] } } } ``` -------------------------------- ### Execute a basic GraphQL API version query Source: https://developer.seek.com/graphql/playground This snippet demonstrates a fundamental GraphQL query to retrieve the current API version. It serves as a simple 'hello world' example to verify connectivity and basic query execution in the GraphQL Explorer. ```GraphQL { version } ``` -------------------------------- ### HTTP Request Example with SEEK Tracing Headers Source: https://developer.seek.com/graphql/in-practice This example demonstrates how to include essential tracing headers (`User-Agent`, `X-Request-Id`, `X-Session-Id`) in an HTTP POST request to the GraphQL endpoint. These headers are crucial for tracing requests across SEEK's systems, aiding in debugging, issue isolation, and understanding service interactions. ```HTTP POST /graphql HTTP/1.1 User-Agent: example-application-import-webhook/1.2.3 X-Request-Id: 749fbdc9-fbe5-40e9-b5ae-fee3375f1e28 X-Session-Id: 6eb0559a-cb91-4178-bb3d-9f5513e9ecc2 ``` -------------------------------- ### Example URL with seek-token Parameter Source: https://developer.seek.com/use-cases/apply-with-seek/display-button Demonstrates how the `seek-token` parameter is appended to the query string of the `applicationUri` when a candidate links out from a SEEK job ad. This token is unique to the candidate, job ad, and session. ```URL https://example.com/position/123/?seek-token=eyJqb2JJZCI6MCwiY2FuZGlkYXRlSWQiOjAsInNlc3Npb25JZCI6IiJ9 ``` -------------------------------- ### API References for Job Ad Posting and Editing Source: https://developer.seek.com/use-cases/job-posting/ad-selection/v2/panel Key API mutations, callbacks, and properties involved in the job ad posting and editing workflow, detailing how product IDs are managed and validated to prevent errors. ```APIDOC Mutations: updatePostedPositionProfile: description: Updates an existing job ad. Requires the latest `selectedProduct.id` obtained from the `onChange` callback. parameters: seekAdvertisementProductId: The ID of the advertisement product to use for the update. Must be current and valid. errors: Invalid posting instructions: Occurs if `seekAdvertisementProductId` is stale or invalid. postPosition: description: Posts a new job ad. parameters: seekAdvertisementProductId: The ID of the advertisement product to use for the new posting. postPositionProfileForOpening: description: Posts a new job ad profile for an opening. parameters: seekAdvertisementProductId: The ID of the advertisement product to use for the new posting. Callbacks: onChange callback: description: Emitted by the Ad Selection Panel. Provides the most recent `selectedProduct.id` and available features. This ID should always be used for posting or updating job ads. returns: selectedProduct.id: The currently selected and valid advertisement product ID. features: A list of additional job ad features enabled by the selected product. Props/Fields (Ad Selection Panel): selectedAdvertisementProductId (for render function): type: string description: When resuming from a draft, pass the previous product ID to the Ad Selection Panel render function via this parameter. The panel will then pre-select an equivalent ad product. profileId (for Ad Selection Panel): type: string description: Required when editing an existing job ad to ensure the panel displays correct ad products and pricing based on the existing job details. selectedProduct.id (from onChange callback): type: string description: The most current and valid product ID emitted by the `onChange` callback. This ID must be used in `postPosition`, `postPositionProfileForOpening`, or `updatePostedPositionProfile` mutations. seekAdvertisementProductId (field in posting instructions): type: string description: The field within the posting instructions of job posting mutations (`postPosition`, `postPositionProfileForOpening`, `updatePostedPositionProfile`) that accepts the `selectedProduct.id`. positionProfile (object for panel): type: object description: The full `positionProfile` object, including `profileId` for existing ads, that should be passed to the Ad Selection Panel to ensure correct product ID refreshing. showFormValidationError (prop for panel): type: boolean description: A boolean prop for the Ad Selection Panel. When set to `true`, the panel will display a validation error if an ad product has not been selected. ``` -------------------------------- ### Sample GraphQL Query for Hiring Organizations Source: https://developer.seek.com/schema/query/hiringOrganizations A complete example of a GraphQL query to fetch hiring organizations, demonstrating how to pass the `schemeId` variable and retrieve `cursor` information from the `edges`. ```GraphQL query ($schemeId: String!) { hiringOrganizations(schemeId: $schemeId) { edges { cursor } } } ``` -------------------------------- ### Sample GraphQL Query for applyWithSeekButton Source: https://developer.seek.com/schema/query/applyWithSeekButton An example GraphQL query demonstrating how to call the `applyWithSeekButton` query and retrieve the `buttonLabel` from its response. This snippet shows a basic usage pattern for integrating with the API. ```GraphQL query ($input: ApplyWithSeekButtonInput!) { applyWithSeekButton(input: $input) { buttonLabel } } ``` -------------------------------- ### Include SEEK Ad Selection Panel Script Source: https://developer.seek.com/use-cases/job-posting/ad-selection/v2/panel Adds the necessary JavaScript library to the page to enable rendering of the Ad Selection Panel. This script exposes the `SeekApi.render` function globally. ```HTML ``` -------------------------------- ### SeekApi.render Function Reference Source: https://developer.seek.com/use-cases/job-posting/questionnaires/v2/panel Detailed documentation for the `SeekApi.render` function, including its parameters and their descriptions. This function is crucial for initializing and displaying the Questionnaire Panel within a web page. ```APIDOC SeekApi.render(containerNode, 'questionnaire', props) containerNode: (DOM Node) The DOM element to render the panel into. 'questionnaire': The name of the panel to render. props: Props for rendering the panel. ``` -------------------------------- ### Sample GraphQL Query for Advertisement Products Information Source: https://developer.seek.com/schema/query/advertisementProducts An example GraphQL query to retrieve basic information about advertisement products by providing a `positionProfile` input. ```GraphQL query ($positionProfile: AdvertisementProducts_PositionProfileInput!) { advertisementProducts(positionProfile: $positionProfile) { information } } ``` -------------------------------- ### Sample GraphQL Mutation for createCandidateProcessHistoryItem Source: https://developer.seek.com/schema/mutation/createCandidateProcessHistoryItem A concise GraphQL query demonstrating how to invoke the `createCandidateProcessHistoryItem` mutation. This example uses a variable `$input` to pass the necessary `CreateCandidateProcessHistoryItemInput` object, illustrating a typical usage pattern. ```GraphQL mutation ($input: CreateCandidateProcessHistoryItemInput!) { createCandidateProcessHistoryItem(input: $input) } ``` -------------------------------- ### Ad Selection Panel `props` Migration Guide Source: https://developer.seek.com/migration-guides/jobstreet-and-jobsdb-uplift/phase-2-job-posting/ad-selection/panel Details the revised set of properties (`props`) accepted by the `SeekApi.render` function for the new Ad Selection Panel. This includes new fields for locale, product ID, selling points, and a comprehensive revision of the `positionProfile` object, along with a list of deprecated properties. ```APIDOC APIDOC: SeekApi.render(containerNode, 'adSelection', props) props object: locale: string (New) Description: Specifies the locale (e.g., 'en-AU') to display content in, overriding default browser preferences. Supported locales are outlined in content localisation documentation. selectedAdvertisementProductId: string (New) Description: Specifies the product ID stored in a job ad draft. sellingPointsDisplay: string (New) Description: Defines how the panel should display selling points of each product. positionProfile: object (Replaces 'draftAdvertisement') Description: Job ad fields have been revised. Contains: positionTitle: string (Previously 'draftAdvertisement.positionTitle') Description: Same behavior as before. jobCategories: string (Previously 'draftAdvertisement.jobCategoryId') Description: Pass a single SEEK Category ID (e.g., 'seekAnzPublicTest:jobCategory:seek:2PiXemmou'). positionLocation: string (Previously 'draftAdvertisement.positionLocationId') Description: Pass a single SEEK Location ID (e.g., 'seekAnzPublicTest:location:seek:W7NggeKH'). positionOrganizations: string (New) Description: Contains a single SEEK Hirer ID that is posting or updating the job ad (e.g., 'seekAnzPublicTest:organization:seek:93WyyF1h'). offeredRemunerationPackage: RemunerationPackageInput object (New) Description: Contains remuneration offered for the position. profileId: string (New) Description: During updates, add this prop with the job ad ID to be updated (replaces functionality in previous 'advertisement'). seekAnzWorkTypeCode: string (New) Description: Contains the SEEK work type code (e.g., 'FullTime'). onChange: function (Same behavior) Description: Revise handling of the product fields in 'event'. showFormValidationError: boolean (Previously 'isValidationEnabled') Description: Same behavior as before. getAuthToken: function (Same behavior) Removed props: typeCode (from 'draftAdvertisement') hirerJobReference (from 'draftAdvertisement') advertisement disableCSSOMInjection instanceId mode onInitialLoad theme ``` -------------------------------- ### Bash Script for GraphQL Request Setup Source: https://developer.seek.com/graphql This Bash script snippet illustrates how to define variables commonly used in GraphQL API requests, such as `acceptLanguage`, `accessToken`, `userAgent`, and `sessionId`. It includes comments on best practices for managing these values in a production environment. ```Bash #!/bin/sh # In practice, propagate language preferences from the end-user client. # https://developer.seek.com/graphql/in-practice#content-localisation acceptLanguage='en-AU' # In practice, retrieve and cache an access token dynamically at runtime. # https://developer.seek.com/auth accessToken='' # In practice, use your application name and version from configuration. # https://developer.seek.com/graphql/in-practice#tracing-requests userAgent='example-application/1.2.3' # In practice, share the session ID among requests in a given interaction. # https://developer.seek.com/graphql/in-practice#tracing-requests sessionId="$(uuidgen)" ``` -------------------------------- ### Example GraphQL Mutation for Deleting Position Opening Source: https://developer.seek.com/use-cases/job-posting/position-openings A practical GraphQL query demonstrating how to invoke the `deletePositionOpening` mutation with a placeholder input variable. ```GraphQL mutation ($input: DeletePositionOpeningInput!) { deletePositionOpening(input: $input) { positionOpening { documentId { value } } } } ``` -------------------------------- ### GraphQL Mutation: Post Position Profile For Opening Example Source: https://developer.seek.com/schema/mutation/postPositionProfileForOpening This GraphQL snippet demonstrates how to invoke the `postPositionProfileForOpening` mutation. It requires an `input` variable of type `PostPositionProfileForOpeningInput` to specify the details for the position profile. ```GraphQL mutation ($input: PostPositionProfileForOpeningInput!) { postPositionProfileForOpening(input: $input) } ``` -------------------------------- ### GraphQL Querying a Job Ad (Deprecated Field Example) Source: https://developer.seek.com/migration-guides/jobstreet-and-jobsdb-uplift/phase-2-job-posting/ad-selection/panel This GraphQL query demonstrates how a job ad might have been queried using the now deprecated `seekAnzAdvertisementType` field. Integrations should update to use `seekAdvertisementProduct` instead to avoid failures after December 2024. This example is provided to illustrate the field that needs to be replaced. ```GraphQL # Inline arguments are only used to simplify these examples. # Parameterise your production queries with variables. # https://developer.seek.com/graphql/in-practice#variables query { positionProfile(id: "seekAnzPublicTest:positionProfile:jobAd:2782PZfXV") { postingInstructions { seekAnzAdvertisementType } } } ``` -------------------------------- ### Retrieve Advertisements by Advertiser ID (Job Posting API) Source: https://developer.seek.com/migration-guides/job-posting-api/phase-4-managing-job-ads This example shows how to filter job advertisements by a specific advertiser ID using a GET request to the Job Posting API. The `advertiserId` query parameter is used to narrow down the results. ```HTTP GET /advertisement?advertiserId=10000 Host: adposting-integration.cloud.seek.com.au ``` -------------------------------- ### Retrieve Advertisement Details via Job Posting REST API Source: https://developer.seek.com/migration-guides/job-posting-api/phase-4-managing-job-ads This snippet demonstrates how to fetch a specific advertisement's details using a GET request to the Job Posting API. It requires an `advertisementId` as a path parameter. The example shows a full HTTP request including the host. ```APIDOC Job Posting API GET /advertisement/{advertisementId} ``` ```HTTP GET /advertisement/1c855f8d-86a9-44f4-b7ab-250e01ff8a77 Host: adposting-integration.cloud.seek.com.au ``` -------------------------------- ### Example Variables for postPosition GraphQL Mutation Source: https://developer.seek.com/use-cases/job-posting/managing-job-ads/posting-a-job-ad JSON payload demonstrating the structure and content required for the `$input` variable of the `postPosition` GraphQL mutation. It specifies details like `postingRequester`, `positionProfile` (including title, descriptions, remuneration, and location), and `postingInstructions`. ```JSON { "input": { "positionOpening": { "postingRequester": { "roleCode": "Company", "id": "seekAnzPublicTest:organization:seek:93WyyF1h", "personContacts": [ { "name": { "formattedName": "Mary Manager" }, "roleCode": "HiringManager", "communication": { "email": [ { "address": "mary.manager@example.com" } ], "phone": [ { "formattedNumber": "03 8517 4100" } ] } } ] } }, "positionProfile": { "positionTitle": "Associate Developer", "positionOrganizations": "seekAnzPublicTest:organization:seek:93WyyF1h", "positionFormattedDescriptions": [ { "descriptionId": "SearchSummary", "content": "Start your software development career with a dynamic & growing team" }, { "descriptionId": "AdvertisementDetails", "content": "A newly created role for an ambitious junior or graduate developer. Be part of a great team in the Bendigo area." } ], "offeredRemunerationPackage": { "basisCode": "Hourly", "ranges": { "minimumAmount": { "value": 70, "currency": "AUD" }, "maximumAmount": { "value": 85, "currency": "AUD" }, "intervalCode": "Hour" }, "descriptions": [] }, "seekAnzWorkTypeCode": "PartTime", "seekWorkArrangementCodes": [ "Remote" ], "jobCategories": "seekAnzPublicTest:jobCategory:seek:2EFstqFvP", "positionLocation": "seekAnzPublicTest:location:seek:QVS62e6K", "postingInstructions": { "seekAdvertisementProductId": "globalPublicTest:adProduct:seekApi:EWHKTY9D6mJFiA5EH6P7MFbCR3cKV9WdNSMC6e1vqiUJ", "idempotencyId": "6eaeb58c-cc38-4b0e-8353-daa3011f1ece" } } } } ``` -------------------------------- ### Product Feature Configuration Structural Changes Source: https://developer.seek.com/migration-guides/jobstreet-and-jobsdb-uplift/phase-2-job-posting/ad-selection/panel Illustrates the structural changes in the `selectedProduct` configuration, transitioning from simple boolean indicators like `brandingIndicator` and `searchBulletPointsIndicator` to nested objects (`branding` and `searchBulletPoints`) that allow for more detailed feature specifications. ```JSON + selectedProduct: { features: { - brandingIndicator: true, + branding: { + coverImageIndicator: false, + logoIndicator: true, + }, - searchBulletPointsIndicator: true, + searchBulletPoints: { + limit: 3, + }, }, // ... }, }; ``` -------------------------------- ### JavaScript Example: Handling Questionnaire Save Result for Job Ad Posting Source: https://developer.seek.com/use-cases/job-posting/questionnaires/v2/panel This JavaScript snippet demonstrates how to call the 'seek:questionnaire:save' event, process its result, and conditionally update the job ad input with the returned questionnaire ID before posting. It handles error cases and scenarios where no questions were added by the hirer. ```JavaScript const postSeekJobAd = async (input) => { // Call a posting mutation to post or update a SEEK job ad. }; const handleSubmitButton = async () => { const input = { // Compose from form data. }; const result = await dispatchEvent('seek:questionnaire:save'); if (result.isError) { // Do not post the job ad if an error occurs while saving the questionnaire. // The panel will display an actionable error message to the hirer. return; } // Data will be nullish if the hirer did not add any questions via the panel. if (result.data?.id) { input.positionProfile.seekApplicationQuestionnaireId = result.data.id; } await postSeekJobAd(input); }; ``` -------------------------------- ### Example: Stale Product ID Error Message Source: https://developer.seek.com/use-cases/job-posting/ad-selection/v2/panel A JSON error response indicating that the provided `seekAdvertisementProductId` is no longer valid, requiring a refresh of available ad products. This error typically occurs due to using an outdated product ID from a draft or an initial posting, or if the panel was rendered without a `profileId` for an existing ad. ```json { "errors": [ { "message": "Invalid posting instructions", "extensions": { "code": "BAD_USER_INPUT", "invalidFields": { "/input/positionProfile/postingInstructions/0/seekAdvertisementProductId": "No longer valid; refresh the available ad products for this job ad" } } } ] } ``` -------------------------------- ### Request Browser Token from SEEK GraphQL API Source: https://developer.seek.com/use-cases/job-posting/questionnaires/v2/panel Example HTTP POST request to the SEEK GraphQL authentication endpoint to obtain a browser token. This token is crucial for authenticated interactions with the SEEK API, specifically for managing application questionnaires and organization data. The request requires a partner bearer token for authorization, a specified hirer ID, and a defined scope indicating the permissions needed. ```HTTP POST https://graphql.seek.com/auth/token HTTP/1.1 Authorization: Bearer PARTNER_TOKEN_HERE Content-Type: application/json User-Agent: YourPartnerService/1.2.3 { "hirerId": "seekAnzPublicTest:organization:seek:93WyyF1h", "scope": "mutate:application-questionnaires query:application-library-question-suggestions query:application-questionnaires query:organizations", "userId": "317665" } ``` -------------------------------- ### API Documentation: Query hiringOrganizations Source: https://developer.seek.com/auth/hirer-relationships Detailed documentation for the 'hiringOrganizations' GraphQL query, which returns a paginated list of all SEEK hirers with whom the authenticated user has a specified relationship. It describes the query's arguments and the structure of its returned data. ```APIDOC Query: hiringOrganizations Description: Returns a paginated list of all SEEK hirers with whom the authenticated user has a specified relationship. Arguments: schemeId: String! - The identifier for the scheme. relationshipTypeCodes: [String!]! - A list of relationship types to filter by. first: Int - The maximum number of results to return. Returns: edges: List of nodes, each representing a hiring organization. node: id: value: String - The unique identifier of the hiring organization. name: String - The name of the hiring organization. pageInfo: Pagination information. hasNextPage: Boolean - True if there are more pages. endCursor: String - The cursor for the next page. ``` -------------------------------- ### ErrorResult JSON Example Source: https://developer.seek.com/use-cases/job-posting/questionnaires/panel An example of the JSON structure for an ErrorResult object, typically returned for network or internal server errors. ```json { "errorCode": "INTERNAL_SERVER_ERROR", "message": "[Network error]: TypeError: Network request failed" } ``` -------------------------------- ### Configure SeekApi.render for Ad Selection Panel Source: https://developer.seek.com/migration-guides/jobstreet-and-jobsdb-uplift/phase-2-job-posting/ad-selection/panel This JavaScript code demonstrates how to initialize the Seek Ad Selection Panel using the `SeekApi.render` method. It includes the implementation for `getAuthToken` to securely fetch authentication tokens, the `onChange` callback to react to product selection changes and dynamically adjust UI elements based on product features (e.g., branding, search bullet points), and a detailed `positionProfile` configuration for job classification and salary details. It also shows how to manage form validation and pre-select an advertisement product. ```javascript SeekApi.render(document.getElementById('seekPanelContainer'), 'adSelection', { getAuthToken: async () => { // Do not implement caching in your `getAuthToken` implementation. // The panel will internally memoise the response. const token = await fetchAuthToken(); return token; }, onChange: (event) => { const { selectedProduct } = event; // Persist `selectedProduct.id` in memory for use in job posting mutations. // // Display form inputs for features supported by the selected product. if (selectedProduct?.features.branding) { // Show brand selection. } else { // Hide brand selection. } if (selectedProduct?.features.searchBulletPoints) { // Show the number of bullet point input fields indicated by `limit`. } else { // Hide all bullet point input fields. } }, sellingPointsDisplay: 'bullet', positionProfile: { // Ad products and their pricing vary based on these classifiers. jobCategories: 'seekAnzPublicTest:jobCategory:seek:27HXTkNXh', positionLocation: 'seekAnzPublicTest:location:seek:W7NggeKH', positionOrganizations: 'seekAnzPublicTest:organization:seek:93WyyF1h', positionTitle: 'Software Engineer', // Salary details let us indicate how each ad product is likely to perform. offeredRemunerationPackage: { basisCode: 'Salaried', descriptions: ['Up to $70,000 per year + bonus'], ranges: [ { intervalCode: 'Year', minimumAmount: { currency: 'AUD', value: 40000 }, maximumAmount: { currency: 'AUD', value: 70000 } } ] }, seekAnzWorkTypeCode: 'FullTime', // The position profile ID should be provided when editing a job ad. profileId: undefined }, // The product ID stored in a job ad draft. selectedAdvertisementProductId: undefined, // Set this to true if the hirer tries to post the job ad before they have // selected an ad product (i.e. no `selectedProduct.id` persisted in memory). showFormValidationError: false }); ``` -------------------------------- ### API Documentation: Query self Source: https://developer.seek.com/auth/hirer-relationships Detailed documentation for the 'self' GraphQL query, which returns the hirer associated with the current browser token. This is useful for frontend applications to identify the hirer without needing an explicit ID, leveraging the token's scope. ```APIDOC Query: self Description: When using a browser token, this query returns the hirer the browser token is scoped to. Useful for listing a hirer’s relationships directly from the frontend without explicitly specifying the hirer’s ID. Arguments: None (contextual from browser token). Returns: hirer: id: value: String - The unique identifier of the hirer. name: String - The name of the hirer. seekApiCapabilities: relationshipTypeCodes: [String] - A list of relationship type codes the hirer has capabilities for. ``` -------------------------------- ### GraphQL Example: Update Job Ad with New Title and Full Details Source: https://developer.seek.com/use-cases/job-posting/managing-job-ads/updating-a-job-ad A comprehensive GraphQL mutation example demonstrating how to update a job advertisement, including changing the title and providing full details for other fields. This example includes both the GraphQL query and the corresponding variables for a complete request. ```GraphQL mutation ($input: UpdatePostedPositionProfileInput!) { updatePostedPositionProfile(input: $input) { positionProfile { profileId { value } } } } ``` ```JSON { "input": { "positionProfile": { "profileId": "seekAnzPublicTest:positionProfile:jobAd:2782PZfXV", "positionTitle": "Lead Developer", "positionOrganizations": "seekAnzPublicTest:organization:seek:93WyyF1h", "positionFormattedDescriptions": [ { "descriptionId": "SearchSummary", "content": "Experienced software developer wanted to lead an existing team." }, { "descriptionId": "SearchBulletPoint", "content": "Line management required" }, { "description ``` -------------------------------- ### Ad Selection Panel Props API Reference Source: https://developer.seek.com/use-cases/job-posting/ad-selection/v2/panel Defines the configuration properties that can be passed to the `SeekApi.render` function for the 'adSelection' panel. These properties control authentication, event handling, display options, and the data related to the job position. ```APIDOC SeekApi.render(containerNode, 'adSelection', props) parameters: props: object getAuthToken: () => Promise Description: Function to retrieve a browser token for the SEEK API. onChange: (event) => void Description: Callback function triggered when an ad product is selected. sellingPointsDisplay: string (enum: 'bullet', 'tooltip') Default: 'bullet' Description: Specifies how the panel should display selling points of each product. positionProfile: object (type: AdvertisementProducts_PositionProfileInput) Description: Required object containing job profile data. When editing an existing job ad, this must include the `profileId` of the job being updated. selectedAdvertisementProductId: string (optional) Description: The product ID of the currently selected ad, typically stored in a job ad draft. showFormValidationError: boolean Default: false Description: Determines whether the panel should display a validation error when no product is selected. locale: string (optional) Description: Specifies the locale to display content in (e.g., 'en-AU'). Overrides default localization based on browser preferences. Refer to content localization documentation for supported locales. ``` -------------------------------- ### GraphQL Variables Example for Delete Candidate Source: https://developer.seek.com/use-cases/proactive-sourcing/sharing-a-candidate An example of the JSON variables structure required for the `deleteUploadedCandidate` mutation, specifying the `documentId` of the candidate to be deleted. ```json { "input": { "candidate": { "documentId": "globalPublicTest:candidate:uploaded:12uNaG7vqgW6G1jG7qp7ha" } } } ``` -------------------------------- ### Auth Landing Page URL with Prefill and Token Parameters Source: https://developer.seek.com/guides/2025-revision/awsk-migration-considerations This example URL demonstrates how an authentication landing page receives and propagates `seek-prefill-id` and `seek-token` parameters along with a `state` parameter. These parameters are crucial for pre-filling application forms and enabling proper application tracking within the SEEK ecosystem. ```URL https://example.com/seek-auth?state=%2Fposition%2F123%2Fapply&seek-prefill-id=def456&seek-token=ghi789 ``` -------------------------------- ### Job Ad Preview Implementation Source: https://developer.seek.com/migration-guides/jobstreet-and-jobsdb-uplift/phase-2-job-posting Guidelines for implementing the job ad preview functionality. This involves displaying a preview button, executing the `postedPositionProfilePreview` query with the full ad state, and rendering the returned `previewUri` in a new tab or iframe. ```APIDOC Job Ad Preview Steps: - Display a button for hirers to click on to preview the job ad - Execute the `postedPositionProfilePreview` query to generate a job ad preview when the button is clicked - Ensure the full state of the ad is passed to the `positionProfile` argument - Open new tab or render iframe in the flow to the returned `previewUri` field ``` -------------------------------- ### GraphQL `postPosition` Mutation Example Source: https://developer.seek.com/schema/mutation/postPosition This snippet provides a complete GraphQL mutation example for the `postPosition` operation. It demonstrates how to call the mutation with an `$input` variable of type `PostPositionInput!` to create or update a position. ```GraphQL mutation ($input: PostPositionInput!) { postPosition(input: $input) } ``` -------------------------------- ### Sample GraphQL Query for Application Library Question Search Source: https://developer.seek.com/schema/query/applicationLibraryQuestionSearch An example GraphQL query demonstrating how to call the `applicationLibraryQuestionSearch` query. It shows how to pass variables for keywords, position profile, and scheme ID, and how to retrieve the `id.value` from the search results. ```GraphQL query ($keywords: String!, $positionProfile: ApplicationLibraryQuestionSearch_PositionProfileInput!, $schemeId: String!) { applicationLibraryQuestionSearch( keywords: $keywords positionProfile: $positionProfile schemeId: $schemeId ) { id { value } } } ``` -------------------------------- ### Questionnaire Panel Implementation and Updates Source: https://developer.seek.com/migration-guides/jobstreet-and-jobsdb-uplift/phase-2-job-posting Detailed instructions for integrating the SEEK Questionnaire Panel, covering necessary updates for existing implementations (e.g., script tags, event dispatches) and initial setup steps for new integrations, including handling browser tokens and saving questionnaire data. It also covers implementing ATS Screening Questions. ```APIDOC SEEK Questionnaire Panel Updates (Existing Implementation): - Update script tag and render function call - Remove any references to `errorHandler` - Update calls from `SEEKQuestionnairePanel.save()` to `dispatchEvent('seek:questionnaire:save');` - Update handling of `errorCode` / `isError` SEEK Questionnaire Panel (First-time Implementation): - Add script tag to the page - Call render function on page load and when changes to `positionProfile` input are made - Handle browser token request - Call `dispatchEvent('seek:questionnaire:save')` prior to previewing, posting or saving a draft of the job ad ATS Screening Questions (Existing Question Library): - Implement the `createApplicationQuestionnaire` mutation - Post job ad with returned questionnaire ID ``` -------------------------------- ### APIDOC: PostingInstruction Schema Type Source: https://developer.seek.com/schema/named-type/CreateWebhookSubscription_SubscriptionInput Defines instructions for posting a position, including details on where and how the job should be advertised. ```APIDOC type PostingInstruction ``` -------------------------------- ### Example JSON Input for Apply with SEEK Button Configuration Source: https://developer.seek.com/guides/2025-revision/awsk-migration-considerations This JSON object illustrates the detailed structure for configuring the 'Apply with SEEK' button. It includes comments explaining each field, such as the `redirectUri` for post-authorization redirection, `hirerId` for identifying the hirer, `applicationUri` for the apply form, an optional `seekHirerJobReference`, and the `token` received from SEEK. ```JSON { "input": { // The HTTPS URL to redirect the candidate to after authorization. // Your software may embed dynamic state in the query string for CSRF protection. "redirectUri": "https://example.com/seek-auth?state=%2Fposition%2F123%2Fapply", // The identifier for the SEEK hirer that is filling the position. // " on behalf of " will be displayed on the authorization page. "hirerId": "seekAnzPublicTest:organization:seek:93WyyF1h", // The HTTPS URL of your apply form for the specific position. "applicationUri": "https://example.com/position/123/apply", // An optional hirer-provided free-text job reference. "seekHirerJobReference": "REQ-65558", // The seek-token received as part of the query string when the candidate arrived from SEEK. "token": "eyJqb2JJZCI6MCwiY2FuZGlkYXRlSWQiOjAsInNlc3Npb25JZCI6IiJ9" } } ```