導入マニュアル

はじめかた

契約から、最初の1件が届くまでを順に書いてあります。 あなたの側でやることは4つ(Slack にアプリを入れる/審査のチャンネルを決める/鍵を保管する/サーバーに2箇所書く)で、 それ以外は HANAUTA が持ちます。所要はサーバーの実装を除いて30分ほどです。

API の呼び方と返るものは API のしくみ にあります。ここでは手順だけを扱います。

全体の順序

お話を伺い、HANAUTA が
契約を登録する
契約で決めること
本人確認の強さage_onlydocumentidentity_match のどれを許すか(複数可)
審査の場あなたの Slack のチャンネルか、HANAUTA の担当者か
画像を持つ期間0〜365日。既定 0日(審査が済んだら消す)
画像の取り出し取り出しを許す種別(表・裏・自撮り)。既定は「1枚も取れない」
取り出し元の IP許可リスト。空なら制限なし
運用者Slack から設定を変えられる人のメールアドレス
Webhook の届け先結果を届ける URL。これだけは後から Slack で変えられます/ekyc-config

上の6つは契約で決めるもので、Slack からは変えられません。変えるときは HANAUTA に連絡してください。

HANAUTA
導入リンクを受け取り、Slack にアプリを入れるあなた
審査に使うチャンネルを決める(/ekyc-config bindあなた
API キーと Webhook の署名鍵を受け取り、保管するあなた
サーバーに「始める」「受け取る」の2箇所を書き、アプリで撮影画面を開くあなた
1件流して、通しで確かめる一緒に

審査を HANAUTA の担当者に任せる場合は、二と三が要りません(末尾「HANAUTA に審査を任せる場合」)。

お話を伺う

最初に決めるのは4つです。あとから変えられますが、最初の1件を流す前に決めておくと手戻りがありません。

本人確認の強さage_only(年齢だけ)/document(書類の確認まで)/identity_match(自撮りで本人まで)。説明の頁の3段
審査の場あなたの Slack のチャンネルか、HANAUTA の担当者か
画像を持つ期間0日(審査が済んだら消す)〜365日。既定は0日
画像の取り出し取り出しを許す種別(表・裏・自撮り)。既定は「1枚も取れない」。必要なら取り出し元の IP も

HANAUTA がこの内容で契約を登録します。あなたの側で入力するものはありません。

Slack にアプリを入れる

HANAUTA から導入リンク(URL 1本・24時間有効)を受け取ります。 あなたの Slack ワークスペースの管理者が、そのワークスペースにログインしているブラウザで開いてください。

  1. リンクを開くと、Slack の「アプリの許可」画面が出ます。求める権限は次の4つだけです
  2. 「許可する」を押します
  3. 「接続しました」という頁が出れば完了です。この頁は閉じて構いません
chat:write審査カードをチャンネルへ書く・消す
commands/ekyc-config を受け付ける
users:readusers:read.email設定を変える人が運用者かどうかを、メールで確かめる
Slack は無料プランで構いません。 チャンネルを作る・一覧する権限は求めません(審査のチャンネルはあなたが作ります)。 アプリは HANAUTA が公開設定にしたもの1つで、アプリの審査や掲載は不要です。

「許可しない」を押した場合や、リンクの期限が切れた場合は何も起きません。HANAUTA に連絡すると新しいリンクを出します。 アプリを入れ直す(同じリンクを再度開く)と、新しい接続に置き換わります。

審査に使うチャンネルを決める

  1. 審査に使うチャンネルを作ります。プライベートチャンネルを勧めます(審査カードには身分証へのリンクが載ります)
  2. そのチャンネルで /invite @Humatch と打ち、アプリを入れます
  3. 同じチャンネルで /ekyc-config bind と打ちます
  4. 「✅ このチャンネルを審査の場にしました。ここに審査カードが届きます。」と返れば完了です。続けて「あなたを運用者として登録しました」と出ます(最初に打った人が、最初の運用者になります)
誰が打てるか初回は、そのワークスペースの誰でも打てます。既に場が決まっているのに別のチャンネルへ移すときは、運用者(後述)だけです
「まだ結びついていません」と返る二のアプリの導入が済んでいません。導入リンクを開き直してください
「アプリが応答しなかった」と出るもう一度打ってください。続くなら HANAUTA に連絡してください
審査カードに画像そのものは載りません。 載るのは短命のリンクで、審査が済むとカードごと消えます。Slack に画像が残ることはありません。

鍵を受け取り、保管する

秘密は2つあります。どちらもサーバーの環境変数か秘密の保管庫に置き、アプリやリポジトリには入れないでください。

API キーあなたのサーバーが Humatch を呼ぶときの鍵。HANAUTA から受け取ります。Authorization: Bearer … に載せます。利用者の端末へ配らないでください(端末からは撮影画面の URL だけで足ります)
Webhook の署名鍵結果が本物か確かめるための鍵。あなたが Slack から自分で作って受け取ります(下の手順)。2本まで並行して持てるので、入れ替えは止めずにできます

署名鍵を受け取る

  1. 運用者(次の項)が、審査のチャンネルで /ekyc-config と打ちます
  2. 開いた画面の「署名鍵を生成」を押します。鍵が1本足されます
  3. 同じ画面に「署名鍵を受け取る(10分・1回だけ)」のボタンが出ます。押すとブラウザで頁が開き、鍵の値が表示されます
  4. その場で控えてください。 頁は1回しか開けず、10分で期限が切れます。閉じたら二度と表示されません

鍵の値は Slack を通りません(通るのはリンクだけです)。受け取りそこねたら「生成」を押し直してください。鍵は2本までなので、押し直すと古いほうが押し出されます。

運用者

Slack から設定を変えられる人(Webhook の届け先・署名鍵の生成・審査の場の移動・状態の照会)を運用者と呼びます。 最初の運用者は、三で /ekyc-config bind を打った本人です(Slack のプロフィールのメールで登録されます)。 2人目以降を足すときは、メールアドレスを HANAUTA に伝えてください。 運用者でない人が /ekyc-config を打つと「許可されていません」と返ります。

Slack のプロフィールにメールが入っていないと登録できません。その場合は「運用者の登録はしていません」と出るので、HANAUTA にメールを伝えてください。

サーバーに2箇所書き、アプリで撮影画面を開く

あなたの側で書くのは、始めるところ受け取るところだけです。撮影画面・画像の保管・審査の場は Humatch が持ちます。

1. 始める(サーバー)

利用者が本人確認を始めたら、サーバーからセッションを作ります。返ってきた url をアプリへ渡します。

POST https://api.humatch.vows-match.com/v1/verification_sessions
Authorization: Bearer <API キー>
Content-Type: application/json

{ "assurance_level": "document", "client_reference_id": "user_abc123" }

→ 201 { "id": "vs_…", "url": "https://api.humatch.vows-match.com/s/…", "expires_at": "…" }
client_reference_id に個人情報を入れないでください。 氏名・メール・電話番号・住所は不可です。あなたの中でだけ意味を持つ識別子(内部のユーザー ID など)を渡してください。

2. 開く(アプリ)

url をアプリ内の Web 画面(WebView)で開きます。撮影画面はカメラを使うので、次の2点だけ確かめてください。

カメラの許可WebView にカメラの権限を渡してください(iOS は NSCameraUsageDescription と WKWebView のメディア許可、Android は WebChromeClient.onPermissionRequest で許可)
結果は待たない撮影画面は「受け付けました」で終わります。判定は画面には返りません(数時間後に、下の Webhook で届きます)。画面を閉じたあとの表示は、状態を引く API(GET /v1/verification_sessions/{id})で決めてください

URL は既定で15分(最長7日まで指定可)有効で、提出した時点で無効になります。期限が切れたら新しいセッションを作ってください。

3. 受け取る(サーバー)

審査が済むと、登録した届け先へ署名付きの POST が届きます。署名を確かめてから本文を使ってください。

// Node.js の例。生の本文(JSON に直す前)で計算する
const [t, ...sigs] = req.headers['x-kyc-signature'].split(',');
const ts = t.slice(2);                                   // "t=1757308800" → "1757308800"
if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) reject();   // 5分の窓
const expected = crypto.createHmac('sha256', SECRET).update(`${ts}.${rawBody}`).digest('hex');
const ok = sigs.some(s => crypto.timingSafeEqual(Buffer.from(s.slice(3)), Buffer.from(expected)));
// ok なら本文の data.object を使う。X-Kyc-Event-Id で二度目以降を捨てる
届け先の登録運用者が Slack で /ekyc-config と打ち、モーダルに https:// の URL を入れます
2xx を返す受け取ったら 2xx を返してください。返さないと直後・1分・5分・30分・2時間・6時間・24時間の7回、送り直します
届かなかったらGET /v1/verification_sessions/{id} で同じ形の状態が引けます

