Laravel API Routes & Response Helpers
A clean, standardized API response pattern and versioned routing architecture built for production Laravel applications. Click any code card to quickly copy and drop directly into your projects.
Reusable Response Functions
Consistent successRes() and errorRes() response helpers for controllers or traits.
/**
* Standardized Success Response
*
* @param int|null $statusCode
* @param string|null $message
* @param mixed $data
* @return \Illuminate\Http\JsonResponse
*/
public function successRes($statusCode = 200, $message = null, $data = null)
{
return response()->json([
'success' => true,
'statusCode' => $statusCode,
'message' => $message,
'data' => $data,
], $statusCode);
}
/**
* Standardized Error Response
*
* @param int|null $statusCode
* @param string|null $message
* @param mixed $data
* @return \Illuminate\Http\JsonResponse
*/
public function errorRes($statusCode = 400, $message = null, $data = null)
{
return response()->json([
'success' => false,
'statusCode' => $statusCode,
'message' => $message,
'data' => $data,
], $statusCode);
}
Structured API Routes
Clean versioned routing structure under v1 with public auth and protected resource groups.
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\V1\AuthController;
use App\Http\Controllers\Api\V1\UserController;
/*
|--------------------------------------------------------------------------
| API Routes — Version 1 (v1)
|--------------------------------------------------------------------------
| Base URL: /api/v1/...
*/
Route::prefix('v1')->group(function () {
// ==========================================
// Public Authentication Endpoints
// ==========================================
Route::prefix('auth')->group(function () {
Route::post('register', [AuthController::class, 'register']);
Route::post('login', [AuthController::class, 'login']);
Route::post('forgot-password', [AuthController::class, 'forgotPassword']);
Route::post('reset-password', [AuthController::class, 'resetPassword']);
});
// ==========================================
// Protected API Endpoints (Auth: Sanctum)
// ==========================================
Route::middleware('auth:sanctum')->group(function () {
// Authenticated Session Actions
Route::prefix('auth')->group(function () {
Route::get('me', [AuthController::class, 'me']);
Route::post('logout', [AuthController::class, 'logout']);
Route::post('refresh', [AuthController::class, 'refresh']);
});
// User Account Management
Route::prefix('user')->group(function () {
Route::get('profile', [UserController::class, 'profile']);
Route::put('profile', [UserController::class, 'updateProfile']);
Route::put('change-password', [UserController::class, 'changePassword']);
});
});
});
Controller Implementation Example
See how successRes() and errorRes() are called in AuthController.php.
<?php
namespace App\Http\Controllers\Api\V1;
use App\Http\Controllers\Controller;
use App\Traits\ApiResponse;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
class AuthController extends Controller
{
use ApiResponse; // Imports successRes() and errorRes()
/**
* User Registration
*/
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:8|confirmed',
]);
if ($validator->fails()) {
return $this->errorRes(422, 'Validation failed.', $validator->errors());
}
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
$token = $user->createToken('auth_token')->plainTextToken;
return $this->successRes(201, 'User registered successfully.', [
'user' => $user,
'token' => $token,
]);
}
/**
* User Login
*/
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (!Auth::attempt($credentials)) {
return $this->errorRes(401, 'Invalid credentials provided.');
}
$user = Auth::user();
$token = $user->createToken('auth_token')->plainTextToken;
return $this->successRes(200, 'Login successful.', [
'user' => $user,
'token' => $token,
]);
}
/**
* User Profile (Current Authenticated User)
*/
public function me(Request $request)
{
return $this->successRes(200, 'Profile retrieved successfully.', $request->user());
}
/**
* User Logout (Revoke Token)
*/
public function logout(Request $request)
{
$request->user()->currentAccessToken()->delete();
return $this->successRes(200, 'User logged out successfully.');
}
}
Standard JSON Response Payload
Predictable response schema for frontend frameworks (React, Inertia, Vue, Mobile apps).
{
"success": true,
"statusCode": 200,
"message": "Login successful.",
"data": {
"user": {
"id": 1,
"name": "Shivanshu Kamboj",
"email": "user@example.com"
},
"token": "1|ql34oYkK8Vq..."
}
}
{
"success": false,
"statusCode": 401,
"message": "Invalid credentials provided.",
"data": null
}
Need a Custom Laravel API Architecture?
Experienced with OAuth, Sanctum, JWT, Webhooks, Stripe Connect & High-Throughput Microservices. Available for senior backend roles & consulting.