- Job Sync API ワークフロー
- Job Sync API リファレンス
- 認証
- 求人を作成する
- リクエスト – 求人を作成する
- レスポンス – 求人を作成する
- スクリーナー質問付きで求人を作成する
- リクエスト – スクリーナー質問付きで求人を作成する
- レスポンス – スクリーナー質問付きで求人を作成する
- ID で求人ステータスを取得する
- ID で求人ステータスを取得するための認証
- リクエスト – ID で求人ステータスを取得する
- レスポンス – ID で求人ステータスを取得する
- 求人ステータス
- ID で求人一覧を取得する
- リクエスト – ID で求人一覧を取得する
- レスポンス – ID で求人一覧を取得する
- 求人を作成または更新する
- リクエスト – 求人を作成または更新する
- レスポンス – 求人を作成または更新する
- 求人を期限切れにする
- リクエスト – 求人を期限切れにする
- レスポンス – 求人を期限切れにする
- レート制限
- エラーをトラブルシューティングする
Job Sync API ガイド
Indeed で求人を作成および管理します。
このAPIとそのドキュメントを使用して連携を構築すると、APIに関する追加の利用規約およびガイドラインに同意したことになります。
Job Sync API ワークフロー
Job Sync API を使用して、Indeed で求人を作成および管理します。
Job Sync API と連携すると、次のことができます。
- 1.認証する。
- 2.求人を作成する。スクリーナー質問は含みません。
- 3.スクリーナー質問付きで求人を作成する。
- 4.ID で求人ステータスを取得する。
- 5.ID で求人一覧を取得する。
- 6.求人を作成または更新する。既存の求人を更新するか、新しい求人を作成します。
- 7.求人を期限切れにする。
- 8.レート制限を確認する。
- 9.GraphQL エラーをトラブルシューティングする。
- 10.FAQ を確認する。
Job Sync API リファレンス
jobsIngest.createSourcedJobPostings- Indeed で求人を作成、更新、または再有効化します。node- ID で求人ステータスを取得します。nodes- ID で求人一覧を取得します。jobsIngest.expireSourcedJobsBySourcedPostingId- 求人を期限切れにします。
認証
Indeed パートナーになると、Indeed が連携用のアプリを作成します。Partner Console にサインインして、アプリと OAuth 認証情報(クライアント ID、クライアントシークレット、および 3-legged OAuth の場合は認可コード)を確認します。認証情報をアクセストークンと交換し、API 呼び出しを認証します。
Indeed と連携して API を呼び出すをご覧ください。
Job Sync API の呼び出しは無料です。Sponsored Jobs API 利用ポリシーの費用や制限には含まれません。
求人を作成する
Indeedに求人を作成します。
スクリーナー質問付きで求人を作成するには、スクリーナー質問付きで求人を作成するをご覧ください。
Indeed は、各地域の法規制と Indeed のポリシーに対応するため、国ごとに異なるフィールドを要求することがありま す。たとえば、米国で作成した求人は、日本で作成した求人とは異なる動作をすることがあります。国ごとに求人を作成し、その国の規制と Indeed のポリシーに従ってください。API リファレンスでは、国固有の要件を説明しています。
日本の求人については、日本向け求人掲載ガイドラインと例をご覧ください。
この呼び出しのレート制限については、レート制限をご覧ください。
リクエスト – 求人を作成する
求人を作成するには、jobsIngest.createSourcedJobPostings ミューテーションを呼び出します。
jobPostings フィールドで、求人タイトル、求人説明、勤務地、福利厚生、および ソース名 を含む求人ソースの詳細を指定します。
CreateSourcedJobPostingInput では、次のフィールドを定義します。
body フィールド
必須の body フィールドは、SourcedJobPostingBodyInput 型で、求人説明を含みます。
| フィールド | 型 | 説明 |
|---|---|---|
description | String | 必須。求人説明です。勤務時間、給与、資格要件、休日、その他の求人詳細を含めてください。 求人説明は HTML で指定してください。詳細については、求人説明の書式設定をご覧ください。 |
metadata フィールド
必須の metadata フィールドは、SourcedJobPostingMetadataInput! 型で、求人メタデータを含みます。
| フィールド | 型 | 説明 |
|---|---|---|
jobPostingId | String | 必須。ATS 内の求人 ID です。次の要件が適用されます。
|
sourceName | String | 必須。
採用企業が、別々の担当者が管理する複数の求人グループを持つ場合は、各グループに一意の 求人の |
contactEmail | EmailAddress! | 必須。RFC 822 形式の連絡先メールアドレスです。 |
contactPhone | PhoneNumber | 必須。クライアント連絡先の電話番号です。E.164 形式で指定します。電話番号が E.164 形式でない場合、API は検証エラーを返します。 |
trackingUrl | WebUrl | この機能は日本では利用できません。 任意です。この URL は、誰かが求人を閲覧したときに外部分析ツールで求人閲覧を追跡します。 |
applyMethod フィールド
applyMethod フィールドは、SourcedJobPostingApplyMethodInput 型で、求職者の応募方法を定義します。
このフィールドは、Indeed Apply のスクリーナー質問付きで求人を作成する場合に必須です。それ以外の場合は任意です。スクリーナー質問のフィールドについては、スクリーナー質問フィールドをご覧ください。
-
jobRequisitionIdはスキーマ上では任意ですが、jobPostingIdと異なる場合、Indeed では必須です。日本の求人の場合: ID または
jobPostingIdと同じ値を設定します。 -
SourcedJobPostingJobContactInputの hiring manager と recruiter の値は、スキーマ上では任意ですが、取得できる場合は Indeed で必須です。
関連項目:
SourcedJobPostingMetadataInputのjobRequisitionIdとjobPostingIdSourcedJobPostingJobContactInput
APIは、SourcedJobPostingJobSourceInputのsourceNameフィールドとSourcedJobPostingMetadataInputのjobPostingIdフィールドから、先頭と末尾の空白を削除します。
その他のリクエストフィールドについては、createSourcedJobPostings をご覧ください。
求人を作成します。
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" } }], trackingUrl: "https://www.example.com/" } }] }) { results { jobPosting { sourcedPostingId } } } }}mutation CreateJobPostingExample { jobsIngest { createSourcedJobPostings(input: { jobPostings: [{ body: { title: "Customer Support" description: "<h2 data-segment-type=\"header\" data-segment-label=\"WorkHours\">Working hours\n</h2><div data-segment-type=\"content\" data-segment-label=\"WorkHours\">8 working hours per day\n 5 working days per week</div>" descriptionFormatting: RICH_FORMATTING benefits: [] salary: { currency: "JPY" period: "HOUR" minimumMinor: 2000 fineGrainedSalaryInformation: { totalSalaryMinor: 2000 workingHours: 1 fixedOvertimePay: false } } hasProbationaryPeriod: NO location: { country: "JP" streetAddress: "108-0023 東京都港区芝浦3-1-21 田町ステーションタワーS18階" } } metadata: { jobSource: { companyName: "Sample Company" sourceName: "Sample Company" sourceType: "Employer" employerIds: [{ type: "YOUR EMPLOYER TYPE PROVIDED BY INDEED" id: "EmployerId1" }] } taxonomyClassification: { jobTypes: ["75GKK"] occupations: ["N3YNG"] attributes: ["7ADHN"] } jobPostingId: "YourJobId1" datePublished: "2023-01-01T12:34:56+09:00" url: "https://example.com/jobs/aaabbbccc" contacts: { contactType: "contact", contactInfo: { contactEmail: "contact@career.example.com" } }, trackingUrl: "https://www.example.com/" } applyMethod: { indeedApply: { postUrl: "https://example.com/applypost" apiToken: "API TOKEN HERE" } } }] }) { results { jobPosting { sourcedPostingId } } } }}レスポンス – 求人を作成する
成功したレスポンスでは、Indeed が各求人に対して一意の sourcedPostingId を生成します。
{ "data": { "jobsIngest": { "createSourcedJobPostings": { "results": [ { "jobPosting": { "sourcedPostingId": "e29aaba8-2cef-447f-a1e0-bcb7ec3fa730", "employerJobId": "aXJpOi8vYXBpcy5pbmRlZWQuY29tL0VtcGxveWVySm9iL2UyOWFhYmE4LTJjZWYtNDQ3Zi1hMWUwLWJjYjdlYzNmYTczMA==" } } ] } } }}sourcedPostingId の値は、API が求人を受理するか拒否するかによって異なります。
-
API が完全な求人を受理した場合、
sourcedPostingIdには Indeed の雇用主求人 ID が入ります。この値を使って求人を期限切れにしたり更新したりします。スパムチェックと不正チェックの後、Indeed は数分から数時間以内に求人をインデックス化し、Indeed で利用できるようにします。createSourcedJobPostingsミューテーションまたは XML job feed を通じて求人を作成した場合、その求人を期限切れにするには、お客様側で対応する必要があります。該当の求人は明示的に期限切れにする必要があります。他のユーザーが
updateSourcedJobPostingsミューテーションを呼び出した場合や、この求人の Indeed 求人詳細ページで Edit をクリックした場合でも、その求人は明示的に期限切れにする必要があります。関連項目:
-
欠落データや不正な形式のデータが原因で API が求人を拒否した場合、
sourcedPostingIdはnullになり、API は標準の GraphQLerrors配列でエラーを返します。
検証エラーをトラブルシューティングするには、GraphQL エラーをトラブルシューティングするをご覧ください。検証エラーの詳細については、GraphQL ドキュメントの Validationをご覧ください。
sourcedPostingId を使って、求人を期限切れにすることができます。
スクリーナー質問付きで求人を作成する
Job Sync API と連携すると、スクリーナー質問付きの求人を作成できます。
スクリーナー質問は、応募者が採用企業の条件を満たしているかどうかを採用企業がすばやく判断するのに役立ちます。スクリーナー質問を追加すると、採用企業は適格な候補者とつながることにより多くの時間を使えるようになります。Indeed はお客様に代わってスクリーナー質問をホストしません。お客様のシステムがスクリーナー質問をサポートする場合、Indeed に連携を承認してもらうには、お客様が実装する必要があります。
リクエスト – スクリーナー質問付きで求人を作成する
Indeed Apply のスクリーナー質問付きで求人を作成するには、jobsIngest.createSourcedJobPostings を呼び出します。jobPostings フィールドで、求人タイトル、求人説明、勤務地、福利厚生、および ソース名 を含む求人ソースの詳細を指定します。
Indeed は、各地域の法規制と Indeed のポリシーに対応するため、国ごとに異なるフィールドを要求することがあります。国ごとに求人を作成し、その国の規制と Indeed のポリシーに従ってください。API リファレンスでは、国固有の要件を説明しています。必須フィールドについては、createSourcedJobPostings ミューテーションフィールドをご覧ください。
Indeed Apply フローでスクリーナー質問を表示するには、CreateSourcedJobPostingInput の applyMethod フィールドも設定する必要があります。
次のいずれかの方法を使用します。
- 方法 1
質問を JSON でフォーマットし、HTTPS URL に
POSTリクエストで送信します。各求人について、その URL を
SourcedJobPostingIndeedApplyInput.applyQuestionsに設定します。Indeed Apply のスクリーナー質問を追加するをご覧ください。
- 方法 2
SourcedJobPostingIndeedApplyInput.applyQuestionsDetailsでスクリーナー質問スキーマを定義します。考慮事項をご覧ください。
applyMethod フィールドは、SourcedJobPostingApplyMethodInput 型で、求職者の応募方法を定義します。このフィールドは、Indeed Apply のスクリーナー質問付きで求人を作成する場合に必須です。それ以外の場合は任意です。
この表では、applyQuestions、applyQuestionsDetails、および関連フィールドを説明します。
| フィールド | 型 | 説明 |
|---|---|---|
applyQuestions | URI | 方法 1を使用してスクリーナー質問付きで求人を作成する場合に必須です。 Indeed Apply フロー用の、JSON 形式の質問文字列を返す URL です。 |
applyQuestionsDetails | IndeedApplyQuestionsDetailsInput | 方法 2を使用してスクリーナー質問付きで求人を作成する場合に必須です。 Indeed Apply フロー用のスクリーナー質問スキーマです。 |
questions | IndeedApplyScreenerQuestionsDefinitionInput | V1.x 標準に準拠した、Indeed Apply フロー用のスクリーナー質問定義です。 |
screenerQuestions | [ScreenerQuestionBodyInput!]! | 職務経験、スキル、認定資格など、求人に関する一般的な質問です。 民族、性別、障害に関するデモグラフィック質問はここに含めないでください。それらは |
demographicQuestions | [DemographicQuestionsBodyInput!]! | 民族、性別、障害など、応募者の保護対象属性に関する質問です。 法域によっては、これらの質問が規制されています。Indeed のシステム、および場合によってはお客様のシステムでも、これらを別の方法で処理する必要があります。 デモグラフィック質問は、EEO コンプライアンスのため、米国求人に限定されます。 一般的なスクリーナー質問はここに含めないでください。それらは |
方法 1 の例です。applyQuestions を使用して Indeed Apply のスクリーナー質問を作成します。
mutation CreateSourcedJobPostings($companyName: String!$sourceName: String!$indeedApplyToken: ID!) { jobsIngest { createSourcedJobPostings(input: { jobPostings: [{ body: { title: "Software Engineer - All SQ and SQ types" description: "We are looking for a talented software engineer" descriptionFormatting: TEXT location: { latitude: 43.0729 longitude: -76.2161 country: "US" streetAddress: "123 Main St" cityRegionPostal: "Syracuse, New York 13209" } benefits: ["Health Insurance", "401k"] } metadata: { jobSource: { companyName: $companyName sourceName: $sourceName sourceType: "Employer" } jobPostingId: "JOB-12345" datePublished: "2023-01-01T12:00:00Z" url: "https://example.com/jobs/12345" contacts: [{ contactType: ["contact"] contactInfo: { contactEmail: "jobs@example.com" contactName: "HR Department" } }], visibility: { hideFromIndeedSearch: { reason: "OPT_OUT" } } trackingUrl: "https://www.example.com/" } applyMethod: { indeedApply: { postUrl: "https://example.com/apply" apiToken: $indeedApplyToken, resumeRequired: NO, applyQuestions: "https://your-webserver.com/job/questions/jb12345" } } }] }) { results { jobPosting { sourcedPostingId employerJobId } } } }}方法 2 の例です。applyQuestionsDetails を使用して Indeed Apply のスクリーナー質問を作成します。
mutation CreateSourcedJobPostings($companyName: String!$sourceName: String!$indeedApplyToken: ID!) { jobsIngest { createSourcedJobPostings(input: { jobPostings: [{ body: { title: "Software Engineer - All SQ and SQ types" description: "We are looking for a talented software engineer" descriptionFormatting: TEXT location: { latitude: 43.0729 longitude: -76.2161 country: "US" streetAddress: "123 Main St" cityRegionPostal: "Syracuse, New York 13209" } benefits: ["Health Insurance", "401k"] } metadata: { jobSource: { companyName: $companyName sourceName: $sourceName sourceType: "Employer" } jobPostingId: "JOB-12345" datePublished: "2023-01-01T12:00:00Z" url: "https://example.com/jobs/12345" contacts: [{ contactType: ["contact"] contactInfo: { contactEmail: "jobs@example.com" contactName: "HR Department" } }], visibility: { hideFromIndeedSearch: { reason: "OPT_OUT" } } trackingUrl: "https://www.example.com/" } applyMethod: { indeedApply: { postUrl: "https://example.com/apply" apiToken: $indeedApplyToken, resumeRequired: NO, applyQuestionsDetails: { questions: { screenerQuestions: [{ text: { integer: { questionInput: { id: "int1" question: "How many years of experience do you have?" minValue: 0 maxValue: 5 required: true, } } } } { text: { decimal: { questionInput: { id: "dec1" question: "What is your current hourly rate?" minValue: 10.0 maxValue: 120.0 required: false } qualification: { type: NON_BLOCKING range: { minValue: 15.0, maxValue: 100.0 } } } } } { text: { freeform: { id: "free1" question: "Briefly describe your relevant experience" maxCharCount: 500 required: true } } } { textarea: { id: "ta1" question: "Tell us about your most challenging project" maxCharCount: 2000 required: true } } { select: { questionInput: { id: "sel1" question: "What programming language are you most proficient in?" options: [{ value: "java", label: "Java" } { value: "python", label: "Python" } { value: "javascript", label: "JavaScript" } { value: "csharp", label: "C#" }] required: true } qualification: { type: NON_BLOCKING match: { values: ["java", "python"] } } } } { multiselect: { questionInput: { id: "multi1" question: "Which of the following technologies have you worked with?" options: [{ value: "react", label: "React" } { value: "angular", label: "Angular" } { value: "vue", label: "Vue" } { value: "svelte", label: "Svelte" }] required: true } qualification: { type: NON_BLOCKING match: { type: ANY, values: ["react", "angular"] } } } } { date: { questionInput: { id: "date1" question: "When can you start?" format: "MM-dd-yyyy" minDate: "2025-02-01T00:00:00Z" maxDate: "2025-12-31T00:00:00Z" required: true } qualification: { type: NON_BLOCKING range: { minValue: "2025-02-15T00:00:00Z" maxValue: "2025-12-31T00:00:00Z" } } } } { file: { id: "file1" question: "Please upload a sample of your work" format: ["pdf", "doc", "docx"] required: true, min: 1 } } { information: { id: "info1" text: "<p>Please note that all candidates must complete a coding assessment as part of the interview process.</p>" } } { pageBreak: { id: "page1" } } { hierarchical: { id: "hier1" question: "Select your location" options: [{ value: "us", label: "United States" } { value: "ca", label: "Canada" } { value: "uk", label: "United Kingdom" }] hierarchicalOptions: [{ id: "states" condition: { id: "hier1", values: ["us"] } options: [{ value: "ny", label: "New York" }, { value: "ca", label: "California" }] } { id: "provinces" condition: { id: "hier1", values: ["ca"] } options: [{ value: "on", label: "Ontario" }, { value: "bc", label: "British Columbia" }] }] required: true } }] demographicQuestions: [{ textarea: { id: "demo_ta1" question: "Please describe any accommodations you may need" maxCharCount: 1000 required: false } } { text: { freeform: { id: "demo_free1" question: "How did you hear about this position?" maxCharCount: 200 required: false } } } { text: { integer: { id: "demo_int1" question: "How many dependents do you have?" minValue: 0 maxValue: 20 required: false } } } { text: { decimal: { id: "demo_dec1" question: "What is your desired salary?" minValue: 30000.0 maxValue: 200000.0 required: false } } } { text: { numeric: { id: "demo_num1" question: "What is your zip code?" required: false } } } { select: { id: "demo_sel1" question: "What is your gender?" options: [{ value: "male", label: "Male" } { value: "female", label: "Female" } { value: "non-binary", label: "Non-binary" } { value: "prefer-not", label: "Prefer not to say" }] required: false } } { multiselect: { id: "demo_multi1" question: "Which of the following describe your ethnicity? (Select all that apply)" options: [{ value: "hispanic", label: "Hispanic or Latino" } { value: "white", label: "White" } { value: "black", label: "Black or African American" } { value: "asian", label: "Asian" } { value: "native" label: "Native American or Alaska Native" } { value: "pacific" label: "Native Hawaiian or Pacific Islander" } { value: "prefer-not", label: "Prefer not to say" }] required: false } } { date: { id: "demo_date1" question: "What is your date of birth?" format: "MM/dd/yyyy" required: false } } { information: { id: "demo_info1" text: "<p>The following questions are for Equal Employment Opportunity purposes only and do not affect your application status.</p>" } } { pageBreak: { id: "demo_page1" } }] } } } } }] }) { results { jobPosting { sourcedPostingId employerJobId } } } }}レスポンス – スクリーナー質問付きで求人を作成する
レスポンス例については、レスポンス - 求人を作成するをご覧ください。
ID で求人ステータスを取得する
ID で求人のステータスを取得します。
ID で求人ステータスを取得するための認証
このメソッドには、次のいずれかの OAuth トークンタイプが必要です。
| トークンタイプ | 説明 |
|---|---|
| 3-legged OAuth token | ユーザーがサインインしていない場合、またはアクセストークンの有効期限が切れている場合は、求人ステータスの代わりに Log in with Indeed ボタンを表示します。 ユーザーがサインインしたあと、3-legged OAuth トークンを取得します。ATS の求人一覧へのリダイレクト URL を登録してください。 |
| 2‑legged OAuth token that specifies an advertiser | ユーザーをサインインさせたくない場合は、このトークンを使用します。 2-legged OAuth で Sponsored Jobs API を使用している広告代理店は、すでにこのトークンタイプを持っています。 |
OAuth アクセストークンには、次のスコープを含める必要があります。
employer_accessemployer.hosted_job
OAuth トークンにスコープを追加する方法については、Scopesをご覧ください。
アクセストークンは ATS 内で安全に保管し、ユーザー間で共有しないでください。Indeed は、お客様のシステムを求人の正しい情報源として信頼します。あるユーザーが投稿した求人に別のユーザーのアクセストークンを使うと、Indeed がその別ユーザーに他者の求人へのアクセス権を付与する可能性があります。
アクセストークンを取得したら、クエリに含めます。Indeed では、ユーザーが更新された求人ステータスを確認するたび にサインインしなくて済むよう、アクセストークンの有効期限が切れる前に更新することを推奨しています。
リクエスト – ID で求人ステータスを取得する
ID で求人ステータスを取得するには、OAuth トークン を使って node クエリを呼び出します。
node は id を受け取ります。これは Base64 エンコードされた IRI 形式の雇用主求人 ID です。createSourcedJobPostings が返す employerJobId を使います。
query { node(id: "aXJpOi8vYXBpcy5pbmRlZWQuY29tL0VtcGxveWVySm9iLzkxZGU0ZjVhLWE1MWYtNGQ1Ni1iOWI0LWNhMDQzZWVjNDAzMQ==" ) { ...on EmployerJob { id jobData { title datePostedOnIndeed dateCreated description company jobLocation { countryCode city postalCode fullAddress } externalJobPageUrl externalPostingMetadata { jobPostingId jobRequisitionId campaignCategories trackingUrls isIntegratedJob } } managementUrls { viewJob } seatsConnection { pageInfo { endCursor hasNextPage hasPreviousPage startCursor } seats { jobPost { id externalPartnerCallToAction(input: { locale: "en-us" }) { imageAltText imageUrl } status { globalStatus { lifecycleStatus isIndeedApplyActive } surfaceStatuses { isRejected isSponsorshipRequired isMissingRequiredSponsorship } } } } } } }}レスポンス – ID で求人ステータスを取得する
node は、指定した雇用主求人 ID の EmployerJob オブジェクトを返します。このオブジェクトは Node インターフェースを実装します。
このクエリは 1 件の結果を返すため、カーソルは同一で、次ページも前ページもありません。
{ "data": { "node": { "id": "aXJpOi8vYXBpcy5pbmRlZWQuY29tL0VtcGxveWVySm9iLzkxZGU0ZjVhLWE1MWYtNGQ1Ni1iOWI0LWNhMDQzZWVjNDAzMQ==", "jobData": { "title": "Certified Nursing Assistant CNA", "datePostedOnIndeed": "2022-03-22T20:33:28Z", "dateCreated": "2022-03-22T20:33:28Z", "description": "Anytown Health and Rehabilitation Center in Anytown, USA is a 186-bed center offering a variety of individualized, health care services for our patients and residents. We are seeking a qualified and committed team member to join our team.", "company": "Anytown Health and Rehabilitation Center", "jobLocation": { "countryCode": "US", "city": "Cambridge", "postalCode": null, "fullAddress": null }, "externalJobPageUrl": "http://www.indeed.com/job/certified-nursing-assistant-cna-9354ed892ad3a1b6", "externalPostingMetadata": { "jobPostingId": "CBA-Anytown-Posting-Id", "jobRequisitionId": "CBA-Anytown-Req-Id", "campaignCategories": [], "trackingUrls": [], "isIntegratedJob": false } }, "managementUrls": { "viewJob": "https://employers.indeed.com/jobs/view?employerJobId=aXJpOi8vYXBpcy5pbmRlZWQuY29tL0VtcGxveWVySm9iLzkxZGU0ZjVhLWE1MWYtNGQ1Ni1iOWI0LWNhMDQzZWVjNDAzMQ==" }, "seatsConnection": { "pageInfo": { "endCursor": "YVhKcE9pOHZZWEJwY3k1cGJtUmxaV1F1WTI5dEwwcHZZbEJ2YzNRdk5EQXhOVFkxTW1OaFpEYzJZVFF4TlE9PQ==", "hasNextPage": false, "hasPreviousPage": false, "startCursor": "YVhKcE9pOHZZWEJwY3k1cGJtUmxaV1F1WTI5dEwwcHZZbEJ2YzNRdk5EQXhOVFkxTW1OaFpEYzJZVFF4TlE9PQ==" }, "seats": [ { "jobPost": { "id": "aXJpOi8vYXBpcy5pbmRlZWQuY29tL0pvYlBvc3QvNDAxNTY1MmNhZDc2YTQxNQ==", "externalPartnerCallToAction": [ { "imageUrl": "https://dlogqfjusi9uq.cloudfront.net/cta/en_US/not_searchable.svg", "imageAltText": "Update needed on Indeed" } ], "status": { "globalStatus": [ { "lifecycleStatus": "INACTIVE", "isIndeedApplyActive": false } ], "surfaceStatuses": [ { "isRejected": false, "isSponsorshipRequired": false, "isMissingRequiredSponsorship": false } ] } } } ] } } }}EmployerJob には、次のフィールドが含まれます。
| フィールド | 説明 |
|---|---|
id型: ID! | Employer Job ID(EJID)です。これは Indeed Resource Identifier(IRI)形式の sourcedPostingId をエンコードした値です。この値を使って、求人を期限切れにする、求人を更新する、または 求人を作成または更新する ことができます。 |
jobData型: EmployerJobData | 求人データを含みます。
|
managementUrls.viewJob型: WebUrl! | Indeed 上の採用企業向け求人詳細ページの URL です。このページでは、ユーザーはモデレーション情報を含む求人詳細を確認し、その求人が候補者にどのように表示されるかを確認できます。 |
seatsConnection型: EmployerJobSeatsConnection | 求人シートのページネーション付き一覧です。求人シートには、勤務地、勤務形態、報酬の詳細が含まれます。求人には 0 件以上のシートを含めることができ、各シートは 1 つの求人に対応します。 |
globalStatus.lifecycleStatus型: JobPostLifecycleStatus |
|
globalStatus.isIndeedApplyActive型: Boolean! | その求人で Indeed Apply が有効かどうかを示します。 |
求人ステータス
Indeed の求人管理ページへのリンクとして Indeed の求人ステータスを表示します。ユーザーが画像をクリックすると、Indeed でさらに詳しい情報を確認できます。
-
コールトゥアクション画像を取得するには、
seats.jobPostの下にあるexternalPartnerCallToActionサブクエリを呼び出します。サポートされているロケールを指定してください。localeではフォールバックロジックが使われます。fr_CHをリクエストしてそのロケールがサポートされていない場合は、frにフォールバックします。一致するロケールがない場合のデフォルトは
en_USです。このクエリは、次の求人ステータス画像のいずれかに対応する
imageUrlを返します。求人ステータス 画像 説明 求人は Indeed で公開中です。
求人は検索結果に表示されます。
求人は Indeed で期限切れです。
求人は検索結果に表示されません。
求人は Indeed でスポンサーシップが必要です。
求人は検索結果に表示されません。
その求人のステータスは Indeed で不明です。
Indeed で求人が見つからないか、ユーザーアカウントにその求人へのアクセス権がありません。
注:
API は
not_found.svg画像を返しません。コールトゥアクション画像は求人データの一部であるため、求人が見つからない場合はこの画像を返せません。ただし、ATS は必要に応じてこの画像を使用できます。求人を検索結果に表示するには、Indeed で更新が必要です。
-
ユーザーの求人詳細ページの URL を取得するには、
managementUrls.viewJobをクエリします。 -
コールトゥアクション画像を、クリック可能なリンクとして求人詳細ページに埋め込みます。
-
ユーザーがページを開いたときに、求人ステ ータスを更新します。
よくある質問 > 求人の表示状態をご覧ください。
ATS での求人ステータス表示例です。
求人詳細ページ(Indeed にサインイン済み)

