Base URL
All API requests go to:The API uses JWT bearer tokens: exchange your credentials for an access token, send it on every request, and refresh it when it expires.
How it works
- Access token — valid for 24 hours. Sent on every request as a bearer token.
- Refresh token — valid for 7 days. Used to mint new access tokens without sending credentials again.
1. Get a token
POST your credentials to the token endpoint. It returns an access and a refresh token.
otp — see Two-factor authentication.
→ login in the API reference
2. Authenticate every request
Send the access token in theAuthorization header on every call. Every endpoint requires it.
401.
3. Refresh when it expires
Access tokens are valid for 24 hours. When one expires, a request returns401 — exchange your refresh token for a new access token instead of logging in again.
token_refresh in the API reference
Two-factor authentication
If an account has 2FA enabled, the login call requires a current TOTP code in theotp field:
1
Start enrollment
setup_2fa returns a seed and a qr_code_url. Add it to your authenticator app.2
Confirm
verify_2fa_enrollment with a current otp activates 2FA and returns backup codes — store them securely.Best practices for integrations
- Use a dedicated service account, not a person’s login.
- Store credentials in a secret manager — never in code or version control.
- Cache the access token and reuse it; refresh on
401, re-authenticate only when refresh fails. - Send
Authorization: Bearer <access>on every request.
Change a password
new_password updates the password for the authenticated account (password, new_password, confirm_new_password).