curl -X POST 'https://verification.didit.me/v3/poa/' \
-H 'x-api-key: YOUR_API_KEY' \
-F 'document=@./utility-bill.pdf' \
-F 'expected_address=Av. Monseñor Tavella 1291, Salta, Argentina' \
-F 'expected_country=ARG' \
-F 'expected_first_name=Sophia' \
-F 'expected_last_name=Martinez' \
-F 'poa_languages_allowed=en,es' \
-F 'vendor_data=user-123' \
--max-time 45from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.proof_of_address.verify(
document=open("document.pdf", "rb"),
expected_address="Av. Monseñor Tavella 1291, Salta, Argentina",
expected_country="ARG",
expected_first_name="Sophia",
expected_last_name="Martinez",
poa_languages_allowed="en,es",
save_api_request=True,
vendor_data="user-123",
)
print(result)import Didit, { fileFromPath } from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.proofOfAddress.verify({
document: await fileFromPath("document.pdf"),
expected_address: "Av. Monseñor Tavella 1291, Salta, Argentina",
expected_country: "ARG",
expected_first_name: "Sophia",
expected_last_name: "Martinez",
poa_languages_allowed: "en,es",
save_api_request: true,
vendor_data: "user-123",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.ProofOfAddress.Verify(ctx, didit.ProofOfAddressVerifyParams{
Document: didit.FileFromPath("document.pdf"),
ExpectedAddress: didit.String("Av. Monseñor Tavella 1291, Salta, Argentina"),
ExpectedCountry: didit.String("ARG"),
ExpectedFirstName: didit.String("Sophia"),
ExpectedLastName: didit.String("Martinez"),
POALanguagesAllowed: didit.String("en,es"),
SaveAPIRequest: didit.Bool(true),
VendorData: didit.String("user-123"),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.nio.file.Path;
import me.didit.Didit;
import me.didit.types.ProofOfAddressVerifyParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.proofOfAddress().verify(ProofOfAddressVerifyParams.builder()
.document(Path.of("document.pdf"))
.expectedAddress("Av. Monseñor Tavella 1291, Salta, Argentina")
.expectedCountry("ARG")
.expectedFirstName("Sophia")
.expectedLastName("Martinez")
.poaLanguagesAllowed("en,es")
.saveApiRequest(true)
.vendorData("user-123")
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
use Didit\File;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->proofOfAddress->verify([
'document' => File::fromPath('document.pdf'),
'expected_address' => 'Av. Monseñor Tavella 1291, Salta, Argentina',
'expected_country' => 'ARG',
'expected_first_name' => 'Sophia',
'expected_last_name' => 'Martinez',
'poa_languages_allowed' => 'en,es',
'save_api_request' => true,
'vendor_data' => 'user-123',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.proof_of_address.verify(
document: Pathname("document.pdf"),
expected_address: "Av. Monseñor Tavella 1291, Salta, Argentina",
expected_country: "ARG",
expected_first_name: "Sophia",
expected_last_name: "Martinez",
poa_languages_allowed: "en,es",
save_api_request: true,
vendor_data: "user-123"
)
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.ProofOfAddress.VerifyAsync(new ProofOfAddressVerifyParams
{
Document = FileUpload.FromPath("document.pdf"),
ExpectedAddress = "Av. Monseñor Tavella 1291, Salta, Argentina",
ExpectedCountry = "ARG",
ExpectedFirstName = "Sophia",
ExpectedLastName = "Martinez",
PoaLanguagesAllowed = "en,es",
SaveApiRequest = true,
VendorData = "user-123",
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"request_id": "4b523a8d-ed32-45e4-8aa8-a89eda459d88",
"poa": {
"issuing_state": "ARG",
"document_type": "UTILITY_BILL",
"document_subtype": "WATER_BILL",
"document_language": "es",
"issuer": "Aguas del Norte",
"issue_date": "2026-04-10",
"expiration_date": null,
"poa_address": "AVDA. MONSEÑOR TAVELLA N° 1291, B° VILLA LAVALLE CP: 4400, CAPITAL - SALTA",
"poa_formatted_address": "Av. Monseñor Tavella 1291 b, A4400 Salta, Argentina",
"poa_parsed_address": {
"street_1": "Avenida Monseñor Tavella 1291",
"street_2": "b",
"city": "Salta",
"region": "Salta",
"country": "AR",
"postal_code": "A4400",
"document_location": {
"latitude": -24.8208682,
"longitude": -65.4130954
}
},
"expected_details_address": null,
"expected_details_formatted_address": null,
"expected_details_parsed_address": null,
"name_on_document": "OESTE EMBOTELLADORA S.A.",
"extra_fields": {
"bank_account_number": null,
"bank_iban": null,
"bank_sort_code": null,
"bank_routing_number": null,
"bank_swift_bic": null,
"bank_branch_name": null,
"bank_branch_address": null,
"document_phone_number": null,
"additional_names": [
"LA EMBOTELLADORA DEL NORTE SA"
]
},
"detected_codes": [
{
"type": "QR_CODE",
"page_number": 1,
"position": [
[
820,
1120
],
[
1002,
1120
],
[
1002,
1302
],
[
820,
1302
]
],
"x": 820,
"y": 1120,
"width": 182,
"height": 182,
"page_width": 1190,
"page_height": 1684,
"raw_payload": "aHR0cHM6Ly9hZ3Vhc2RlbG5vcnRlLmNvbS9mYWN0dXJhLzk5ODgxMQ==",
"parsed_payload": "https://aguasdelnorte.com/factura/998811"
},
{
"type": "CODE_128",
"page_number": 1,
"position": [
[
112,
1480
],
[
560,
1480
],
[
560,
1540
],
[
112,
1540
]
],
"x": 112,
"y": 1480,
"width": 448,
"height": 60,
"page_width": 1190,
"page_height": 1684,
"raw_payload": "MDA5OTg4MTEwMDA0Mg==",
"parsed_payload": "0099881100042"
}
],
"status": "Approved",
"warnings": []
},
"vendor_data": "user-123",
"metadata": null,
"created_at": "2026-06-12T02:29:02.439655+00:00"
}住所証明API:POA認証とOCRによる住所抽出
DiditのPOST /v3/poa/で、公共料金の請求書、銀行取引明細書、賃貸契約書を検証できます。OCRで住所を抽出し、真正性もチェックします。従量課金制で契約は不要です。
curl -X POST 'https://verification.didit.me/v3/poa/' \
-H 'x-api-key: YOUR_API_KEY' \
-F 'document=@./utility-bill.pdf' \
-F 'expected_address=Av. Monseñor Tavella 1291, Salta, Argentina' \
-F 'expected_country=ARG' \
-F 'expected_first_name=Sophia' \
-F 'expected_last_name=Martinez' \
-F 'poa_languages_allowed=en,es' \
-F 'vendor_data=user-123' \
--max-time 45from didit import Didit
# Reads DIDIT_API_KEY.
client = Didit()
result = client.proof_of_address.verify(
document=open("document.pdf", "rb"),
expected_address="Av. Monseñor Tavella 1291, Salta, Argentina",
expected_country="ARG",
expected_first_name="Sophia",
expected_last_name="Martinez",
poa_languages_allowed="en,es",
save_api_request=True,
vendor_data="user-123",
)
print(result)import Didit, { fileFromPath } from "@didit-protocol/sdk-node";
// Reads DIDIT_API_KEY.
const didit = new Didit();
const result = await didit.proofOfAddress.verify({
document: await fileFromPath("document.pdf"),
expected_address: "Av. Monseñor Tavella 1291, Salta, Argentina",
expected_country: "ARG",
expected_first_name: "Sophia",
expected_last_name: "Martinez",
poa_languages_allowed: "en,es",
save_api_request: true,
vendor_data: "user-123",
});
console.log(result);ctx := context.Background()
// Reads DIDIT_API_KEY.
client := didit.NewClient()
result, err := client.ProofOfAddress.Verify(ctx, didit.ProofOfAddressVerifyParams{
Document: didit.FileFromPath("document.pdf"),
ExpectedAddress: didit.String("Av. Monseñor Tavella 1291, Salta, Argentina"),
ExpectedCountry: didit.String("ARG"),
ExpectedFirstName: didit.String("Sophia"),
ExpectedLastName: didit.String("Martinez"),
POALanguagesAllowed: didit.String("en,es"),
SaveAPIRequest: didit.Bool(true),
VendorData: didit.String("user-123"),
})
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)import java.nio.file.Path;
import me.didit.Didit;
import me.didit.types.ProofOfAddressVerifyParams;
// Reads DIDIT_API_KEY.
Didit client = new Didit();
var result = client.proofOfAddress().verify(ProofOfAddressVerifyParams.builder()
.document(Path.of("document.pdf"))
.expectedAddress("Av. Monseñor Tavella 1291, Salta, Argentina")
.expectedCountry("ARG")
.expectedFirstName("Sophia")
.expectedLastName("Martinez")
.poaLanguagesAllowed("en,es")
.saveApiRequest(true)
.vendorData("user-123")
.build());
System.out.println(result);<?php
require 'vendor/autoload.php';
use Didit\DiditClient;
use Didit\File;
// Reads DIDIT_API_KEY.
$didit = new DiditClient();
$result = $didit->proofOfAddress->verify([
'document' => File::fromPath('document.pdf'),
'expected_address' => 'Av. Monseñor Tavella 1291, Salta, Argentina',
'expected_country' => 'ARG',
'expected_first_name' => 'Sophia',
'expected_last_name' => 'Martinez',
'poa_languages_allowed' => 'en,es',
'save_api_request' => true,
'vendor_data' => 'user-123',
]);
print_r($result->toArray());require "didit"
# Reads DIDIT_API_KEY.
didit = Didit::Client.new
result = didit.proof_of_address.verify(
document: Pathname("document.pdf"),
expected_address: "Av. Monseñor Tavella 1291, Salta, Argentina",
expected_country: "ARG",
expected_first_name: "Sophia",
expected_last_name: "Martinez",
poa_languages_allowed: "en,es",
save_api_request: true,
vendor_data: "user-123"
)
puts result.to_husing System;
using System.Text.Json;
using Didit;
// Reads DIDIT_API_KEY.
using var client = new DiditClient();
var result = await client.ProofOfAddress.VerifyAsync(new ProofOfAddressVerifyParams
{
Document = FileUpload.FromPath("document.pdf"),
ExpectedAddress = "Av. Monseñor Tavella 1291, Salta, Argentina",
ExpectedCountry = "ARG",
ExpectedFirstName = "Sophia",
ExpectedLastName = "Martinez",
PoaLanguagesAllowed = "en,es",
SaveApiRequest = true,
VendorData = "user-123",
});
Console.WriteLine(JsonSerializer.Serialize(result));{
"request_id": "4b523a8d-ed32-45e4-8aa8-a89eda459d88",
"poa": {
"issuing_state": "ARG",
"document_type": "UTILITY_BILL",
"document_subtype": "WATER_BILL",
"document_language": "es",
"issuer": "Aguas del Norte",
"issue_date": "2026-04-10",
"expiration_date": null,
"poa_address": "AVDA. MONSEÑOR TAVELLA N° 1291, B° VILLA LAVALLE CP: 4400, CAPITAL - SALTA",
"poa_formatted_address": "Av. Monseñor Tavella 1291 b, A4400 Salta, Argentina",
"poa_parsed_address": {
"street_1": "Avenida Monseñor Tavella 1291",
"street_2": "b",
"city": "Salta",
"region": "Salta",
"country": "AR",
"postal_code": "A4400",
"document_location": {
"latitude": -24.8208682,
"longitude": -65.4130954
}
},
"expected_details_address": null,
"expected_details_formatted_address": null,
"expected_details_parsed_address": null,
"name_on_document": "OESTE EMBOTELLADORA S.A.",
"extra_fields": {
"bank_account_number": null,
"bank_iban": null,
"bank_sort_code": null,
"bank_routing_number": null,
"bank_swift_bic": null,
"bank_branch_name": null,
"bank_branch_address": null,
"document_phone_number": null,
"additional_names": [
"LA EMBOTELLADORA DEL NORTE SA"
]
},
"detected_codes": [
{
"type": "QR_CODE",
"page_number": 1,
"position": [
[
820,
1120
],
[
1002,
1120
],
[
1002,
1302
],
[
820,
1302
]
],
"x": 820,
"y": 1120,
"width": 182,
"height": 182,
"page_width": 1190,
"page_height": 1684,
"raw_payload": "aHR0cHM6Ly9hZ3Vhc2RlbG5vcnRlLmNvbS9mYWN0dXJhLzk5ODgxMQ==",
"parsed_payload": "https://aguasdelnorte.com/factura/998811"
},
{
"type": "CODE_128",
"page_number": 1,
"position": [
[
112,
1480
],
[
560,
1480
],
[
560,
1540
],
[
112,
1540
]
],
"x": 112,
"y": 1480,
"width": 448,
"height": 60,
"page_width": 1190,
"page_height": 1684,
"raw_payload": "MDA5OTg4MTEwMDA0Mg==",
"parsed_payload": "0099881100042"
}
],
"status": "Approved",
"warnings": []
},
"vendor_data": "user-123",
"metadata": null,
"created_at": "2026-06-12T02:29:02.439655+00:00"
}承認
お客様のアプリケーションのAPIキーです。Business ConsoleのDevelopers -> API keysで取得できます。プライマリキーはフルアクセス権を持ちます。名前付きキーにはスコープを設定できます。リソースごとのアクセス権(なし、読み取り、書き込み)、一部のワークフローまたは承認済みセッションへの限定、IPアドレスのリストへの限定、有効期限の設定です。401は、キーが誤っている、失効している、または期限切れであることを意味します。403は、キーが送信されていない、キーにこのリソースやアクションへのアクセス権がない、またはIPリスト外のアドレスからリクエストが送信されたことを意味します。セッションのルートでの404は、セッションがキーのワークフローまたはステータスの対象外であることを意味します。メディアへのアクセス権がないキーでは、画像、動画、PDFのURLがnullで返されます。セッションの書き込み権限がないキーでは、セッションのリンクとトークンがnullで返されます。詳細は次を参照してください: https://docs.didit.me/console/api-keys
ボディ
住所証明の書類です。使用できる拡張子:tiff、jpg、jpeg、png、pdf、webp。最大アップロードサイズ:15 MB(これを超えるファイルは400で拒否されます)。複数ページのPDFに対応しています(レイテンシは長くなります)。暗号化されたPDFにはdocument_passwordが必要です。画像は処理前に自動的に圧縮されます。
documentが暗号化されたPDFの場合に復号するためのパスワード。暗号化されたPDFをパスワードなし(または誤ったパスワード)で送信すると400が返ります。
書類と照合する住所です。ジオコーディングされたうえで、抽出された住所と比較されます。一致しない場合(または想定住所をジオコーディング・検証できない場合)はADDRESS_MISMATCH_WITH_PROVIDEDが追加され、その扱いはpoa_address_mismatch_actionで制御されます。ジオコーディング後の形式はexpected_details_formatted_address / expected_details_parsed_addressで返されます。
"Av. Monseñor Tavella 1291, Salta, Argentina"
書類と照合する国(ISO 3166-1コード、例: ARGまたはAR)。書類の国と一致しない場合はPOA_COUNTRY_MISMATCH_WITH_PROVIDEDが追加され、その扱いはpoa_address_mismatch_actionで制御されます。
"ARG"
name_on_documentと照合する名です(音訳を考慮したあいまい一致)。スコアが一致しきい値を下回るとNAME_MISMATCH_WITH_PROVIDEDが追加され、poa_address_mismatch_actionに従って処理されます。
"Sophia"
name_on_documentと照合する姓。expected_first_nameと組み合わせて一致スコアを算出します。
"Martinez"
受け付ける書類の言語をISO 639-1コードで指定するカンマ区切りのリスト(例:en,es,fr)。省略した場合または空欄の場合は、サポートされている51言語すべてを受け付けます。リストに含まれない言語の書類にはUNSUPPORTED_DOCUMENT_LANGUAGEが付与されます(poa_unsupported_language_actionで制御)。リストに不明なコードが含まれている場合は、サポートされているコードの一覧とともに400が返されます。
"en,es"
書類の種類ごとに書類の最大経過月数を設定する、カンマ区切りのkey:valueペア。キー: utility_bill、bank_statement、government_issued_document、other_poa_document。値: 1~120、または無制限(経過期間チェックなし)の場合は-1。省略時のデフォルト: utility_bill:3,bank_statement:3,government_issued_document:12,other_poa_document:12。上限より古い書類はPOA_DOCUMENT_EXPIREDで却下されます。注意: このフィールドを指定する場合は、受け付けるすべての種類を列挙してください。省略した種類は受け付けないものとして扱われ(情報コードPOA_DOCUMENT_NOT_SUPPORTED_FOR_APPLICATION)、その経過期間チェックはスキップされます。
"utility_bill:3,bank_statement:6"
受け付けられますが、現在適用されていません。名前不一致の警告(NAME_MISMATCH_WITH_PROVIDED)は、代わりにpoa_address_mismatch_actionに従います。名前と住所の両方の不一致時の動作を制御するには、poa_address_mismatch_actionを設定してください。
DECLINE, NO_ACTION ファイルの完全性に問題がある場合の処理です。実際には、このエンドポイントで生成されるのはDOCUMENT_METADATA_MISMATCHのみです。
DECLINE, NO_ACTION 書類の改ざんが疑われる場合の処理です(SUSPECTED_DOCUMENT_MANIPULATION)。たとえば、PDFがデジタル署名後に変更された、既知のPDF編集ソフトで処理された、オーバーレイテキストによる改ざんが見られる、EXIFの日付に矛盾がある、といったケースです。
DECLINE, NO_ACTION 書類の言語がpoa_languages_allowedに含まれない場合の処理です(UNSUPPORTED_DOCUMENT_LANGUAGE)。
DECLINE, NO_ACTION 抽出した情報がexpected_*フィールドと一致しない場合の対応です。ADDRESS_MISMATCH_WITH_PROVIDED、NAME_MISMATCH_WITH_PROVIDED、POA_COUNTRY_MISMATCH_WITH_PROVIDEDはいずれもこのアクションに従います。
DECLINE, NO_ACTION 書類上で発行元の会社または組織を特定できない場合の処理です(ISSUER_NOT_IDENTIFIED)。
DECLINE, NO_ACTION true(デフォルト)の場合、呼び出しはAPIタイプのセッションとして保存されます。このセッションはBusiness Consoleに表示され、返されたrequest_idを使ってGET /v3/session/{sessionId}/decision/で取得でき、status.updatedWebhookで通知され、アップロードされた書類が保存されます。falseの場合、何も保存されず、request_idはレスポンスの照合専用の一時的なUUIDになります。
true
任意の不透明な文字列(社内のユーザーID、メールアドレス、UUIDなど)です。保存されたセッションに格納され、レスポンスでそのまま返されます。API呼び出しを自社の記録と関連付けたり、後でセッションを絞り込んだりするために使用します。
"user-123"
セッションとともに保存され(save_api_request=trueの場合)、レスポンスでそのまま返される任意のJSONオブジェクトです。マルチパートリクエストでは、JSONエンコードされた文字列フィールドとして送信してください(例: metadata={"flow":"onboarding"})。オブジェクトとして解析されます。
{ "flow": "onboarding" }
レスポンス
書類が処理されました。poa.statusはApprovedまたはDeclinedで、検出されたすべての問題はpoa.warningsに個別に列挙されます。期限切れ、不一致、または不審な書類でもstatus: "Declined"とともに200が返されるため、HTTPコードだけでなくボディを確認してください。save_api_request=trueの場合、request_idは永続化されたセッションIDです。
save_api_request=trueの場合は保存されたセッションID(GET /v3/session/{sessionId}/decision/で使用可能)、それ以外の場合は一時的な相関UUIDです。
Show child attributes
Show child attributes
送信したvendor_dataのエコー、またはnull。
送信したmetadataオブジェクトのエコー、またはnull。
レスポンスが生成された日時を示すISO 8601タイムスタンプ(UTC)。