Live only. Like the rest of Pocket, two-factor authentication has no test mode. Enrolment, PINs and recovery codes all apply to your live account.All endpoints on this page use the bearer token from Pocket authentication and your public key, and always act on the account that token belongs to:
How payout authorization works
When you initiate a payout, the response tells you which code to ask the user for inchannel:
channel, then send what the user enters as code when you confirm the payout.
Factors are isolated. On a
TOTP challenge, only an authenticator code or a recovery code is accepted; on a PIN challenge, only the PIN or a recovery code. Sending a PIN to a TOTP challenge fails, and the failure counts towards the lockout.
The channel follows the pocket’s security settings and the owner’s setup: an enrolled authenticator takes precedence, then a transaction PIN, then email. SeerBit can also configure a pocket to require a factor — the REQUIRED_TOTP and REQUIRED_PIN channels. These never fall back to email: if the user hasn’t set up the required factor, initiating a payout fails with MFA required. Please enroll in <factor> first.
Your authenticator enrolment, PIN and recovery codes belong to your login, not to a single pocket — they work across every pocket you can access.
Set up an authenticator app
Any standard authenticator app works — Google Authenticator, Microsoft Authenticator or 1Password, for example.1
Start enrolment
POSTShow the QR code for the user to scan, or let them type Complete the next step before
cURL
Response
secretBase32 into their app. qrBase64 is raw PNG data without a data-URI prefix, so add one to display it:expiresAt. Treat the secret like a password — anyone who has it can generate valid codes — and don’t log or store it.2
Confirm enrolment
POSTSend the 6-digit code the app is currently showing. The authenticator isn’t active until this call succeeds.
cURL
Response
3
Save the recovery codes
The confirmation response contains 10 recovery codes. Show them to the user once and ask them to store them somewhere safe — they are the only way to authorize a payout if the authenticator device is lost.
channel: "TOTP".
Check authenticator status
GETResponse
Disable the authenticator
POSTchannel: "PIN"; otherwise they fall back to email.
cURL
Response
Set up a transaction PIN
A transaction PIN is a static secret of 4 to 12 alphanumeric characters that the user chooses. It is valid for 30 days, after which it must be rotated. POSTSet the first PIN
Setting a PIN requires a code that proves who the user is, and a user with no PIN yet has nothing to prove it with. So the first PIN is set through a temporary authenticator enrolment:1
Enrol an authenticator
Start and confirm enrolment, and save the recovery codes.
2
Set the PIN with an authenticator code
cURL
Response
3
Disable the authenticator (PIN-only users)
While the authenticator is enabled it takes precedence, so payouts keep asking for an authenticator code. To use the PIN instead, disable the authenticator. The PIN stays active, and every payout from then on asks for it.
Rotate the PIN
Rotate before the 30 days are up. Send the current PIN ascode — no authenticator code is needed:
cURL
Check PIN status
GETResponse
pinActive is true only when a PIN exists and is less than 30 days old. Check it before a payout run so you can prompt for rotation instead of failing mid-batch.
Recovery codes
Recovery codes stand in for an authenticator code or PIN when the user can’t produce one — for example, after losing their phone. There are 10, each is 8 characters, and each works once. They are accepted on bothTOTP and PIN challenges.
Generate new recovery codes
POSTcURL
Lockout and clock drift
- Five wrong codes lock the account for 15 minutes. Five consecutive incorrect codes lock the user’s authentication, and every confirmation attempt during the lockout fails with
Account locked due to too many failed attempts. Try again later.A correct code resets the count to zero. A wrong code doesn’t cancel the payout — it staysPENDING_OTP, so the user can try again. Don’t retry codes automatically — stop and ask the user. - Authenticator codes depend on the device clock. Codes change every 30 seconds, and SeerBit allows one step of drift either way. If a user’s codes are repeatedly rejected, have them turn on automatic date and time on their phone.
Errors
Confirmation failures come back with the payout’sstatus and a message — check both, not just the HTTP status code.