Returned by create_user(), login(), refresh(), verify_magic_link(), and verify_email_otp().
{
"user": UserResponse,
"tokens": AuthTokens,
}
{
"user": UserResponse,
"tokens": AuthTokens,
}
| Field | Type | Description |
|---|
user | UserResponse | User info |
tokens | AuthTokens | Token pair |
User information. Returned inside AuthResponse and from the current_user dependency.
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"email": "user@example.com",
"name": "Jane Doe",
"email_verified": false,
"avatar_url": null,
"phone": null,
"banned": false,
"roles": ["admin"],
"created_at": "2026-01-15T10:30:00Z",
"session_id": "660f9500-f30c-52e5-b827-557766550000"
}
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"email": "user@example.com",
"name": "Jane Doe",
"email_verified": false,
"avatar_url": null,
"phone": null,
"banned": false,
"roles": ["admin"],
"created_at": "2026-01-15T10:30:00Z",
"session_id": "660f9500-f30c-52e5-b827-557766550000"
}
| Field | Type | Description |
|---|
id | UUID | User UUID |
email | str | Email address |
name | str | None | Display name |
email_verified | bool | Whether email is verified |
avatar_url | str | None | Profile image URL (from OAuth) |
phone | str | None | Phone number |
banned | bool | Whether the user is banned |
roles | list[str] | Assigned roles |
created_at | datetime | Account creation time |
session_id | UUID | None | Current session ID (from sid JWT claim) |
Token pair returned inside AuthResponse.
| Field | Type | Description |
|---|
access_token | str | JWT access token |
refresh_token | str | Opaque refresh token |
expires_in | int | Access token TTL in seconds |
Returned by get_sessions().
| Field | Type | Description |
|---|
id | UUID | Session UUID |
user_agent | str | None | Browser/client identifier at login |
ip_address | str | None | Client IP at login |
created_at | datetime | Session creation time |
expires_at | datetime | Session expiration time |
revoked | bool | Whether the session is revoked |
Returned by list_users().
| Field | Type | Description |
|---|
users | list[UserResponse] | Users on the current page |
total | int | Total matching users across all pages |
limit | int | Page size used |
offset | int | Offset used |
Event payload for user_deleted.
| Field | Type | Description |
|---|
user_id | UUID | Deleted user’s ID |
email | str | Deleted user’s email |
timestamp | datetime | When the deletion occurred |
Exception raised by all AuthFort methods on failure.
from authfort import AuthError
try:
await auth.login("user@example.com", "wrong")
except AuthError as e:
print(e.message) # "Invalid credentials"
print(e.code) # "invalid_credentials"
print(e.status_code) # 401
from authfort import AuthError
try:
await auth.login("user@example.com", "wrong")
except AuthError as e:
print(e.message) # "Invalid credentials"
print(e.code) # "invalid_credentials"
print(e.status_code) # 401
| Field | Type | Description |
|---|
message | str | Human-readable error message |
code | str | Machine-readable error code |
status_code | int | HTTP status code |
| Code | Status | Meaning |
|---|
invalid_credentials | 401 | Wrong email or password |
user_exists | 409 | Email already registered |
oauth_account | 400 | Account uses social login |
user_banned | 403 | Account is banned |
signup_disabled | 403 | Public signup is disabled |
refresh_token_invalid | 401 | Refresh token invalid |
refresh_token_expired | 401 | Refresh token expired |
user_not_found | 404 | User not found |
invalid_password | 400 | Old password incorrect (change password) |
invalid_reset_token | 400 | Reset token invalid or expired |
oauth_state_invalid | 400 | Invalid OAuth state |
oauth_state_expired | 400 | OAuth state expired |
invalid_email | 400 | Invalid email address |
invalid_verification_token | 400 | Email verification token invalid or expired |
invalid_magic_link | 400 | Magic link token invalid or expired |
invalid_otp | 400 | OTP code invalid or expired |
oauth_no_email | 400 | OAuth provider did not return an email |
oauth_no_user_id | 400 | OAuth provider did not return a user ID |