@extends('layouts.app') @section('title', 'API Documentation - ' . config('app.name', 'Laravel 2FA')) @section('content')
Complete API reference for the Laravel 2FA authentication system
Laravel Sanctum token-based authentication
Two-factor authentication for enhanced security
Consistent JSON API responses
/api/auth/login
Authenticate user and return access token
{
"email": "user@example.com",
"password": "password"
}
{
"success": true,
"message": "Login successful",
"data": {
"user": {
"id": 1,
"name": "John Doe",
"email": "user@example.com",
"is_2fa_enabled": false
},
"token": "1|abc123...",
"requires_2fa": false
}
}
/api/auth/logout
Logout user and invalidate token
Authorization: Bearer {token}
Accept: application/json
{
"success": true,
"message": "Logged out successfully"
}
/api/auth/user
Get authenticated user information
Authorization: Bearer {token}
Accept: application/json
{
"success": true,
"data": {
"user": {
"id": 1,
"name": "John Doe",
"email": "user@example.com",
"is_2fa_enabled": true,
"created_at": "2024-01-01T00:00:00.000000Z"
}
}
}
/api/2fa/setup
Generate 2FA secret and QR code
Authorization: Bearer {token}
Accept: application/json
{
"success": true,
"message": "2FA setup initiated",
"data": {
"secret": "JBSWY3DPEHPK3PXP",
"qr_code": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
"qr_url": "otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example"
}
}
/api/2fa/confirm
Confirm 2FA setup with verification code
{
"code": "123456"
}
{
"success": true,
"message": "2FA enabled successfully"
}
/api/2fa/verify
Verify 2FA code for protected routes
{
"code": "123456"
}
{
"success": true,
"message": "2FA verification successful"
}
/api/2fa/status
Get 2FA status for current user
Authorization: Bearer {token}
Accept: application/json
{
"success": true,
"data": {
"is_2fa_enabled": true,
"is_2fa_verified": false
}
}
/api/2fa/disable
Disable 2FA for current user
{
"code": "123456"
}
{
"success": true,
"message": "2FA disabled successfully"
}
Routes protected by 2FA middleware require both authentication and 2FA verification.
Route::middleware(['auth:sanctum', '2fa.verified'])
->get('/api/protected', [ProtectedController::class, 'index']);
{
"success": false,
"message": "2FA verification required",
"error": "2fa_required"
}
Code | Message | Description |
---|---|---|
401 | Unauthorized | Invalid or missing authentication token |
403 | Forbidden | 2FA verification required |
422 | Validation Error | Invalid input data |
2fa_required | 2FA Required | Two-factor authentication is required |
invalid_totp | Invalid TOTP | Invalid or expired TOTP code |
setup_expired | Setup Expired | 2FA setup session has expired |
# Login
curl -X POST http://localhost/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"test@example.com","password":"password"}'
# Use returned token
curl -X GET http://localhost/api/auth/user \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"
http://localhost
Bearer {token}
application/json