- 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で求人を作成、upsert、または再有効化します。node- IDで求人ステータスを取得します。nodes- IDで求人一覧を取得します。jobsIngest.expireSourcedJobsBySourcedPostingId- 求人を無効化します。
認証
When you become an Indeed partner, Indeed sets up an app for your integration. Sign in to Partner Console to view your app and OAuth credentials (client ID, secret, and authorization code for 3-legged OAuth). Exchange credentials for an access token to authenticate API calls.
Indeedと連携してAPIを呼び出すをご覧ください。
Job Sync APIの呼び出しに費用は発生せず、Sponsored Jobs API利用ポリシーの費用と制限には含まれません。
求人を作成する
Indeedに求人を作成します。
スクリーナー質問付きで求人を作成するには、スクリーナー質問付きで求人を作成するをご覧ください。
Indeedは、現地の規制とIndeedのポリシーに対応するために、国ごとに異なるフィールドを要求することがあります。たとえば、米国で作成する求人は、日本で作成する求人とは異な る動作をすることがあります。国ごとに求人を作成し、その国の規制とIndeedのポリシーに従ってください。APIリファレンスでは、国固有の要件について説明しています。
日本の求人については、日本向け求人掲載ガイドラインと例をご覧ください。
この呼び出しのレート制限については、レート制限をご覧ください。
リクエスト - 求人を作成する
求人を作成するには、jobsIngest.createSourcedJobPostingsミューテーションを呼び出します。
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 エントリーのスクリーナー質問付きで求人を作成する場合は必須です。それ以外の場合は任意です。スクリーナー質問フィールドについては、スクリーナー質問フィールドをご覧ください。
-
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 エントリーのスクリーナー質問付きで求人を作成するには、jobsIngest.createSourcedJobPostingsミューテーションを呼び出します。jobsIngest.createSourcedJobPostingsリクエストのjobPostingsフィールドで、求人タイトル、求人説明、勤務地、福利厚生、およびソース名を含む求人ソースの詳細を指定します。Indeedは、現地の規制とIndeedのポリシーに対応するために、国ごとに異なるフィールドを要求することがあります。たとえば、米国で作成する求人は、日本で作成する求人とは異なる動作をすることがあります。国ごとに求人を作成し、その国の規制とIndeedのポリシーに従ってください。APIリファレンスでは、国固有の要件について説明しています。必須フィールドについては、createSourcedJobPostingsミューテーションフィールドの表をご覧ください。
Indeed エントリーの応募フローでスクリーナー質問を表示するには、CreateSourcedJobPostingInput.applyMethodフィールドも設定する必要があります。
Indeed エントリーの応募フローでスクリーナー質問を表示するには、次のいずれかの方法を使用します。
- 方法 1
質問をJSON形式で書式設定し、その質問をHTTPS URLに
POSTします。各求人について、Job Sync APIの
SourcedJobPostingIndeedApplyInput.applyQuestionsフィールドでそのURLを設定します。Indeed エントリーのスクリーナー質問を追加するをご覧ください。
- 方法 2
Job Sync APIの
SourcedJobPostingIndeedApplyInput.applyQuestionsDetailsフィールドで、スクリーナー質問スキーマを定義します。考慮事項をご覧ください。
applyMethodフィールドは、型がSourcedJobPostingApplyMethodInputで、応募者の応募方法を定義します。Indeed エントリーのスクリーナー質問付きで求人を作成する場合は必須です。それ以外の場合は任意です。
この表では、applyQuestionsフィールド、applyQuestionsDetailsフィールド、およびそれらの関連フィールドについて説明します。
| フィールド | 型 | 説明 |
|---|---|---|
applyQuestions | URI | 方法 1を使用してスクリーナー質問付きの求人を作成する場合は必須です。 Indeed エントリーの応募フロー向けに、JSON形式の質問文字列を返すURLです。 |
applyQuestionsDetails | IndeedApplyQuestionsDetailsInput | 方法 2を使用してスクリーナー質問付きの求人を作成する場合は必須です。 Indeed エントリーの応募フロー用のスクリーナー質問スキーマです。 |
questions | IndeedApplyScreenerQuestionsDefinitionInput | V1.x標準に準拠した、Indeed エントリー応募フロー用のスクリーナー質問定義です。 |
screenerQuestions | [ScreenerQuestionBodyInput!]! | 職務経験、スキル、認定資格など、対象求人に関する一般的で適切に書式設定された質問です。民族、性別、障害に関するデモグラフィック質問をこのリストに含めないでください。そのような質問は、 |
demographicQuestions | [DemographicQuestionsBodyInput!]! | 民族、性別、障害など、応募者の保護対象属性に関する具体的で適切に書式設定された質問です。法域によっては、これらの質問を規制しています。Indeedのシステムと、場合によってはお客様のシステムでも、これらの質問を特別な方法で処理する必要があります。 デモグラフィック質問は、EEOコンプライアンスのため、米国の求人に限定されます。 職務経験、スキル、認定資格などに関する一般的なスクリーナー質問をこのリストに含めないでください。そのような質問は、 |
方法 1の例です。applyQuestionsを使ってIndeed エントリーのスクリーナー質問を作成します。
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 エントリーのスクリーナー質問を作成します。
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で求人ステータスを取得するための認証
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つの求人に対応します。 |
| |
その求人でIndeed エントリーが有効かどうかを示します。 |
求人ステータス
Indeedの求人管理ページへのリンク付きでIndeedの求人ステータスを表示します。ユーザーが画像をクリックすると、Indeed上の追加の求人情報にアクセスできます。
-
コールトゥアクション画像を取得するには、
nodeクエリのseats.jobPost配下にあるexternalPartnerCallToActionサブクエリを呼び出します。サポートされているロケールを指定してください。localeはフォールバックロジックをサポートします。fr_CHをリクエストして、そのロケールがサポートされていない場合、localeはより一般的なfrにフォールバックします。適切な一致が存在しない場合、デフォルトは
en_USです。externalPartnerCallToActionクエリは、次の求人ステータス画像のいずれかに対応するimageUrlを返します。求人ステータス 画像 説明 求人はIndeedで公開中です。
求人は検索結果に表示されます。
求人はIndeedで期限切れです。
求人は検索結果に表示されません。
求人はIndeedでスポンサーシップが必要です。
求人は検索結果に表示されません。
求人ステータスはIndeedで不明です。
Indeedで求人が見つからないか、ユーザーアカウントにその求人へのアクセス権がありません。
注:
APIは
not_found.svg画像を返しません。コールトゥアクション画像は求人データの一部であるため、求人が見つからない場合、画像を返せません。ただし、ATSは必要に応じてこの画像を使用できます。求人が検索結果に表示されるようにするには、Indeedで更新が必要です。
-
ユーザー向けの求人詳細ページURLを取得するには、
managementUrls.viewJobをクエリします。 -
コールトゥアクション画像を、クリック可能なリンクとして求人詳細ページに埋め込みます。
-
ユーザーがそのページにアクセスしたときに、求人ステータスを更新します。
FAQ > 求人の表示状態をご覧ください。
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に送信した求人は、upsertします。
- 別のパートナーが送信した求人は、updateします。updateは主に広告代理店向けです。
日本のみ:広告代理店およびIndeed PLUSパブリッシャーネットワークのパートナーを除き、すべてのパートナーが求人をupdateできます。
関連項目:
Indeed および Indeed PLUS 配信ネットワークで求人を作成または更新します。
upsert オペレーションは、求人が存在する場合は更新し、存在しない場合は作成します。
値を変更しない場合でも、必須の求人フィールドはすべて指定してください。
この呼び出しのレート制限については、レート制限をご覧ください。
リクエスト - 求人を作成または更新する
求人を作成または更新するには、求人を作成すると同様に、jobsIngest.createSourcedJobPostingsミューテーションを呼び出します。
求人を作成または更新する例
この例では、単一フィードクライアント向けの米国求人を作成または更新します。求人を作成するの例と同じですが、titleフィールドとdescriptionフィールドを更新しています。
求人を作成したときに使用したものと同じSourcedJobPostingMetadataInput.jobPostingId、SourcedJobPostingJobSourceInput.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日後に再有効化した場合、APIが新しいsourcedPostingId値を返す可能性があります。コードでは、同じsourcedPostingId値と新しいsourcedPostingId値のどちらにも対応できるようにしてください。
sourcedPostingId値は必ず保存してください。求人を無効化する場合も、無効化された求人を再有効化する場合も、この値が必要です。
リクエスト - 求人を無効化する
求人を無効化するには、jobsIngest.expireSourcedJobsBySourcedPostingIdミューテーションをSourcedJobPosting.sourcedPostingIdで呼び出します。このフィールドには、求人のIndeed雇用主求人IDの値を設定します。
求人を無効化する例
この例では、単一フィードクライアントの求人を無効化します。
mutation { jobsIngest { expireSourcedJobsBySourcedPostingId(input: { jobs: [{ sourcedPostingId: "123" }, { sourcedPostingId: "456" }] }) { results { trackingKey } } }}レスポンス - 求人を無効化する
Indeedは、応答前に求人が存在するかどうかを確認しません。レスポンスは常にACCEPTEDです。
レスポンスにはトラッキングIDが表示されます。
{ "data": { "jobsIngest": { "expireSourcedJobsBySourcedPostingId": { "results": [ { "trackingKey": "1h958ob2601bv800" } ] } } }}jobsIngest.expireSourcedJobsBySourcedPostingIdミューテーションで指定した各sourcedPostingIdに対して、APIはExpireSourcedJobResultオブジェクトを返します。このオブジェクトには次の内容が含まれます。
| 項目 | 説明 |
|---|---|
| IndeedからのトラッキングIDです。 | |
| 一意の求人 ID を含む union 型です。 |
APIは、無効なリクエストやバックエンドエラーなど、求人無効化に失敗した各試行に対するエラーレスポンスを返す場合もあります。お客様のシステムでこれらのエラーレスポンスをログに記録すると、Indeed側で発生した失敗の種類を把握できます。APIは標準のGraphQL errors配列でエラーを返します。検証エラーの詳細については、GraphQLドキュメントのValidationをご覧ください。
レート制限
Job Sync API は、jobsIngest.createSourcedJobPostingsミューテーションを使った求人の作成と求人の作成または更新に対してレート制限を適用します。
レート制限は、jobsIngest.expireSourcedJobsBySourcedPostingIdの呼び出しには適用されません。
求人を無効化するには、jobsIngest.expireSourcedJobsBySourcedPostingIdミューテーションをご覧ください。
これらの制限は、APIの可用性を維持するためのベストプラクティスに従っています。Indeedはこれらの制限を通常の日次のJob Sync API使用量より高く設定していますが、短時間に大量のリクエストがある場合はスロットリングします。レート制限に達しないようにするには、APIリクエストを10分間に分散してください。
アクションは不要です。レート制限を超えた場合、HTTPレベル、またはGraphQLリクエストのJSONレスポンス内にあるerrors配列で、HTTP 429ステータスコードを受け取ります。
これらの制限を超えると、APIは通知を返します。
| リクエストサイズ | レート制限 |
|---|---|
| 1 件の求人を含む小規模リクエスト |
|
| 2〜10 件の求人を含む中規模リクエスト |
|
10 件を超える求人を含む大規模リクエスト |
|
関連情報:
エラーをトラブルシューティングする
Job Sync API固有のエラーについては、エラーをトラブルシューティングするをご覧ください。
GraphQLにアクセスする前に発生するOAuthエラーをトラブルシューティングするには、OAuthエラーをトラブルシューティングするをご覧ください。
Indeedで求人が表示されない一般的な原因については、FAQをご覧ください。