Skip to content

Verify NFC ​

Verifies a completed chip read against the C06 national police database and closes the transaction. This is the only authoritative verdict in the NFC flow — decide on this result, not on what the SDK reported.

Endpoint ​

http
POST /v1/verify_nfc
Content-Type: application/json
json
{
  "document_id": "001xxxxxxxxx",
  "ref_id": "ref_00000001",
  "verification_key": "<VERIFICATION_KEY>"
}

Parameters:

ParamTypeRequiredDefaultDescription
document_idstringYes—The Document ID. Max length 64.
ref_idstringYes—The transaction reference ID. Max length 64.
verification_keystringYes—The verification key returned by Read NFC. Max length 128.
force_rar_verifyboolNofalseVerify with C06 regardless of the current verification status.
verify_transaction_onlyboolNofalseVerify the integrity of the Read NFC response only, without calling C06.

Returns: VerifyNfcResponse

Authenticate this call with HMAC — see Overview § Authentication.

INFO

verify_transaction_only checks that the read was not tampered with, but skips the C06 lookup entirely — it does not confirm the citizen exists in the national database. Use it for integrity-only checks, never as a substitute for a full verification.

Sample Request ​

bash
curl --location '<BASE_URL>/v1/verify_nfc' \
  --header 'Authorization: ATV <ACCESS_ID>:<SIGNATURE>' \
  --header 'X-TV-Timestamp: <TIMESTAMP>' \
  --header 'Content-Type: application/json' \
  --data '{
    "document_id": "001xxxxxxxxx",
    "ref_id": "ref_00000001",
    "verification_key": "<VERIFICATION_KEY>"
  }'

Response ​

json
{
  "success": true,
  "code": 0,
  "message": "success",
  "request_id": "50e34861-d362-46ac-bf93-119e8dc6f2bf",
  "data": {
    "citizen_identify": "001xxxxxxxxx",
    "old_citizen_identify": "xxxxxxxxx",
    "full_name": "Nguyễn Văn A",
    "date_of_birth": "12/12/1990",
    "date_of_expiry": "12/12/2030",
    "gender": "Nam",
    "nationality": "Việt Nam",
    "ethnic": "Kinh",
    "religion": "Không",
    "place_of_origin": "Xã An Khánh, Huyện Châu Thành, Tỉnh Bến Tre",
    "place_of_residence": "Tổ 1, Phường Bến Nghé, Quận 1, TP. Hồ Chí Minh",
    "personal_identification": "Sẹo chấm cách 1cm trên đuôi mày trái",
    "date_provide": "01/01/2021",
    "father_name": "Nguyễn Văn B",
    "mother_name": "Trần Thị C",
    "partner_name": "",
    "face_image": "/9j/4AAQSkZJRgABAQA…",
    "is_verified": true,
    "verified_at": 1672531200
  }
}
FieldTypeDescription
codeintThe error code — 0 means no error. Max length 10.
request_idstringThe server request ID, used for tracing. Max length 64.
data.is_verifiedboolThe NFC verification status against C06.
data.verified_atintUnix timestamp of when the NFC read was verified. Max length 10.

The remaining data fields carry the cardholder identity, identical in shape to the Read NFC response.

On success the transaction status moves to VERIFIED.

WARNING

Verify the X-Signature header before trusting is_verified — an unsigned or unverified response is an unauthenticated one. See Overview § Response Signing.

Errors ​

CodeDescription
2001010The API key is incorrect.
2001019Reference ID not found.
2001020Transaction lock failed.
2001021Invalid transaction request.
2001023Invalid transaction key.
5001000Internal server error.
CodeDescription
401You are not authorized to perform the action.
500Some unexpected error occurs while processing the request.

Next Steps ​

Developers