本文の形・種類・エラーの形は API のしくみ の第4節にあります。

通しで確かめる

実際に1件流します。HANAUTA が一緒に見ます。

  1. サーバーからセッションを作り、アプリで撮影画面を開く(合成の身分証で構いません。本物を使う必要はありません)
  2. 撮って提出し、「受け付けました」が出る
  3. 審査のチャンネルに審査カードが届く
  4. 「承認」を押す → 「承認しました」の表示が出て、カードが消える
  5. あなたのサーバーに verification_session.verified が届き、署名の検証が通る

最初の1件は、撮影画面の読み取りに数秒かかることがあります。2件目からは温まっています。

日々の運用

審査カードの見方

年齢要件18歳以上か、の真偽。生年月日そのものは出ません
申告された種別 / 書類種別(判定)利用者が選んだ種別と、機械が読んだ種別。食い違えば ⚠️ が付きます。食い違いは却下の理由ではありません(目で確かめてください)
有効期限有効/期限切れ/読み取れず
顔照合一致/不一致/要目視/顔を検出できず。要目視は「機械が言い切れない」なので、身分証の顔写真と自撮りを並べて確かめてください
⚠️ 機械では読み取れませんでした反射や写りで読めなかった、またはパスポートの機械読取領域が読めなかった。読めなかったことは却下の理由になりません
承認が意味すること。 承認を押すと、その強さが約束した属性(age_over_18 など)を「満たしている」として返します。 機械の判定をそのまま上げるのではなく、押した人が保証します。確認画面に、何を保証することになるかが出ます。

