PHP Composer Repository HTTP Routes (V2)
All paths are relative to https://<host>/repositories/<storage>/<repository>.
Discovery
GET /packages.json
Returns{ "metadata-url": "/repositories/<storage>/<repository>/p2/%package%.json", "packages": {} }. Used by Composer to locate per-package metadata.
Package metadata (p2)
GET /p2/<vendor>/<package>.json
Returns Composer V2 metadata with dist URLs rewritten to Nitro Repo.GET /p2/<vendor>/<package>~dev.json
Dev metadata when dev versions exist.HEADsupported for cache validation.404when package is unknown.
Dist artifacts
GET /dist/<vendor>/<package>/<version>.zip
Streams hosted artifact (or cached proxy when proxy is added).HEAD /dist/<vendor>/<package>/<version>.zipfor size/etag checks.
Upload (hosted)
PUT /dist/<vendor>/<package>/<version>.zip
Body: ZIP containingcomposer.json. Auth:Writepermission required.
Nitro Repo validates name/version against path, computes checksums, updates/p2/...metadata, and indexes the version.POSTallowed as alias forPUT.
Auth
- Basic or bearer token; enforced on writes. Reads follow repository visibility/auth settings.
Status codes
201 Createdon successful upload.400 Bad Requeston invalid path or composer.json mismatch.401 Unauthorizedwhen auth required.404 Not Foundfor missing metadata or dist.
Notes
- Composer V2 format only; no legacy providers or monolithic packages.json.
- Dist URLs in metadata always point back to Nitro, enabling offline/cache control.