Skip to content

Security verifications

An additional identity check a signer goes through before signing. Each one consumes verification credits, and a lack of them fails with the code unavailable_verifications_credits.

ConstructorThe signer
SecurityVerification::sms($phone = null)types a code sent by SMS; without a phone, they provide one
SecurityVerification::manual()sends a photo ID and a selfie, which you approve or reject
SecurityVerification::upload()sends the front and back of a photo ID
SecurityVerification::live()sends a photo ID, a selfie and a liveness video, matched automatically
SecurityVerification::pfFacial()takes a selfie SERPRO checks against the Brazilian government's photo for their CPF
SecurityVerification::biometricAndTextExtraction()a photo ID and a selfie, with the ID's data extracted and compared
SecurityVerification::livenessAndTextExtraction()liveness and a photo ID, with the data extracted and compared
php
Signer::email('ana@example.com')
    ->withVerification(SecurityVerification::sms())
    ->withVerification(SecurityVerification::live()->withoutFallback());

A signer can have only one of manual, upload, live and pfFacial, and SMS beside it. Two are refused before sending.

When an automatic check fails

upload, live, pfFacial and biometricAndTextExtraction fall back to a manual check after their last attempt, which you then approve or reject. With withoutFallback(), the document is rejected instead.

A manual check waiting for you arrives as a signature.biometric_unapproved webhook, and each Data\Verification on a signature carries the $id and the $images to decide on.

Approving a manual check

A manual() check, or an automatic one that fell back to manual, waits for you. The photos are on the signature's verification:

php
$verification = $document->signature($publicId)?->verifications[0];

$verification->images;   // ['front' => 'https://…', 'selfie' => 'https://…']

Autentique::signers()->approveBiometric($verification->id, $publicId);
Autentique::signers()->rejectBiometric($verification->id, $publicId);

Both return the signature as it is afterwards. Autentique reports the outcome as the signature.biometric_approved or signature.biometric_rejected webhook.

Version 1.0.0. Released under the MIT License.