renue

ARTICLE

HERP Hire API統合の実装ガイド【2026年版】— 候補者取得×ページネーション×AI採用分析連携の本番アーキテクチャ

公開日: 2026/4/6

HERP Hireは日本の主要な採用管理システム(ATS)の1つで、約30の求人媒体との連携と豊富なAPIを特徴とする。本記事では、HERP Hire APIを自社システムに統合する本番実装パターンを、renueが実装している`HerpHireClient`クラスをもとに解説する。Bearer認証・ページネーション対応・SSL検証切替・AI採用分析への接続まで、本番運用で押さえるべき設計を網羅する。

HERP Hire API統合の基礎

HERP Hireは約30の求人媒体と連携可能なATSで、API経由でHERPからデータを取得したり、HERPへのデータ登録・更新ができる。自社システムから採用データを活用したい場合、以下のユースケースが典型である。

  • 独自ダッシュボード構築: HERPの標準画面では表示しきれない分析軸を追加
  • AI採用分析との連携: 候補者データをAIに渡して適合度スコアリング
  • SlackやTeamsへの自動通知: 応募があれば担当者にリアルタイム通知
  • 既存人事システムとの連携: SmartHR等へのオンボーディング手続き自動化
  • 独自レポート自動生成: 週次/月次の採用KPIレポート

HERP Hire APIの基本仕様

項目仕様
ベースURLhttps://public-api.herp.cloud/hire/v1
認証方式Bearer Token(APIキー)
主要エンドポイント/candidacies(応募)、/requisitions(求人)、/members(担当者)
ページネーションhasNextPageフラグ方式
レスポンス形式JSON(camelCase)
日付形式YYYY-MM-DD または ISO 8601
レート制限公式ドキュメントに従う

本番品質のHERP統合に必要な6レイヤー

レイヤー1: Bearer認証の設計

HERP Hire APIはBearer認証を採用している。APIキーの管理は他のAPI統合と同様、環境変数経由が原則である。

class HerpHireClient:
    def __init__(self, api_key=None):
        self.api_key = api_key or env_setting.HERP_HIRE_API_KEY
        if not self.api_key:
            raise ValueError("HERP_HIRE_API_KEY environment variable is not set")
        self.base_url = "https://public-api.herp.cloud/hire/v1"
        # SSL検証: LOCAL環境では無効化、それ以外は有効
        self.verify_ssl = env_setting.PY_ENV != "LOCAL"

    def _get_headers(self):
        return {
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json",
        }

起動時チェックの重要性

APIキーが未設定の状態で初期化すると`ValueError`を投げる。これは本番運用で重要なfail-fastパターンである。

  • 起動時に設定ミスを即座に検出
  • リクエスト時のエラーより早期に発見
  • デプロイ直後の動作確認で気付ける
  • サイレントな失敗を防ぐ

レイヤー2: SSL検証の環境別切替

renueの実装では`PY_ENV`環境変数でSSL検証を切り替えている。

self.verify_ssl = env_setting.PY_ENV != "LOCAL"

LOCAL環境でSSLを無効化する理由

  • 開発用プロキシを経由する場合(Charles Proxy等)
  • 自己署名証明書を使うテスト環境
  • ネットワーク制約が厳しい環境での開発

本番では必須

本番・ステージング環境では必ずSSL検証を有効にする。無効化するとMITM攻撃のリスクがある。この切替をフラグ1つで管理することで、開発体験と本番セキュリティを両立できる。

レイヤー3: ページネーション対応

HERP Hire APIは`hasNextPage`フラグ方式のページネーションを採用している。候補者が多いクライアントでは1ページに収まらないことが多いため、全ページ取得が必須である。

APIレスポンス形式

{
    "candidacies": [
        {
            "id": "string",
            "name": "string",
            "status": "active",
            "requisitionId": "string",
            "appliedAt": "2019-08-24T14:15:22Z",
            "step": "entry",
            ...
        }
    ],
    "hasNextPage": true
}

全ページ自動取得の実装

def get_candidacies(
    self,
    status=None,
    requisition_id=None,
    step=None,
    appliedAtFrom=None,
    appliedAtTo=None,
    fetch_all_pages=True,
    max_pages=None,
    **kwargs,
):
    url = f"{self.base_url}/candidacies"
    headers = self._get_headers()
    params = {}
    if status:
        params["status"] = status
    if requisition_id:
        params["requisitionId"] = requisition_id  # HERP API uses camelCase
    if appliedAtFrom:
        params["appliedAtFrom"] = appliedAtFrom
    if appliedAtTo:
        params["appliedAtTo"] = appliedAtTo

    params.update(kwargs)

    all_candidacies = []
    page = 1
    max_pages_limit = max_pages if max_pages is not None else 1000  # 無限ループ防止
    # ...

