ネイティブPII API v2
1つの契約で、テキスト、表、JSON、文字起こし、画像、音声、文書の個人データを検出・保護・復元します。
同じリクエスト本文が、ホスト型API、サンドボックス、自社クラスターへのインストールで動作します。オフライン版は、イメージがv2に対応するまでネイティブAPI v1を提供します。Azure、AWS、Googleの契約は互換APIとして引き続き利用できます。
2.x内の変更は追加のみです(新しいフィールド、パラメーター、値、ルート)。互換性のない変更には、新しいパス接頭辞を持つ新しいメジャーバージョンを割り当てます。その変更は12か月前に告知し、その期間中は以前のメジャーバージョンも引き続き提供します。
未知の応答フィールドと値は無視してください。 APIバージョン →
機能の概要
各機能には1行の説明と最小限のリクエストがあります。詳細は以下の各セクションにあります。
export SHINRAI_API_KEY=shr_live_...入力
テキスト テキスト内の個人データを検出します。各エンティティは種類、位置、信頼度付きで返されます。
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" -d '{"text": "Anna Weber, anna.weber@example.org, IBAN DE89 3704 0044 0532 0130 00"}'curl 'https://azure.api.getshinrai.com/language/:analyze-text?api-version=2023-04-01' \
-H "Ocp-Apim-Subscription-Key: $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"PiiEntityRecognition","analysisInput":{"documents":[{"id":"1","language":"en","text":"Anna Weber, anna.weber@example.org, IBAN DE89 3704 0044 0532 0130 00"}]},"parameters":{"modelVersion":"latest","stringIndexType":"Utf16CodeUnit"}}'互換APIでは、ShinrAIが返せる内容が制限されます。最高の品質にはネイティブPII API v2を使用してください。
# Once: create SigV4 credentials with your ShinrAI key
# curl -X POST https://aws.api.getshinrai.com/providers/aws/credentials -H "Authorization: Bearer $SHINRAI_API_KEY"
import boto3, os
client = boto3.client(
"comprehend",
region_name="eu-central-1",
endpoint_url="https://aws.api.getshinrai.com",
aws_access_key_id=os.environ["SHINRAI_AWS_ACCESS_KEY_ID"],
aws_secret_access_key=os.environ["SHINRAI_AWS_SECRET_ACCESS_KEY"],
)
print(client.detect_pii_entities(Text="Anna Weber, anna.weber@example.org, IBAN DE89 3704 0044 0532 0130 00", LanguageCode="en"))互換APIでは、ShinrAIが返せる内容が制限されます。最高の品質にはネイティブPII API v2を使用してください。
curl 'https://google.api.getshinrai.com/v2/projects/my-project/locations/global/content:inspect' \
-H "x-goog-api-key: $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"item":{"value":"Anna Weber, anna.weber@example.org, IBAN DE89 3704 0044 0532 0130 00"},"inspectConfig":{"includeQuote":true}}'互換APIでは、ShinrAIが返せる内容が制限されます。最高の品質にはネイティブPII API v2を使用してください。
複数のテキスト 1回のリクエストで最大256件のテキストを送信できます。1つのリクエストは、すべてのテキストに対して1つの置換マップを保持します。
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" -d '{"texts": ["Anna Weber called.", "Call Anna Weber back at +49 30 1234567."]}'テキストファイル テキストファイルをそのまま送信し、保護済みテキストを受け取ります。
curl -s "https://api.getshinrai.com/v2/protect?preset=label" -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: text/plain" -H "Accept: text/plain" --data-binary @letter.txt# Azure returns the masked text as redactedText.
curl 'https://azure.api.getshinrai.com/language/:analyze-text?api-version=2023-04-01' \
-H "Ocp-Apim-Subscription-Key: $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"PiiEntityRecognition","analysisInput":{"documents":[{"id":"1","language":"en","text":"Anna Weber, anna.weber@example.org"}]},"parameters":{"modelVersion":"latest","stringIndexType":"Utf16CodeUnit"}}'互換APIでは、ShinrAIが返せる内容が制限されます。最高の品質にはネイティブPII API v2を使用してください。
curl 'https://google.api.getshinrai.com/v2/projects/my-project/locations/global/content:deidentify' \
-H "x-goog-api-key: $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"item":{"value":"Anna Weber, anna.weber@example.org"},"deidentifyConfig":{"infoTypeTransformations":{"transformations":[{"primitiveTransformation":{"replaceWithInfoTypeConfig":{}}}]}}}'互換APIでは、ShinrAIが返せる内容が制限されます。最高の品質にはネイティブPII API v2を使用してください。
表 行と列を保護します。各エンティティは、その行と列を示します。
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"inputs": [{"kind": "table", "columns": [{"name": "name"}, {"name": "email"}], "rows": [["Anna Weber", "anna@example.org"]]}]}'JSON JSON値(ツール呼び出しなど)に含まれるすべての文字列を保護します。各エンティティは、その文字列を指すJSON Pointerを持ちます。
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"inputs": [{"kind": "json", "value": {"customer": {"name": "Anna Weber", "email": "anna@example.org"}}}]}'文字起こし 単語ごとの時刻付きの文字起こしを送信します。各エンティティは、その単語の時刻付きで返されます。
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"inputs": [{"kind": "transcript", "forms": {"display": "Call Anna Weber"}, "atoms_form": "display", "time_unit": "ms",
"atoms": [{"text": "Call", "t0": 0, "t1": 300}, {"text": "Anna", "t0": 350, "t1": 600}, {"text": "Weber", "t0": 600, "t1": 950}]}]}'ページ ページのテキストを、独自のOCRまたはPDFテキストレイヤーからの単語枠と一緒に送信します。各エンティティは、その枠付きで返されます。
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"inputs": [{"kind": "page", "text": "Anna Weber", "box_unit": "px",
"atoms": [{"start": 0, "end": 4, "page": 1, "box": [10, 20, 40, 12]}, {"start": 5, "end": 10, "page": 1, "box": [54, 20, 50, 12]}]}]}'画像 スクリーンショットやスキャン画像内の個人データを検出します。OCRは14言語を読み取り、各エンティティはピクセル枠付きで返されます。
curl -s "https://api.getshinrai.com/v2/detect?language=de" -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: image/png" --data-binary @screenshot.pngマスキング済み画像 すべてのエンティティを黒く塗りつぶしたマスキング済み画像を受け取ります。
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: image/png" -H "Accept: image/png" --data-binary @screenshot.png -o redacted.png# Google returns the redacted image as redactedImage.
curl 'https://google.api.getshinrai.com/v2/projects/my-project/image:redact' \
-H "x-goog-api-key: $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"byteItem":{"type":"IMAGE_PNG","data":"'"$(base64 < screenshot.png | tr -d '\n')"'"}}'互換APIでは、ShinrAIが返せる内容が制限されます。最高の品質にはネイティブPII API v2を使用してください。
音声 最大5分の録音を送信し、すべての個人情報をピー音処理した録音を受け取ります。
curl -sS "https://api.getshinrai.com/v2/protect?language=de" -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: audio/mpeg" -H "Accept: audio/wav" --data-binary @call.mp3 -o call.redacted.wav音声の文字起こし 録音の文字起こしと各エンティティの時刻を、音声なしで受け取ります。
curl -sS "https://api.getshinrai.com/v2/detect?language=de" -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: audio/mpeg" --data-binary @call.mp3検出
言語とモデル 最良の結果を得るには言語を指定します。長期間同じ結果が必要な場合は、モデルバージョンを固定します。
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "Anna Weber wohnt in Darmstadt.", "detection": {"language": "de", "model": "latest"}}'種類 種類は、ShinrAIの名称、またはGoogle、AWS、Azure、Presidioの名称で含めたり除外したりできます。
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "Anna Weber, anna@example.org, +49 30 1234567", "detection": {"types": {"include": ["EMAIL_ADDRESS", "PHONE_NUMBER"], "vocabulary": "google"}}}'信頼度の下限 信頼度の下限を、全種類、種類ごと、または言語ごとに設定できます。
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "Anna Weber, Darmstadt", "detection": {"thresholds": {"default": 0.5, "per_type": {"CITY": 0.8}}}}'無視する値と独自の値 社名などの値を報告しないようにし、独自の値を種類付きで検出します。
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "Innovius support: case K-4711 for Anna Weber", "detection": {"exclude_values": {"values": ["Innovius"]},
"custom": {"user_values": [{"value": "K-4711", "type": "CUSTOMER_ID"}]}}}'独自の範囲 独自の検出器が見つけた範囲を、単独で、またはShinrAIの検出と組み合わせて保護します。
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"inputs": [{"kind": "text", "text": "Ticket for Anna Weber", "entities": [{"type": "PERSON", "span": {"start": 11, "end": 21}}]}],
"detection": {"mode": "provided"}}'長いテキスト モデルが長いテキストを読む方法を選択します:自動、1文ずつ、または一括。
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "Anna Weber called. She lives in Darmstadt.", "detection": {"spans": {"segment": "sentence"}}}'保護
仮名化 仮名化してマッピングを保持すると、後で回答を復元できます。
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Anna Weber lives in Darmstadt.", "policy": {"preset": "pseudonymize"}, "output": {"include": ["entities", "mapping"]}}'# Azure returns the masked text as redactedText.
curl 'https://azure.api.getshinrai.com/language/:analyze-text?api-version=2023-04-01' \
-H "Ocp-Apim-Subscription-Key: $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"PiiEntityRecognition","analysisInput":{"documents":[{"id":"1","language":"en","text":"Anna Weber lives in Darmstadt."}]},"parameters":{"modelVersion":"latest","stringIndexType":"Utf16CodeUnit"}}'互換APIでは、ShinrAIが返せる内容が制限されます。最高の品質にはネイティブPII API v2を使用してください。
curl 'https://google.api.getshinrai.com/v2/projects/my-project/locations/global/content:deidentify' \
-H "x-goog-api-key: $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"item":{"value":"Anna Weber lives in Darmstadt."},"deidentifyConfig":{"infoTypeTransformations":{"transformations":[{"primitiveTransformation":{"replaceWithInfoTypeConfig":{}}}]}}}'互換APIでは、ShinrAIが返せる内容が制限されます。最高の品質にはネイティブPII API v2を使用してください。
ラベルとマスク 各値を[PERSON_1]のような番号付きラベルに置き換えるか、文字でマスクします。
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "Anna Weber, anna@example.org", "policy": {"preset": "label", "rules": [{"types": ["EMAIL"], "action": "mask", "mask": {"char": "*"}}]}}'# Azure returns the masked text as redactedText.
curl 'https://azure.api.getshinrai.com/language/:analyze-text?api-version=2023-04-01' \
-H "Ocp-Apim-Subscription-Key: $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"kind":"PiiEntityRecognition","analysisInput":{"documents":[{"id":"1","language":"en","text":"Anna Weber, anna@example.org"}]},"parameters":{"modelVersion":"latest","stringIndexType":"Utf16CodeUnit"}}'互換APIでは、ShinrAIが返せる内容が制限されます。最高の品質にはネイティブPII API v2を使用してください。
curl 'https://google.api.getshinrai.com/v2/projects/my-project/locations/global/content:deidentify' \
-H "x-goog-api-key: $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"item":{"value":"Anna Weber, anna@example.org"},"deidentifyConfig":{"infoTypeTransformations":{"transformations":[{"primitiveTransformation":{"replaceWithInfoTypeConfig":{}}}]}}}'互換APIでは、ShinrAIが返せる内容が制限されます。最高の品質にはネイティブPII API v2を使用してください。
部分的な値と一般化した値 メールのドメインとカードの下4桁を残し、名前と場所を一般化します。
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Anna Weber aus Biberach, anna@example.org, Karte 4111 1111 1111 1111", "language": "de",
"policy": {"default": {"action": "generalize"}, "rules": [{"types": ["EMAIL", "CREDIT_CARD"], "action": "partial"}]}}'種類ごとのルール 種類ごとにアクションを選択します:固定テキストで置換、削除、または保持。
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "Anna Weber from Darmstadt, +49 30 1234567, anna@example.org", "policy": {"preset": "pseudonymize",
"rules": [{"types": ["PHONE"], "action": "replace", "replace": {"value": "[phone]"}}, {"types": ["EMAIL"], "action": "remove"},
{"types": ["CITY"], "action": "keep"}]}}'出力
注釈 年、金額、法令参照、バイアス語を注釈として受け取ります。protectはこれらを変更しません。
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "In 2019 Anna Weber paid 1,200 EUR.", "output": {"include": ["entities", "annotations"]}}'連結リスク テキストが個人を特定する可能性を推定します。これはヒューリスティックであり、件数ではありません。
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "The 34-year-old head surgeon from Biberach joined in 2019.", "output": {"include": ["entities", "linkage_risk"]}}'オフセット、テキスト、統計 UTF-16またはUTF-8での位置、エンティティのテキスト、統計、短いエンティティ一覧を受け取ります。
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "Anna Weber, anna@example.org", "output": {"offset_unit": "utf16", "include_text": true, "include": ["entities", "stats"], "max_entities": {"per_input": 10}}}'復元とセッション
復元 代替値を含むテキストを復元します。mapping.deltaのエントリを、元の値と置換値のペアとして送信します。
curl -s https://api.getshinrai.com/v2/restore -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"mapping": {"known": [{"original": "Anna Weber", "replacement": "Julia Brandt"}]}, "inputs": [{"id": "1", "text": "Julia Brandt replied."}]}'復元テーブル マッピングを復元テーブルにコンパイルし、独自のコードで復元します(例:ストリーミングされるモデルの回答)。
curl -s https://api.getshinrai.com/v2/restore-tables -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"mapping": {"known": [{"original": "Anna Weber", "replacement": "Julia Brandt"}]}}'単一の置換 指定した値と種類に対する置換値を1つ受け取ります。
curl -s https://api.getshinrai.com/v2/replacements -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"value": "Anna Weber", "type": "PERSON", "language": "de"}'セッション セッション(既定では作成から24時間)で複数のリクエストにわたり1つのマップを保持し、その後エクスポートします。
SESSION=$(curl -s -X POST https://api.getshinrai.com/v2/sessions -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" -d '{"ttl_s": 3600}' | python3 -c 'import sys, json; print(json.load(sys.stdin)["id"])')
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" -d '{"text": "Anna Weber called.", "mapping": {"session": "'$SESSION'"}}'
curl -s https://api.getshinrai.com/v2/sessions/$SESSION/mapping -H "Authorization: Bearer $SHINRAI_API_KEY"既知のペア 以前のペアを新しいリクエストに渡すと、同じ値は同じ代替値を保ちます。
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"text": "Anna Weber called again.", "mapping": {"known": [{"original": "Anna Weber", "replacement": "Julia Brandt"}]}}'ジョブ
テキストのバッチ JSONLファイルの最大20,000件のテキストを、バックグラウンドで半額で保護します。
UPLOAD=$(curl -s https://api.getshinrai.com/v2/uploads -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/x-ndjson" --data-binary @rows.jsonl | python3 -c 'import sys, json; print(json.load(sys.stdin)["id"])')
curl -s https://api.getshinrai.com/v2/jobs -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"kind": "text_batch", "inputs": [{"kind": "file", "source": {"upload": "'$UPLOAD'"}}]}'文書 PDFまたはWordファイルを、保護済みテキストと合わせてマスキング済みPDFとして受け取ります。
UPLOAD=$(curl -s https://api.getshinrai.com/v2/uploads -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/pdf" --data-binary @contract.pdf | python3 -c 'import sys, json; print(json.load(sys.stdin)["id"])')
curl -s https://api.getshinrai.com/v2/jobs -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"kind": "document", "inputs": [{"kind": "file", "source": {"upload": "'$UPLOAD'"}}]}'長い録音 最大60分の録音を、バックグラウンドでピー音処理します。
UPLOAD=$(curl -s https://api.getshinrai.com/v2/uploads -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: audio/mpeg" --data-binary @meeting.mp3 | python3 -c 'import sys, json; print(json.load(sys.stdin)["id"])')
curl -s https://api.getshinrai.com/v2/jobs -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Content-Type: application/json" \
-d '{"kind": "audio", "inputs": [{"kind": "audio", "source": {"upload": "'$UPLOAD'"}, "language": "de"}]}'処理区分、再試行、アカウント
処理区分 低レイテンシで小さな入力を処理するにはリアルタイム、半額で処理するにはバッチを選択します。
curl -s "https://api.getshinrai.com/v2/detect?tier=realtime" -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: text/plain" --data-binary 'Call Anna Weber at +49 30 1234567.'安全な再試行 同じIdempotency-Keyで再試行します。サービスはリクエストを1回分のみ課金します。
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" -H "Idempotency-Key: order-4711" \
-H "Content-Type: application/json" -d '{"text": "Anna Weber, order 4711"}'capabilities この導入環境が提供する内容:モデル、言語、入力の種類、プランで利用できる処理区分、上限。
curl -s https://api.getshinrai.com/v2/capabilities -H "Authorization: Bearer $SHINRAI_API_KEY"種類の一覧 すべての種類を、説明とGoogle、AWS、Azure、Presidioの名称付きで一覧表示します。
curl -s https://api.getshinrai.com/v2/types -H "Authorization: Bearer $SHINRAI_API_KEY"利用量 残高と直近30日間。
curl -s https://api.getshinrai.com/v2/usage -H "Authorization: Bearer $SHINRAI_API_KEY"OpenAPI v2 APIの完全なOpenAPI 3.1文書を取得します。
curl -s https://api.getshinrai.com/v2/openapi.json -o shinrai-pii-api-v2.jsonまずcapabilitiesを確認
起動時にcapabilitiesを一度読み込みます。導入環境のモデル、言語、入力の種類、処理区分、上限が一覧で返ります。
curl -s https://api.getshinrai.com/v2/capabilities -H "Authorization: Bearer $SHINRAI_API_KEY"
あらゆる種類の入力を送信
プレーンテキストに包むための構造は不要です。テキストファイル、画像、録音はファイル自体をリクエスト本文として送り、オプションはクエリ文字列に指定します。
| 入力 | 送信方法 | 備考 |
|---|---|---|
| テキスト | {"text": "..."} または text/plain | JSONまたはファイルをそのまま送信 |
| 表 | "kind": "table" | 列と行 |
| JSON | "kind": "json" | 値に含まれるすべての文字列 |
| 文字起こし | "kind": "transcript" | 形式と時刻付きの単語アトム |
| ページ | "kind": "page" | 独自のOCRまたはPDFテキストレイヤーからのテキストと単語枠 |
| 画像 | image/png, image/jpeg, image/bmp, image/tiff, image/webp | 最大6 MiB:OCR、エンティティごとのピクセル枠、マスキング済み画像 |
| 音声 | audio/wav, audio/mpeg, audio/ogg, audio/flac, audio/mp4, audio/aac, audio/webm | 最大5分・12 MiB:エンティティごとの時間区間とピー音処理済みの録音 |
| 文書 | POST /v2/jobs | ジョブによるPDFとDOCX:マスキング済みPDFと保護済みテキスト |
テキストの検出・保護・復元
ほとんどの連携はテキストから始まります。Detectは個人データを見つけます。Protectはすべてのエンティティを置き換えたテキストを返します。Restoreは、モデルの回答など後のテキストに元の値を戻します。
curl -s https://api.getshinrai.com/v2/detect -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" -d '{"text": "Anna Weber, anna.weber@example.org, IBAN DE89 3704 0044 0532 0130 00"}'
curl -s https://api.getshinrai.com/v2/protect -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Anna Weber lives in Darmstadt.", "policy": {"preset": "pseudonymize"}, "output": {"include": ["entities", "mapping"]}}'
curl -s https://api.getshinrai.com/v2/restore -H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"mapping": {"known": [{"original": "Anna Weber", "replacement": "Julia Brandt"}]}, "inputs": [{"id": "1", "text": "Julia Brandt replied."}]}'
セマンティック暗号化とは?
ShinrAIでは、文脈を保つ可逆的な置換をセマンティック暗号化と呼びます。これは仮名化の一種で、機密値を有用な代替値に変え、アプリケーションが対応表を使って元の値を復元できます。
対応表を機密情報として保護し、AIへのプロンプトに含めないでください。自然な置換は、すべての単語が暗号学的に暗号化されたことや、テキストが自動的に匿名化されたことを意味しません。
言語とデータカテゴリ · モデルの変更履歴 · ShinrAIを比較
保護方法を選択
プリセットはすべての種類に1つのポリシーを設定します。ルールは種類ごとにアクションを設定します。
| 設定 | 値 |
|---|---|
| プリセット | pseudonymize, mask, label, strict |
| 種類ごとのアクション | surrogate, label, mask, partial, generalize, replace, remove, keep |
- pseudonymizeは復元可能な現実的な代替値を書き込みます。
- partialは個人を特定しない部分を残します:メールのドメイン、電話の国番号、カードや口座の下4桁、日付の年。
- generalizeは名前、場所、組織の種類を表す語句を入力と同じ言語で書き込みます。
- partialとgeneralizeは元に戻せません。
検出を制御
- 信頼度の下限を、全種類、種類ごと、または言語ごとに設定できます。
- 種類は正規名、またはGoogle、AWS、Azure、Presidioの名称で含めたり除外したりできます。
- 社名など報告してはならない値を除外したり、独自の値を追加したりできます。
- 独自の検出器の範囲を、単独で、またはShinrAIの検出と組み合わせて送信します。
- 注釈を要求できます:年、金額、法令参照、バイアス語。protectはこれらを変更しません。
- 連結リスクを要求できます:入力が個人を特定する可能性の推定値です。これはヒューリスティックであり、件数ではありません。
復元と1つのマップの保持
後で回答を復元する必要がある場合はマッピングを要求します。マッピングには元の値が含まれます。機密性の高いアプリケーションデータとして保存し、モデルのプロンプトには含めないでください。
- 1つのリクエスト内では、同じ値は同じ代替値を保ちます。
- 次のリクエストでは新しい代替値が選ばれるため、リクエストを繰り返しても代替値から元の値を割り出せません。
- 複数のリクエストで同じ代替値を使うには、セッションを使うか、以前のペアを既知のマッピングとして送信します。
- アカウント全体での一貫性はオプションとして利用できます。ただし保護は弱くなり、キーを持つ人は繰り返しにより元の値の対応表を作れます。
- 他の顧客には常に異なる代替値が使われます。
- 復元テーブルを使うと、独自のコードで復元できます(例:ストリーミングされるモデルの回答)。
セッションはサーバー上で1つのマップを保持します。存続期間は作成から最大24時間で、アカウントの延長セッション設定を有効にすると最大7日間です。マップは暗号化して保存され、読み取れるのはあなたのキーだけです。
スクリーンショットとスキャンを保護
- OCRはモデルが対応するすべての言語を読み取ります。アラビア語、ヘブライ語、日本語、韓国語の画像では言語を指定してください。
- 各エンティティはピクセル枠付きで返されます。枠はテキスト行ごと、または単語ごとです。
- protectは該当領域を塗りつぶした画像を返します。
- リアルタイム区分では、1リクエストにつき1枚、最大420万画素・3 MiBの画像を受け付けます。
音声を保護
- 最大5分・12 MiBの録音を、標準区分のdetectまたはprotectリクエストの本文として送信します。
- protectは、すべての個人情報をピー音処理した録音をWAVで返します。ピー音の代わりに無音を指定し、必要に応じてミュートする区間を広げます。
- 音声の代わりに保護済みの文字起こしと各エンティティの時刻を受け取るには、JSONを指定します。
- 言語を指定してください。これにより、音声認識と検出が正しい言語で読み取ります。
- 音声の料金は文字起こしのレコード数で、開始した1分ごとに最低10レコードです。
- 音声リクエストは1アカウントにつき同時に1件だけ実行されます。最大60分の録音はジョブとして実行されます。
- 音声認識が聞き誤り、モデルが見落とした単語は聞こえたまま残ります。機密性の高い録音は、共有する前に聞いて確認してください。
大きなバッチ、文書、録音をジョブとして実行
1回のリクエストには大きすぎる作業(多数のテキスト、PDFやWordファイル、長い録音)にはジョブを使います。ジョブはバッチの重みでバックグラウンド実行され、結果を24時間保持します。
- 1行に1入力のJSONLファイル、PDFかDOCXファイル、または録音をアップロードします。
- アップロードIDでジョブを開始します。
- ジョブの状態を確認し、成果物をダウンロードします。
{"custom_id": "row-1", "text": "Anna Schmidt, anna@example.com"}
{"custom_id": "row-2", "text": "Call +49 30 1234567", "language": "de"}
{"custom_id": "row-3", "input": {"kind": "table", "columns": [{"name": "email"}], "rows": [["max@example.org"]]}}
curl -s https://api.getshinrai.com/v2/uploads \
-H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/x-ndjson" \
--data-binary @rows.jsonl
curl -s https://api.getshinrai.com/v2/jobs \
-H "Authorization: Bearer $SHINRAI_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: rows-2026-09-28" \
-d '{"kind": "text_batch",
"inputs": [{"kind": "file", "source": {"upload": "up_..."}}],
"output": {"artifacts": ["protected", "entities"]}}'
curl -s https://api.getshinrai.com/v2/jobs/$JOB -H "Authorization: Bearer $SHINRAI_API_KEY"
アップロードは、それを読む最後のジョブが終了した時点で削除されます。複数のジョブで同じアップロードを読む場合は、アップロードに ?keep=true を付けてください。その場合は24時間保持され、それを読むジョブごとに期間が延長されます。ジョブを削除すると、他のジョブが読んでいない限り、保持指定のアップロードも削除されます。24時間が経過する前に結果を削除するには、ジョブを削除してください。
文書ジョブは、マスキング済みPDF、保護済みテキスト、エンティティを返します。音声ジョブは、マスキング済みWAV、保護済みの文字起こし、時刻付きのエンティティを返します。
上限
ホスト型APIには以下の上限が適用されます。capabilitiesは導入環境の値を返します。
| 上限 | Standard | リアルタイム | Batch | ジョブ |
|---|---|---|---|---|
| リクエストあたりの入力数 | 64 | 4 | 200 | 20,000行 |
| 入力あたりの文字数 | 200.000 | 4.000 | 200.000 | 200.000 |
| リクエスト本文 | 12 MiB | 12 MiB | 12 MiB | 50 MBのアップロード |
| 画像 | 6 MiB | 420万画素、3 MiB | 6 MiB | 提供なし |
| 音声 | 5分、12 MiB | 提供なし | 提供なし | 60分、50 MB |
| 文書 | 提供なし | 提供なし | 提供なし | PDFまたはDOCX、10 MB |
上限を超えたリクエストには413が返され、課金されません。利用できる処理区分と1分あたりのリクエスト数はプランで決まります。
処理区分、再試行、利用量
| 処理区分 | 重み | 用途 |
|---|---|---|
| Standard | ×1 | 既定 |
| Batch | ×0.5 | 半額、最低優先度 |
| リアルタイム | ×1.6 | 小さな入力と低レイテンシ、Teamプラン以上 |
- 安全に再試行するにはIdempotency-Keyヘッダーを送信します。同じキーと本文による再送は1回分のみ課金されます。
- 復元、セッション、capabilities、types、usageは無料です。
- 失敗した呼び出しは課金されません。
エラー
すべてのエラーには、コード、メッセージ、リクエストID、再試行が成功し得るかどうかが含まれます。検証エラーはJSON Pointerでフィールドを示し、データを繰り返し表示することはありません。
- エラーが再試行で成功し得ると示す場合にのみ再試行し、Retry-Afterヘッダーの時間だけ待機してください。
- 上限エラーは該当する上限を示します。音声の場合は、ジョブのルートを案内します。
- 導入環境がまだ提供していないオプションには501が返されます。