Slack から使える操作(運用者だけ)

/ekyc-configWebhook の届け先を設定する・署名鍵を1本足して受け取る(2本まで。古い鍵を外すのは HANAUTA へ)
/ekyc-config status <セッションID か client_reference_id>審査が済んだ申請の状態を、自分にだけ見える形で引く
/ekyc-config bind審査の場を打ったチャンネルへ移す

変えられないもの(契約で決めるもの)

本人確認の強さ・画像を持つ期間・取り出しの可否・取り出し元の IP・運用者の一覧は、Slack からは変えられません。HANAUTA に連絡してください。

困ったとき

撮影画面が開かないURL の期限(既定15分)が切れているか、提出済みです。新しいセッションを作ってください。画面には「有効期限が切れました」「この手続きは終了しています」のどちらかが出ます
カメラが起動しないWebView にカメラの権限が渡っていません(五の 2)
「送信できませんでした」もう一度提出してください。2度目に「受付を終えています」と出たら、1度目は受け付けられています。カードが出なければ HANAUTA へ
審査カードが出ないチャンネルに @Humatch が居るか、/ekyc-config bind が済んでいるかを確かめてください
結果が届かない届け先が https:// か、2xx を返しているか。24時間の再試行のあとは GET /v1/verification_sessions/{id} で引けます
「許可されていません」その人のメールが運用者として登録されていません。最初の運用者は /ekyc-config bind を打った人で、2人目以降は HANAUTA に伝えてください
署名鍵が漏れたかもしれない/ekyc-config で新しい鍵を足して受け取り、受け側を新しい鍵へ切り替えたあと、古い鍵を外すよう HANAUTA へ連絡してください
受け取りの頁が「受け取れません」もう開いた(1回きり)か、10分を過ぎています。「生成」を押し直すと新しいリンクが出ます

HANAUTA に審査を任せる場合

審査を HANAUTA の担当者が行う契約では、二(Slack にアプリを入れる)と三(チャンネルを決める)は要りません。 審査カードは HANAUTA 側の場に届き、HANAUTA の担当者が承認・却下します。 結果の届き方(五の 3)とあなたのサーバーの実装は同じです。

任せる場合も、法令上の本人確認義務を負う主体はあなたのままです(説明の頁「責任の分かれ目」)。 HANAUTA が担うのは判断の作業で、判断の責任ではありません。