無限ループ防止ガード

重要な安全対策が`max_pages_limit`である。`max_pages=None`でも1000ページを上限とすることで、APIバグや想定外のレスポンスで無限ループになるリスクを排除する。

fetch_all_pages フラグの使い分け

  • fetch_all_pages=True(デフォルト): 全ページ取得。集計や分析用途
  • fetch_all_pages=False: 最初の1ページのみ。画面の先頭表示用途

レイヤー4: 命名規則の対応(camelCase vs snake_case)

HERP Hire APIはJavaScript的なcamelCase命名である(`requisitionId`, `appliedAtFrom`等)。一方、Pythonコードはsnake_caseが標準。この不整合をどう扱うかが設計のポイントになる。

パラメータ名の扱い方針

# Python関数の引数はsnake_caseで受ける
def get_candidacies(
    self,
    requisition_id=None,
    appliedAtFrom=None,  # ← 意図的にcamelCaseのまま受ける
):
    params = {}
    if requisition_id:
        params["requisitionId"] = requisition_id  # snake_case → camelCase変換
    if appliedAtFrom:
        params["appliedAtFrom"] = appliedAtFrom  # そのままパススルー

renueの実装では、APIパラメータと同じ名前を使う場合(`appliedAtFrom`)は、Pythonの引数もcamelCaseのまま受ける折衷案を採用している。変換層が1箇所で済み、呼び出し側もHERP APIドキュメントを見ながらコードを書きやすい。

2つの戦略の比較

戦略メリットデメリット
完全snake_case変換Python的に綺麗全パラメータの変換が必要
選択的camelCase維持APIドキュメントと一致規約の一貫性が崩れる

チームの方針やコードレビューの基準に応じて選択する。renueは後者の実用的パターンを採用している。

レイヤー5: フィルタパラメータの活用

HERP Hire APIは豊富なフィルタパラメータを提供する。本番運用では以下を活用する。

主要フィルタパラメータ(動作確認済み)

  • status: active / rejected / withdrew 等でステータス絞り込み
  • requisitionId: 求人ID(特定職種の候補者のみ)
  • step: entry / screening / interview 等の選考ステップ
  • appliedAtFrom / appliedAtTo: 応募日の範囲
  • stepUpdatedAtFrom / stepUpdatedAtTo: 選考ステップ更新日の範囲

実務上のクエリパターン

  • 今月の新規応募: `appliedAtFrom=月初`
  • 先週進捗があった候補者: `stepUpdatedAtFrom=7日前`
  • 特定職種の一次面接待ち: `requisitionId=X, step=interview_1st`
  • アクティブな全候補者: `status=active`

レイヤー6: AI採用分析との連携

HERPからデータを取得しただけでは価値は生まれない。AI採用分析と連携して以下を自動化する。

AI連携の典型パターン

  • 候補者スコアリング: 履歴書情報をLLMに渡して適合度を算出
  • 離脱予測: ステップが長期間停滞している候補者を自動検知
  • 書類チェック自動化: 履歴書から要件に合致しない候補者を除外
  • 面接サマリー生成: 議事録AIとの連携で面接内容を自動要約
  • スカウト文面生成: 候補者属性に合わせたパーソナライズド文面

データフローの設計

[HERP Hire]
  ↓ HerpHireClient.get_candidacies
[自社DB(候補者マスタ)]
  ↓ AI分析エンジン(LLM)
[スコアリング / 要約 / 推薦]
  ↓ 通知エンジン
[Slack / Email / 独自ダッシュボード]

ポーリング戦略

HERPからのデータ同期はWebhookではなくポーリング方式になる。頻度の設計が重要。

ポーリング頻度の推奨

  • 15分間隔: 緊急性の高い新規応募通知
  • 1時間間隔: 通常のダッシュボード更新
  • 日次: 統計レポート用のフル同期
  • イベント駆動: Slackコマンドでオンデマンド実行

差分同期の実装

全件取得はコストが高い。`stepUpdatedAtFrom`を前回実行時刻に設定することで、更新された候補者のみを取得する差分同期が可能である。

エラーハンドリング

