The three HTTP surfaces
A Laraplate application answers on three prefixes. Each one has its own audience and its own way of signing in.
/admin
The backoffice, built with Filament. Superadmins manage users, roles, settings and the resources every module adds. Each module registers its own pages and navigation group.
/app
The session API for your own frontend. It uses the web guard, so a browser signs in with a session cookie, and Sanctum's stateful support lets a single page application on a trusted domain do the same. It carries the CRUD routes (/app/crud/...) and authentication (/app/auth/...).
Some operations exist only here and are never available on /api/v1: activate and inactivate, approve and disapprove, lock and unlock.
/api/v1
The optional public headless API. It uses the api guard and is switched off by default.
- The master switch is
expose_api. Its default isfalseinModules/Core/config/config.php, and a runtime setting of the same name (Filament, Settings) overrides it. While it is off, every/apiroute answers403. The switch covers Core and every module. - A request without a token runs as the anonymous user, which can read only what the
guestrole of theapiguard is allowed to read. - A request with a bearer token (Sanctum personal access token) runs as that user. A token that is unknown, malformed, expired or revoked is refused with
401; it never falls back to the anonymous user. A superadmin's token also gets401. - Requests are limited to 600 a minute per token, or per client address when there is no token.
Which one to use
| You are building | Use |
|---|---|
| Staff tools and configuration | /admin |
| A custom frontend for signed-in users | /app |
| Integrations, machines, or public read access | /api/v1, after turning expose_api on |