契約から、最初の1件が届くまでを順に書いてあります。 あなたの側でやることは4つ(Slack にアプリを入れる/審査のチャンネルを決める/鍵を保管する/サーバーに2箇所書く)で、 それ以外は HANAUTA が持ちます。所要はサーバーの実装を除いて30分ほどです。
API の呼び方と返るものは API のしくみ にあります。ここでは手順だけを扱います。
| 一 | お話を伺い、HANAUTA が
契約を登録する契約で決めること
上の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 がこの内容で契約を登録します。あなたの側で入力するものはありません。
HANAUTA から導入リンク(URL 1本・24時間有効)を受け取ります。 あなたの Slack ワークスペースの管理者が、そのワークスペースにログインしているブラウザで開いてください。
chat:write | 審査カードをチャンネルへ書く・消す |
|---|---|
commands | /ekyc-config を受け付ける |
users:read / users:read.email | 設定を変える人が運用者かどうかを、メールで確かめる |
「許可しない」を押した場合や、リンクの期限が切れた場合は何も起きません。HANAUTA に連絡すると新しいリンクを出します。 アプリを入れ直す(同じリンクを再度開く)と、新しい接続に置き換わります。
/invite @Humatch と打ち、アプリを入れます/ekyc-config bind と打ちます| 誰が打てるか | 初回は、そのワークスペースの誰でも打てます。既に場が決まっているのに別のチャンネルへ移すときは、運用者(後述)だけです |
|---|---|
| 「まだ結びついていません」と返る | 二のアプリの導入が済んでいません。導入リンクを開き直してください |
| 「アプリが応答しなかった」と出る | もう一度打ってください。続くなら HANAUTA に連絡してください |
秘密は2つあります。どちらもサーバーの環境変数か秘密の保管庫に置き、アプリやリポジトリには入れないでください。
| API キー | あなたのサーバーが Humatch を呼ぶときの鍵。HANAUTA から受け取ります。Authorization: Bearer … に載せます。利用者の端末へ配らないでください(端末からは撮影画面の URL だけで足ります) |
|---|---|
| Webhook の署名鍵 | 結果が本物か確かめるための鍵。あなたが Slack から自分で作って受け取ります(下の手順)。2本まで並行して持てるので、入れ替えは止めずにできます |
/ekyc-config と打ちます鍵の値は Slack を通りません(通るのはリンクだけです)。受け取りそこねたら「生成」を押し直してください。鍵は2本までなので、押し直すと古いほうが押し出されます。
Slack から設定を変えられる人(Webhook の届け先・署名鍵の生成・審査の場の移動・状態の照会)を運用者と呼びます。
最初の運用者は、三で /ekyc-config bind を打った本人です(Slack のプロフィールのメールで登録されます)。
2人目以降を足すときは、メールアドレスを HANAUTA に伝えてください。
運用者でない人が /ekyc-config を打つと「許可されていません」と返ります。
Slack のプロフィールにメールが入っていないと登録できません。その場合は「運用者の登録はしていません」と出るので、HANAUTA にメールを伝えてください。
あなたの側で書くのは、始めるところと受け取るところだけです。撮影画面・画像の保管・審査の場は Humatch が持ちます。
利用者が本人確認を始めたら、サーバーからセッションを作ります。返ってきた 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 など)を渡してください。
url をアプリ内の Web 画面(WebView)で開きます。撮影画面はカメラを使うので、次の2点だけ確かめてください。
| カメラの許可 | WebView にカメラの権限を渡してください(iOS は NSCameraUsageDescription と WKWebView のメディア許可、Android は WebChromeClient.onPermissionRequest で許可) |
|---|---|
| 結果は待たない | 撮影画面は「受け付けました」で終わります。判定は画面には返りません(数時間後に、下の Webhook で届きます)。画面を閉じたあとの表示は、状態を引く API(GET /v1/verification_sessions/{id})で決めてください |
URL は既定で15分(最長7日まで指定可)有効で、提出した時点で無効になります。期限が切れたら新しいセッションを作ってください。
審査が済むと、登録した届け先へ署名付きの 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 が一緒に見ます。
verification_session.verified が届き、署名の検証が通る最初の1件は、撮影画面の読み取りに数秒かかることがあります。2件目からは温まっています。
| 年齢要件 | 18歳以上か、の真偽。生年月日そのものは出ません |
|---|---|
| 申告された種別 / 書類種別(判定) | 利用者が選んだ種別と、機械が読んだ種別。食い違えば ⚠️ が付きます。食い違いは却下の理由ではありません(目で確かめてください) |
| 有効期限 | 有効/期限切れ/読み取れず |
| 顔照合 | 一致/不一致/要目視/顔を検出できず。要目視は「機械が言い切れない」なので、身分証の顔写真と自撮りを並べて確かめてください |
| ⚠️ 機械では読み取れませんでした | 反射や写りで読めなかった、またはパスポートの機械読取領域が読めなかった。読めなかったことは却下の理由になりません |
age_over_18 など)を「満たしている」として返します。
機械の判定をそのまま上げるのではなく、押した人が保証します。確認画面に、何を保証することになるかが出ます。
/ekyc-config | Webhook の届け先を設定する・署名鍵を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 の担当者が行う契約では、二(Slack にアプリを入れる)と三(チャンネルを決める)は要りません。 審査カードは HANAUTA 側の場に届き、HANAUTA の担当者が承認・却下します。 結果の届き方(五の 3)とあなたのサーバーの実装は同じです。
任せる場合も、法令上の本人確認義務を負う主体はあなたのままです(説明の頁「責任の分かれ目」)。 HANAUTA が担うのは判断の作業で、判断の責任ではありません。