シミュレートされたGraphQL環境
連携中にコードをテストします。
Indeedは2026年6月30日にGraphQLシミュレート環境を廃止します。この日までにこの環境からの移行を完了してください。
概要
Indeedでは、Disposition Sync API、Job Sync API、Employer Data APIをテストするためのシミュレートされたGraphQL環境を提供しています。各操作は本番GraphQL APIの主要な動作をシミュレートします。入力検証、求人と採用企業の管理、シミュレート環境内で送信した求人のステータス確認、求人応募の応募者ステータスデータの送信が含まれます。本番Indeedシステムで行われる一部の非同期処理は、シミュレート環境ではほぼリアルタイムで実行され、本番にデータを送らずに連携を進めやすくします。
Indeed本番APIにおける採用企業と求人データの管理には、シミュレートされていない追加のタスクや処理があります。例えば、求人は品質や重複投稿のチェックを受けます。こうしたタスクや処理の多くはシミュレート環境では有効になっていませんが、シミュレート環境を使うことで連携が正しく設定されているかを確認できます。
Indeedの本番GraphQL APIを呼び出す前に、シミュレートされたGraphQL環境で連携を検証してください。
開始する前に
IndeedのシミュレートされたGraphQL APIは、本番のGraphQLエンドポイントとは別のエンドポイント https://simulated-apis.indeed.com/graphql で提供されています。シミュレートされたGraphQL APIを使うには、本番GraphQL APIと同じ情報を渡し、エンドポイントだけ差し替え てください。
シミュレート環境の要件はIntegrate with Indeed and call APIsを参照してください。同じトークン、POST メソッド、ヘッダーを使う必要があります。レスポンス形式は本番APIと同じで、シミュレートAPIであることを示す _simulatedMessage フィールドが追加されます。
{ "data": { "_simulatedMessage": "This is a simulated response"... }, "errors": [...]}使用方法
Employer Data
採用企業の作成と更新をシミュレートします。Create Employer(採用企業の作成)とUpdate Employer(採用企業の更新)を参照してください。https://simulated-apis.indeed.com/graphql のシミュレートGraphQL APIを使用する各呼び出しには、認証済みの2-legged OAuthアクセストークンが必要です。採用企業データはすべて、認可時に使った Client Id にスコープされます。
Job Sync
求人の作成、更新、期限切れをシミュレートします。Create job posting(求人投稿の作成)、Upsert job posting(求人投稿のアップサート)、Expire job posting(求人投稿の期限切れ)を参照してください。Job Syncのデータはすべて、認可時に使った Client Id にスコープされます。シミュレートされたGraphQL APIでのみ利用できるJob Status(求人ステータス)操作で、シミュレートした求人のステータスを確認できます。
Job Status
シミュレートした求人投稿呼び出しで取得した sourcedPostingId を指定して、求人のステータス確認をシミュレートします。シミュレートした求人に対しても、本番GraphQL APIと同様の追加の非同期チェックの一部が実行されます。これらのチェックでよくある検証問題を把握でき、連携の確認に役立ちます。すべてのチェックや処理がシミュレート環境で行われるわけではないため、本番APIと挙動が異なる場合があります。
Job Status操作では、シミュレートした求人の有効/期限切れ、表示設定、関連タグを確認できます。タグは、シミュレートした求人ペイロードの無効または不適切な部分を示します。
Disposition Sync
求人応募の応募者ステータスデータの送信をシミュレートします。Disposition Sync APIを参照してください。https://simulated-apis.indeed.com/graphql のシミュレートGraphQL APIを使用する各API呼び出しには、認証済みの2-legged OAuthアクセストークンが必要です。採用企業データはすべて、認可時に使った Client Id にスコープされます。
リファレンス
採用企業データの例
シミュレートされたGraphQL API環境で採用企業を作成するリクエスト例:
mutation CreateEmployerExample{ patchEmployer(input: { id: { type: "SAMPLE_TYPE" id: "EMPLOYER_ID_IN_ATS" } employerName: "Example employer" employerAttributes: { employerType: JURIDICAL_PERSON countrySpecificAttributes: [ { country: "JP" websiteUrl: "https://example.com" phoneNumber: "+81123456789" }] localeSpecificAttributes: [ { country: "JP" language: "ja" isGlobalDefault: true description: "Free text to describe the employer" headquarterAddress: "Minato-ku, Tokyo" leader: { name: "Leader name" } }] } }) { responseCode }}シミュレートされたGraphQL API環境で採用企業を更新するリクエスト例:
mutation UpdateDescription{ patchEmployer(input: { id: { type: "SAMPLE_TYPE" id: "EMPLOYER_ID_IN_ATS" } employerAttributes: { localeSpecificAttributes: [ { country: "JP" language: "ja" description: "Updated employer description" }] } }) { attributeUpdated }}求人投稿の例
次の例は、シミュレートされたGraphQL API環境で求人投稿を作成します。
mutation{ jobsIngest { createSourcedJobPostings(input: { jobPostings: [ { body: { title: "title 1" description: "description 1" location: { country: "US" cityRegionPostal: "Syracuse, New York 13209" } benefits: [] } metadata: { jobSource: { companyName: "Company" sourceName: "Source" sourceType: "Employer" } jobPostingId: "JobId1" datePublished: "2023-01-02T12:00Z" url: "http://example.com/careers/job1.html" contacts: [ { contactType: ["contact", "recruiter"] contactInfo: { contactEmail: "songdatadrop2@gmail.com" contactPhone: "+10001112223" contactName: "SL1" } }] } }] }) { results { jobPosting { sourcedPostingId } } } }}次の例は、シミュレートされたGraphQL API環境で求人投稿をアップサートします。
mutation { jobsIngest { createSourcedJobPostings(input: { jobPostings: [{ body: { title: "title 1" description: "description 1" location: { country: "US" cityRegionPostal: "Syracuse, New York 13209" } benefits: [] } metadata: { jobSource: { companyName: "Company" sourceName: "Source" sourceType: "Employer" } jobPostingId: "JobId1" datePublished: "2023-01-02T12:00Z" url: "http://example.com/careers/job1.html" contacts: [{ contactType: ["contact", "recruiter"] contactInfo: { contactEmail: "songdatadrop2@gmail.com" contactPhone: "+10001112223" contactName: "SL1" } }] } }] }) { results { jobPosting { sourcedPostingId } } } }}次の例は、シミュレートされたGraphQL API環境で求人投稿を期限切れにします。
mutation { jobsIngest { expireSourcedJobsBySourcedPostingId( input: { jobs: [{ sourcedPostingId: "YOUR_SOURCED_POSTING_ID" }] } ) { results { trackingKey } } }}求人ステータスの例
次の例は、シミュレートされたGraphQL API環境でシミュレートした求人のステータスを取得します。
query CheckJobStatus { findSimulatedJobStatuses(input: { sourcedPostingIds: ["YOUR_SOURCED_POSTING_ID"] }) { results { isActive simulatedModerationMessages sourcedPostingId visibilityLevel } }}応募者ステータス連携の例
次の例は、シミュレートされたGraphQL API環境で応募者ステータスデータを送信します。
mutation ExampleSimulatedDisposition { partnerDisposition { send( input: { dispositions: [ { atsName: "ExampleATS" dispositionStatus: LIKED identifiedBy: { indeedApplyID: "1234567890" } rawDispositionDetails: "Job liked on portal" rawDispositionStatus: "Like job" statusChangeDateTime: "2025-02-25T10:00:00Z" } ] } ) { numberGoodDispositions failedDispositions { identifiedBy { indeedApplyID ittk universalApplyId alternateIdentifier { jobIdentifier { indeedJobKey employerJobId atsApplicationIdentifier { requisitionId companyName applicationId } indeedJobKey } jobSeekerIdentifier { indeedJobSeekerKey emailAddress } } } rationale } } }}