Skip to main content

Installation and Configuration

This guide provides detailed instructions from installing Laravel Spectrum to initial configuration.

📋 Requirements

  • PHP 8.1 or higher
  • Laravel 10.x, 11.x, 12.x
  • Composer 2.0 or higher

🚀 Installation

Laravel 11 Setup

For Laravel 11, you need to install API routes first if they're not already present:

php artisan install:api

This command:

  • Installs Laravel Sanctum
  • Creates the routes/api.php file
  • Configures API authentication

Install via Composer

composer require wadakatu/laravel-spectrum --dev

Laravel Auto-Discovery

For Laravel 5.5 and above, the service provider is automatically registered.

⚙️ Publishing Configuration

To customize the default configuration, publish the config file:

php artisan vendor:publish --provider="LaravelSpectrum\SpectrumServiceProvider" --tag="config"

This creates a config/spectrum.php file.

🔧 Basic Configuration

API Basic Information

// config/spectrum.php
return [
'title' => env('APP_NAME', 'Laravel') . ' API',
'version' => '1.0.0',
'description' => 'API documentation generated by Laravel Spectrum',
];

Route Patterns

Specify route patterns to include in documentation:

'route_patterns' => [
'api/*',
'api/v1/*',
'api/v2/*',
],

Excluded Routes

To exclude specific routes from documentation:

'excluded_routes' => [
'api/health',
'api/ping',
'_debugbar/*',
],

🔐 Authentication Configuration

Bearer Token (JWT/Sanctum)

'authentication' => [
'default' => 'bearer',
'flows' => [
'bearer' => [
'type' => 'http',
'scheme' => 'bearer',
'bearerFormat' => 'JWT',
],
],
],

API Key Authentication

'authentication' => [
'default' => 'api_key',
'flows' => [
'api_key' => [
'type' => 'apiKey',
'in' => 'header',
'name' => 'X-API-Key',
],
],
],

🎨 Customization

Tag Configuration

Tag mapping for organizing endpoints:

'tags' => [
'api/v1/auth/*' => 'Authentication',
'api/v1/users/*' => 'User Management',
'api/v1/posts/*' => 'Blog Posts',
'api/v1/admin/*' => 'Administration',
],

Customizing Response Examples

'example_generation' => [
'use_faker' => true,
'faker_locale' => 'en_US',
'faker_seed' => 12345, // Generate consistent example data
'custom_generators' => [
'status' => fn($faker) => $faker->randomElement(['active', 'inactive']),
'role' => fn($faker) => $faker->randomElement(['admin', 'user']),
],
],

📁 Output Configuration

Changing Output Location

'output' => [
'openapi' => storage_path('app/public/api-docs/openapi.json'),
'postman' => storage_path('app/public/api-docs/postman.json'),
'insomnia' => storage_path('app/public/api-docs/insomnia.json'),
],

Cache Configuration

For performance improvement in large projects:

'cache' => [
'enabled' => true,
'ttl' => 3600, // 1 hour
'directory' => storage_path('app/spectrum/cache'),
],

⚠️ Important Notes

Controller-Based Routes Only

Laravel Spectrum only supports controller-based routes. Closure routes are not supported:

// ❌ NOT SUPPORTED - Closure route
Route::get('/api/test', function () {
return ['message' => 'test'];
});

// ✅ SUPPORTED - Controller route
Route::get('/api/test', [TestController::class, 'index']);

To convert closure routes to controller routes:

  1. Create a controller: php artisan make:controller Api/TestController
  2. Move the closure logic to the controller method
  3. Update the route to use the controller

Configuration File

If the configuration file is not published automatically, copy it manually:

cp vendor/wadakatu/laravel-spectrum/config/spectrum.php config/spectrum.php

Route Pattern Matching

Use wildcards correctly in route patterns:

'route_patterns' => [
'api/*', // Matches api/users, api/posts
'api/**', // For nested paths (may not work with all versions)
'api/v1/*', // Matches api/v1/users, api/v1/posts
],

🚨 Troubleshooting

Permission Errors

Check write permissions for storage directories:

chmod -R 775 storage
chmod -R 775 bootstrap/cache

Routes Not Detected

  1. Clear route cache:

    php artisan route:clear
  2. Verify route patterns are correct:

    // config/spectrum.php
    'route_patterns' => [
    'api/*', // All API routes
    ],

📚 Next Steps