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.

Shell
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.

RuleAnswer when broken
customer_authentication is present400 parameter_missing
methods names one to three known methods400 parameter_invalid
authenticated_at is not in the future400 parameter_invalid
authenticated_at is no more than 15 minutes before the request422 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#

KindMethods you may reportA2A InstaPay method
Something the customer knowspin, passwordThe A2A InstaPay PIN
Something the customer hassms_code, email_code, voice_code, authenticator_app, push_approval, security_keyA code by text message
Something the customer isbiometricFace 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-inverification_methods
password or pinbiometric, sms_code
biometricsms_code, pin
sms_codebiometric, pin
passkeypin

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:

JSON
"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 password and 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 code 123456.
  • 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.