Skip to content

oooiik/laravel-export-postman

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Laravel Export to Postman

Latest Version on Packagist Total Downloads PHP Version License

Generate a Postman Collection v2.1 from your Laravel API routes — with a single Artisan command.

Annotate your controllers with simple PHPDoc tags to control authentication, headers, descriptions, and even Postman pre-request and test scripts. The output is a ready-to-import JSON collection — no manual route copying, no drift between code and docs.

Features

  • 🚀 One-command exportphp artisan postman:export and you're done
  • 🔐 Auth support — Bearer tokens, no-auth, parent-inherited, per-endpoint
  • 📝 Rich annotations — descriptions, headers, scripts via standard PHPDoc
  • 📂 External file sources — load descriptions and scripts from base_path() or resource_path()
  • Pre-request & test scripts — inject Postman JavaScript directly from your code
  • 🎯 Folder grouping — collections organized by route prefix
  • 🧩 Laravel 6 → 12 — broad compatibility, PHP 7.1+ through 8.x

Requirements

  • PHP 7.1 or higher
  • Laravel 6.x — 12.x

Installation

composer require oooiik/laravel-export-postman

Publish the config (optional):

php artisan vendor:publish --provider="Oooiik\LaravelExportPostman\ExportPostmanServiceProvider"

Quick Start

Export your routes to a Postman collection:

php artisan postman:export

The collection file will be created in your configured storage path. Import it into Postman → File → Import.

Configuration

Edit config/export-postman.php after publishing:

return [
    'name'        => env('APP_NAME', 'Laravel API'),
    'output_path' => storage_path('app/postman'),
    'base_url'    => env('APP_URL', 'http://localhost'),
    // ... and more
];

Annotation Reference

Add PHPDoc annotations to your controller methods or closures to enrich the generated collection.

Authentication

Annotation Description
@AuthNo No authentication for this endpoint
@AuthParent Inherit authentication from the parent folder
@AuthBearer [token] Use a Bearer token (literal value or Postman variable)
/**
 * @AuthBearer {{access_token}}
 */
public function show($id) { /* ... */ }

Headers

Use @Header key => value for custom request headers. Multiple @Header annotations are supported.

/**
 * @Header Accept => application/json
 * @Header X-Tenant-Id => {{tenant_id}}
 */
public function index() { /* ... */ }

Descriptions

Three flavors — inline, file from base_path(), file from resource_path(). They can be combined.

Annotation Source
@DescriptionContext [text] Inline markdown text
@DescriptionBasePath [path] File path relative to base_path()
@DescriptionResourcePath [path] File path relative to resource_path()
/**
 * @DescriptionContext Returns a paginated list of orders for the authenticated user.
 * @DescriptionResourcePath docs/api/orders-index.md
 */
public function index() { /* ... */ }

Pre-request Scripts

Inject Postman JavaScript that runs before the request is sent. Useful for token refresh, signature generation, or dynamic variables.

Annotation Source
@PreRequestScriptContext [js] Inline JavaScript
@PreRequestScriptFileBasePath [path] JS file relative to base_path()
@PreRequestScriptFileResourcePath [path] JS file relative to resource_path()
/**
 * @PreRequestScriptFileResourcePath postman/scripts/refresh-token.js
 */
public function transfer() { /* ... */ }

Test Scripts

Inject Postman JavaScript that runs after the response is received. Use for assertions or extracting values into environment variables.

Annotation Source
@TestScriptContext [js] Inline JavaScript
@TestScriptFileBasePath [path] JS file relative to base_path()
@TestScriptFileResourcePath [path] JS file relative to resource_path()
/**
 * @TestScriptContext pm.test("Status 200", () => pm.response.to.have.status(200));
 */
public function login() { /* ... */ }

Full Example

/**
 * @AuthBearer {{access_token}}
 * @Header Accept => application/json
 * @Header X-Tenant-Id => {{tenant_id}}
 * @DescriptionContext Creates a new order for the authenticated user.
 * @DescriptionResourcePath docs/api/orders-create.md
 * @PreRequestScriptFileResourcePath postman/scripts/sign-request.js
 * @TestScriptContext pm.test("Created", () => pm.response.to.have.status(201));
 */
public function store(StoreOrderRequest $request)
{
    // ...
}

Compatibility Matrix

Laravel PHP Status
12.x 8.2+ ✅ Supported
11.x 8.2+ ✅ Supported
10.x 8.1+ ✅ Supported
9.x 8.0+ ✅ Supported
8.x 7.3+ ✅ Supported
7.x 7.2.5+ ✅ Supported
6.x 7.2+ ✅ Supported

Contributing

Pull requests are welcome. For larger changes, please open an issue first to discuss the direction.

Feature ideas, bug reports, and questions → GitHub Issues.

Credits

License

The MIT License (MIT). See LICENSE for details.

About

Automatically generate a Postman collection based on your API routes.

Resources

License

Stars

0 stars

Watchers

1 watching

Forks

Packages

 
 
 

Contributors