Everything you need to know about AuthenticatorAPI.com and TOTP-based 2FA
SecretCode is a value you generate and store yourself — it is never registered with our service.
SecretCode is passed as a query parameter, used transiently to compute the expected TOTP value for that instant in time, and then discarded. Nothing is written to a database, logged to disk, or retained in any form. The source code is publicly available on GitHub if you wish to verify this behaviour for yourself.
SecretCode should be a Base32-encoded string. Base32 uses the characters A–Z and 2–7. A minimum of 16 Base32 characters (80 bits of entropy) is recommended; 32 characters (160 bits) is ideal for strong security. You should generate this value using a cryptographically secure random number generator and store it encrypted in your database, associated with the user's account.
JBSWY3DPEHPK3PXP
true or false for validation, and an image URL or QR data for pairing), making it trivial to consume from any environment.
/pair.aspx endpoint returns an <img> tag containing a QR code image that you can embed directly in your HTML. Alternatively, you can call /qr.aspx directly to get the raw QR code image. The QR code encodes an otpauth:// URI that Google Authenticator and compatible apps understand natively.
https://www.authenticatorApi.com/pair.aspx?AppName=MyApp&AppInfo=john@example.com&SecretCode=JBSWY3DPEHPK3PXP
/Validate.aspx endpoint returns the plain text string True or False (case-insensitive). Your application should read this response, trim any whitespace, and compare it to determine whether to grant or deny access.
https://www.authenticatorApi.com/Validate.aspx?Pin=123456&SecretCode=JBSWY3DPEHPK3PXPResponse:
True or False
otpauth:// URI format produced by the Pair endpoint is the same standard format used by Google Authenticator, Authy, Microsoft Authenticator, 1Password, Bitwarden, and all other major authenticator apps.
/Validate.aspx endpoint regardless of which app the user chooses.
SecretCode value to the user alongside the QR code and instruct them to tap "Enter a setup key" in their app. The secret should be displayed in its Base32 form (e.g. JBSWY3DPEHPK3PXP) grouped in blocks of 4 characters for readability.
SecretCode for their account and stop calling the Validate endpoint during login. The API itself has no concept of enabled or disabled users — it is stateless and simply validates whatever PIN and secret you send it.