API reference / Accounts
post
/v1/tokenIssue or refresh a session
- Operation
issueToken- Authentication
- None — public
The only unauthenticated write route in the API. Rate limited per IP *and* per email, counted separately: per-IP alone lets a botnet spread an attack on one account, per-email alone lets one host lock out every account it can name. A failure is deliberately indistinguishable from any other failure — same shape, same message, and a hash comparison that runs even when the account does not exist, so the response time does not reveal whether an address is registered.
Request
Body
TokenBody
Responses
200A session, or a request for a second factor.
access_tokenstringrefresh_tokenstringtoken_typestringone of: Bearer
expires_inintegermfa_requiredbooleanmfa_ticketstringuserobject401The credentials were rejected. A wrong password, an unknown address and an expired ticket return an identical body on purpose: distinguishing them would let a caller discover which accounts exist.
errorobjectrequired429Rate limit exceeded. Retry after `retry-after` seconds.
errorobjectrequiredExample
curl -X POST https://api.haavisa.com/v1/tokenMore in Accounts
GET/v1/token/introspectPOST/v1/token/mfaPOST/v1/token/revokePOST/v2/accountsGET/v2/accounts/mePATCH/v2/accounts/meGET/v2/accounts/me/messaging-consentPUT/v2/accounts/me/messaging-consentPOST/v2/accounts/mfa/activatePOST/v2/accounts/mfa/disablePOST/v2/accounts/mfa/enrollPOST/v2/accounts/password-resetPOST/v2/accounts/password-reset/confirmPOST/v2/accounts/sign-inPOST/v2/accounts/sign-outPOST/v2/accounts/verify-emailPOST/v2/accounts/verify-email/resend
Something unclear? The eligibility guide explains the model behind the answers; the errors guide covers the envelope.