求人一覧ページ(Indeed にサインイン済み)

ID で求人一覧を取得する
複数の求人の詳細を表示します。認証については、ID で求人ステータスを取得するための認証をご覧ください。
リクエスト – ID で求人一覧を取得する
nodes は複数の ID を受け取ります。ids には、IRI 形式の雇用主求人 ID の配列を指定します。
query { nodes(ids: [ "aXJpOi8vYXBpcy5pbmRlZWQuY29tL0VtcGxveWVySm9iLzkxZGU0ZjVhLWE1MWYtNGQ1Ni1iOWI0LWNhMDQzZWVjNDAzMQ==" ]) { ...on EmployerJob { id jobData { title datePostedOnIndeed dateCreated description company jobLocation { countryCode city postalCode fullAddress } externalJobPageUrl externalPostingMetadata { jobPostingId jobRequisitionId campaignCategories trackingUrls isIntegratedJob } } managementUrls { viewJob } seatsConnection { pageInfo { endCursor hasNextPage hasPreviousPage startCursor } seats { jobPost { id externalPartnerCallToAction(input: { locale: "en-us" }) { imageAltText imageUrl } status { globalStatus { lifecycleStatus isIndeedApplyActive } surfaceStatuses { isRejected isSponsorshipRequired isMissingRequiredSponsorship } } } } } } }}レスポンス – ID で求人一覧を取得する
EmployerJob の配列を返します。詳細は、レスポンス – ID で求人ステータスを取得する の表をご覧ください。
{ "data": { "nodes": [{ "id": "aXJpOi8vYXBpcy5pbmRlZWQuY29tL0VtcGxveWVySm9iLzkxZGU0ZjVhLWE1MWYtNGQ1Ni1iOWI0LWNhMDQzZWVjNDAzMQ==", "jobData": { "title": "Certified Nursing Assistant CNA", "datePostedOnIndeed": "2022-03-22T20:33:28Z", "dateCreated": "2022-03-22T20:33:28Z", "description": "Anytown Health and Rehabilitation Center in Anytown, USA is a 186-bed center offering a variety of individualized, health care services for our patients and residents. We are seeking a qualified and committed team member to join our team.", "company": "Anytown Health and Rehabilitation Center", "jobLocation": { "countryCode": "US", "city": "Cambridge", "postalCode": null, "fullAddress": null }, "externalJobPageUrl": "http://www.indeed.com/job/certified-nursing-assistant-cna-9354ed892ad3a1b6", "externalPostingMetadata": { "jobPostingId": "CBA-Anytown-Posting-Id", "jobRequisitionId": "CBA-Anytown-Req-Id", "campaignCategories": [], "trackingUrls": [], "isIntegratedJob": false } }, "managementUrls": { "viewJob": "https://employers.indeed.com/jobs/view?employerJobId=aXJpOi8vYXBpcy5pbmRlZWQuY29tL0VtcGxveWVySm9iLzkxZGU0ZjVhLWE1MWYtNGQ1Ni1iOWI0LWNhMDQzZWVjNDAzMQ==" }, "seatsConnection": { "pageInfo": { "endCursor": "YVhKcE9pOHZZWEJwY3k1cGJtUmxaV1F1WTI5dEwwcHZZbEJ2YzNRdk5EQXhOVFkxTW1OaFpEYzJZVFF4TlE9PQ==", "hasNextPage": false, "hasPreviousPage": false, "startCursor": "YVhKcE9pOHZZWEJwY3k1cGJtUmxaV1F1WTI5dEwwcHZZbEJ2YzNRdk5EQXhOVFkxTW1OaFpEYzJZVFF4TlE9PQ==" }, "seats": [{ "jobPost": { "id": "aXJpOi8vYXBpcy5pbmRlZWQuY29tL0pvYlBvc3QvNDAxNTY1MmNhZDc2YTQxNQ==", "externalPartnerCallToAction": [{ "imageUrl": "https://dlogqfjusi9uq.cloudfront.net/cta/en_US/not_searchable.svg", "imageAltText": "Update needed on Indeed" }], "status": { "globalStatus": [{ "lifecycleStatus": "INACTIVE", "isIndeedApplyActive": false }], "surfaceStatuses": [{ "isRejected": false, "isSponsorshipRequired": false, "isMissingRequiredSponsorship": false }] } } }] } }, { "id": "aXJpOi8vYXBpcy5pbmRlZWQuY29tL0VtcGxveWVySm9iLzkxZGU0ZjVhLWE1MWYtNGQ1Ni1iOWI0LWNhMDQzZWVjNDAzMZ==", ... }] }}ユーザーが ATS で Indeed の求人情報を確認する場合は、Indeed の求人管理ページへのリンク付きで Indeed の求人ステータスを表示できます。詳細については、求人ステータスをご覧ください。
求人を作成または更新する
- 自社がIndeedに送信した求人は、upsertします。
- 別のパートナーが送信した求人は、updateします。updateは主に広告代理店向けです。
日本のみ:広告代理店およびIndeed PLUSパブリッシャーネットワークのパートナーを除き、すべてのパートナーが求人をupdateできます。
関連項目:
Indeed と Indeed PLUS 配信ネットワークで求人を作成または更新します。
この操作では、求人が存在する場合は更新し、存在しない場合は作成します。
値を変更しない場合でも、必須の求人フィールドはすべて指定してください。
この呼び出しのレート制限については、レート制限をご覧ください。
リクエスト – 求人を作成または更新する
求人を作成または更新するには、求人を作成する場合と同様に jobsIngest.createSourcedJobPostings を呼び出します。
求人を作成または更新する例
この例では、単一フィードクライアント向けの米国求人を作成または更新します。求人を作成する と同じ例を使用していますが、title フィールドと description フィールドを更新しています。
求人を作成したときに使用した jobPostingId、sourceName、および OAuth クライアント ID と同じ値を使用してください。
変更しないフィールドであっても、必須フィールドはすべて指定してください。API は、求人作成時に Indeed が生成したものと同じ一意の sourcedPostingId を返します。
mutation { jobsIngest { createSourcedJobPostings(input: { jobPostings: [{ body: { title: "Updated job title" description: "Updated job description" 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 } } } }}レスポンス – 求人を作成または更新する
このミューテーションは、求人作成時に Indeed が生成したものと同じ sourcedPostingId を返します。この値は Indeed の雇用主求人 ID で、求人を期限切れにしたり更新したりするときに使用します。
求人を期限切れにする
IndeedとIndeed PLUSパブリッシングネットワークから求人を削除します。
Job Sync APIは求人を自動的には期限切れにしません。貴社の採用ページから削除した求人は、Job Sync APIを明示的に呼び出して期限切れにする必要があります。
Indeed は、Job Sync API を通じて送信した求人を自動では期限切れにしません。
ATS が求人の作成と期限切れを制御します。キャリアページから求人を削除する場合は、その求人を期限切れにするために Job Sync API を明示的に呼び出す必要があります。
createSourcedJobPostings ミューテーションまたは XML job feed を通じて求人を作成した場合、その求人を期限切れにするには、お客様側で対応する必要があります。該当の求人は明示的に期限切れにする必要があります。
他のユーザーが updateSourcedJobPostings ミューテーションを呼び出した場合や、この求人の Indeed 求人詳細ページで Edit をクリックした場合でも、その求人は明示的に期限切れにする必要があります。
関連項目:
期限切れになった求人を再有効化するには、アクティブな求人を更新する場合と同様に、期限切れになった求人の jobPostingId と sourceName を使って jobsIngest.createSourcedJobPostings を呼び出します。
ATS がその求人を再有効化した日付を定義するには、datePublished フィールドの値を更新します。
期限切れになった求人は、期限切れ後 30 日間再有効化できます。
30 日後、Indeed はその求人の統計情報と設定をアーカイブすることがあります。30 日後に再有効化した場合、Indeed は通常、新しい sourcedPostingId を返します。そのため、コードが同じ値と新しい値の両方に対応できることを確認してください。
sourcedPostingId の値は必ず保存してください。求人を期限切れにする場合も、期限切れになった求人を再有効化する場合も必要です。
リクエスト – 求人を期限切れにする
求人を期限切れにするには、jobsIngest.expireSourcedJobsBySourcedPostingId を sourcedPostingId とともに呼び出します。これは求人の Indeed の雇用主求人 ID に設定します。
求人を期限切れにする例
この例では、単一フィードクライアントの求人を期限切れにします。
mutation { jobsIngest { expireSourcedJobsBySourcedPostingId(input: { jobs: [{ sourcedPostingId: "123" }, { sourcedPostingId: "456" }] }) { results { trackingKey } } }}レスポンス – 求人を期限切れにする
Indeed は、応答前に求人が存在するかどうかを確認しません。レスポンスは常に ACCEPTED です。
レスポンスには追跡 ID が表示されます。
{ "data": { "jobsIngest": { "expireSourcedJobsBySourcedPostingId": { "results": [ { "trackingKey": "1h958ob2601bv800" } ] } } }}指定した各 sourcedPostingId に対して、API は ExpireSourcedJobResult オブジェクトを返します。これには次のフィールドが含まれます。
| 項目 | 説明 |
|---|---|
trackingKey型: String! | Indeed からの追跡 ID です。 |
inputData型: ExpireSourcedJobResultInfo | 一意の求人 ID を含む union 型です。 |
API は、無効なリクエストやバックエンド障害など、期限切れ処理の失敗に対してエラーを返すこともあります。お客様のシステムでこれらのエラーレスポンスをログに記録しておくと、Indeed 側で発生した失敗の種類を特定できます。API は標準の GraphQL errors 配列でエラーを返します。検証エラーの詳細については、GraphQL ドキュメントの Validationをご覧ください。
レート制限
Job Sync API は、jobsIngest.createSourcedJobPostings の呼び出しのうち、求人を作成する場合と 求人を作成または更新する場合にレート制限を適用します。
レート制限は jobsIngest.expireSourcedJobsBySourcedPostingId には適用されません。
求人を期限切れにするには、jobsIngest.expireSourcedJobsBySourcedPostingId をご覧ください。
これらの制限は、API の可用性を維持するのに役立ちます。Indeed はこれらの制限を通常の 1 日あたりの Job Sync API 使用量より高く設定していますが、短期間に大量のリクエストがある場合はスロットリングします。レート制限に達しないようにするには、リクエストを 10 分間に分散してください。
特別な対応は必要ありません。レート制限を超えると、API は HTTP レベル、または GraphQL JSON レスポンス内の errors 配列 で HTTP 429 を返します。
これらの制限を超えると、API は次のように通知します。
| リクエストサイズ | レート制限 |
|---|---|
| 1 件の求人を含む 小規模 リクエスト |
|
| 2 件から 10 件の求人を含む 中規模 リクエスト |
|
| 10 件を超える求人を含む 大規模 リクエスト |
|
関連情報:
エラーをトラブルシューティングする
Job Sync API 固有のエラーについては、エラーをトラブルシューティン グするをご覧ください。
GraphQL にアクセスする前に発生する OAuth エラーをトラブルシューティングするには、OAuth エラーをトラブルシューティングするをご覧ください。
求人が Indeed に表示されない一般的な原因については、FAQをご覧ください。