Skip to content

Installation

Requirements

  • PHP ^8.2
  • An OpenAPI 3.0.x spec (YAML or JSON)
  • Laravel, Slim, or Mezzio

5-step integration

Step 1 — Install

Terminal window
composer require fissible/accord

Step 2 — Get a spec

Scaffold one from your existing routes using forge:

Terminal window
php artisan accord:generate

Or drop an existing spec at resources/openapi/v1.yaml.

Step 3 — Register the middleware

Laravel 11+ (using bootstrap/app.php):

->withMiddleware(function (Middleware $middleware) {
$middleware->appendToGroup('api', [
\Fissible\Accord\Drivers\Laravel\Middleware\ValidateApiContract::class,
]);
})

Scoped route group:

Route::middleware([
'api',
\Fissible\Accord\Drivers\Laravel\Middleware\ValidateApiContract::class,
])->group(function () {
// your API routes
});

Step 4 — Set failure mode for adoption

Start with log mode so violations appear in your logs without breaking requests:

ACCORD_FAILURE_MODE=log

Once your spec covers all your routes, switch to exception:

ACCORD_FAILURE_MODE=exception

Step 5 — Add drift detection to CI

Terminal window
composer require --dev fissible/drift

In your GitHub Actions workflow:

- name: Check API contract (drift)
run: php artisan accord:validate
- name: Check implementation coverage
run: php artisan drift:coverage

Publish config

Terminal window
php artisan vendor:publish --tag=accord-config

This creates config/accord.php with all available options. See the Reference page for the full config reference.


Slim driver

$app->add(new \Fissible\Accord\Drivers\Slim\ValidateApiContract($specSource));

Mezzio driver

$pipeline->pipe(\Fissible\Accord\Drivers\Mezzio\ValidateApiContract::class);