Documentation menu
Docs / Build
The customer's sign-in and the second factor
Report how the customer signed in to your app; the customer then verifies with A2A InstaPay by a method of a different kind.
Your customers sign in to your app. When they move money or change their account, they also verify with A2A InstaPay in the hosted screens, by a method of a different kind from the one they used to sign in to your app. Two independent factors protect every movement: yours first, then A2A InstaPay's.
Report the sign-in#
Every load, payment, withdrawal and refund carries customer_authentication: the methods the customer signed in to your app with in this session, and when.
curl -X POST https://sandbox.a2ainstapay.com/v1/loads -H "Authorization: Bearer $A2A_ACCESS_TOKEN" -H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" -d '{
"customer_id": "cus_...", "amount": 10000,
"customer_authentication": { "methods": ["password"], "authenticated_at": "2026-10-16T14:02:11Z" }
}'The same field goes with the hosted sessions payment_confirm, pin_reset, pin_change, contact_change, profile_change and identity_change. It is not used with onboarding.
| Rule | Answer when broken |
|---|---|
customer_authentication is present | 400 parameter_missing |
methods names one to three known methods | 400 parameter_invalid |
authenticated_at is not in the future | 400 parameter_invalid |
authenticated_at is no more than 15 minutes before the request | 422 reauthentication_required, with details.max_age_seconds |
On reauthentication_required, ask the customer to sign in to your app again, then retry with the new time. The limit is 15 minutes unless your Tenant agreement sets another; in the sandbox you can change it in the portal settings. Report only the methods the customer actually used: A2A InstaPay relies on your report to decide what it asks for, and your Tenant agreement requires it to be accurate.
Kinds of factor#
| Kind | Methods you may report | A2A InstaPay method |
|---|---|---|
| Something the customer knows | pin, password | The A2A InstaPay PIN |
| Something the customer has | sms_code, email_code, voice_code, authenticator_app, push_approval, security_key | A code by text message |
| Something the customer is | biometric | Face ID or fingerprint |
A passkey counts as both something the customer has and something the customer is.
What A2A InstaPay asks for#
The confirmation session lists the A2A InstaPay methods accepted on their own, in verification_methods:
| Your sign-in | verification_methods |
|---|---|
password or pin | biometric, sms_code |
biometric | sms_code, pin |
sms_code | biometric, pin |
passkey | pin |
The A2A InstaPay PIN and a code together are always accepted, so a customer without Face ID or fingerprint can still confirm. A PIN reset has no PIN: a code or Face ID alone where accepted, or both together. The flows that sign the customer in to A2A InstaPay (contact, profile and identity changes, PIN change, terms acceptance and review questions) always include the PIN, with another method first when the PIN is the same kind as your sign-in.
What the movement records#
Once the customer confirms, the movement's authorization shows both factors:
"authorization": {
"customer_authentication": { "methods": ["password"], "authenticated_at": "2026-10-16T14:02:11Z" },
"verification_methods": ["biometric"],
"verified_at": "2026-10-16T14:02:40Z"
}authorization is null until the movement is confirmed.
Test it#
- Report
passwordand confirm in the hosted screen: the screen offers Face ID or fingerprint, or a code. In the sandbox, Face ID or fingerprint is simulated and set up with the PIN and the code123456. - Report a sign-in 20 minutes ago to see
reauthentication_required. - Run the scenario Second factor and the Tenant's sign-in in the portal.
Questions about this page? Contact developer support.