HERP APIとの通信では以下のエラーに対処する必要がある。

  • 401 Unauthorized: APIキー無効(fail-fast+通知)
  • 403 Forbidden: 権限不足(権限設定を確認)
  • 404 Not Found: 指定IDが存在しない
  • 429 Too Many Requests: レート制限(指数バックオフでリトライ)
  • 500 Server Error: HERP側の問題(短時間後リトライ)
  • timeout: ネットワーク遅延(3回までリトライ)

データ保護の留意点

候補者データは極めて機密性の高い個人情報である。以下の対策が必須。

必須のセキュリティ対策

  • アクセス制御: 採用担当者のみデータにアクセス可
  • ログ記録: 誰が何のデータを見たかを完全記録
  • 暗号化: DBに保存する際は個人情報を暗号化
  • 保持期間: 不合格候補者のデータは一定期間後に削除
  • GDPR/APPI対応: 候補者からの削除要求に対応
  • LLMへの送信: 氏名・連絡先は匿名化してから送信

匿名化の実装例

LLMに候補者情報を渡す際、以下を匿名化する。

  • 氏名 → 「候補者A」
  • メールアドレス → 削除
  • 電話番号 → 削除
  • 住所 → 都道府県レベルのみ
  • 前職企業名 → 業種のみ(任意)

スキル・職歴・志望動機などはそのまま渡す。これにより個人特定されずに適合度分析ができる。

HERP Hire以外のATSへの応用

この設計パターンは他のATSにも応用可能である。

ATSAPI認証方式特徴
HERP HireBearer Token国内ATS、30媒体連携
SmartHR採用管理OAuth 2.0SmartHRとのシームレス統合
Sonar ATSBearer Token新卒採用特化
ジョブカン採用管理APIキージョブカングループ連携
WorkdayOAuth 2.0グローバル大企業向け
GreenhouseBasic Auth米国系テック企業標準

共通するのは「認証 → フィルタ → ページネーション取得 → 差分同期」のパターン。renueの`HerpHireClient`設計は他ATSにも応用できる。

renueの実装特徴

renueは「Self-DX First」の方針のもと、HERP Hire統合を自社プロダクトとして実装している。社内12業務を553のAIツールで自動化済み(2026年1月時点)であり、採用業務もその一環として自動化が進んでいる(全て公開情報)。

技術スタック

  • 言語: Python 3.11
  • HTTPクライアント: requests
  • ロギング: api_logger(HERP API専用logger)
  • 認証: Bearer Token(環境変数)
  • SSL検証: 環境別切替
  • ページネーション: hasNextPage方式対応
  • 最大取得上限: 1000ページ

導入時のよくある失敗パターン

  • APIキーチェックを起動時に行わない: 運用開始後にエラー
  • 全ページ取得を忘れる: 100件以降のデータが取れない
  • 無限ループ防止ガードがない: APIバグで大量リクエスト発生
  • camelCase/snake_caseの混在で混乱: パラメータ渡し間違い
  • SSL検証を本番で無効化: セキュリティリスク
  • 差分同期なしの全件取得: 毎回膨大なリクエスト
  • 候補者情報をそのままLLMに送信: プライバシー違反
  • エラー時の通知がない: 採用活動が止まっていることに気付けない

業界別の活用パターン

業界活用パターン
SaaS/ITエンジニア候補者のスキル自動分析、GitHub連携
コンサル職歴からの適合度スコアリング、面接質問生成
メーカー専門分野マッチング、勤務地最適化
小売・サービス大量応募のスクリーニング自動化
金融コンプライアンスチェック、資格確認
医療免許情報の確認、シフト適合性分析

よくある質問

HERP Hire APIの利用料金は?

HERP Hireの契約プランに含まれている(プランによって利用可否が異なる)。追加料金なしでAPIを使える場合が多い。最新の料金情報は公式サイトで確認すること。

レート制限はどれくらい?

公式ドキュメントに従う必要がある。本番運用では余裕を持たせて1分あたり数十リクエスト程度に抑えるのが安全。差分同期を活用してリクエスト数を最小化する。

Webhookは使える?

2026年4月時点ではポーリング方式が主流。Webhookが提供されている場合でも、データ保護の観点からポーリング+差分同期の組み合わせが本番運用では推奨される。

候補者情報をLLMに渡しても良い?

個人情報を匿名化してから渡すのが原則。氏名・連絡先・住所(都道府県以外)は削除または仮名化する。LLMプロバイダーはEnterpriseプラン(データを学習に使わない)を選ぶ。

導入後に最も改善するKPIは?

「書類選考の時間」と「候補者への初回返信までの時間」が最も改善する。AIスコアリングで優先度が明確になるため、重要候補者へのアプローチが早くなる。結果として優秀な候補者の獲得率が向上する。