Profile resources (public)
These endpoints redirect to temporary S3 signed URLs:
Profile image
GET /api/resources/profile-image/{id}
Auth: None — redirects to 5-minute signed S3 URL.
Profile video
GET /api/resources/profile-video/{id}
Auth: None — redirects to 5-day signed S3 URL.
Videos get a much longer signed URL expiry (5 days vs 5 minutes) due to streaming requirements.
Protected resources
DBS document image
GET /api/resources/dbs-image/{id}
Auth: auth:api — redirects to 5-minute signed S3 URL.
Qualification document image
GET /api/resources/qualification-image/{id}
Auth: auth:api — redirects to 5-minute signed S3 URL.
Mobile app assets
GET /api/resources/mobile/...
Auth: None — serves static mobile app assets.
File management (v1)
GET /api/v1/files
POST /api/v1/files
GET /api/v1/files/{id}
PUT /api/v1/files/{id}
DELETE /api/v1/files/{id}
Auth: Mixed (some public, some require auth:api)
Files use UUID primary keys (not auto-increment integers). Stored in S3 via FileService.
Current API files
GET /api/files
POST /api/files
GET /api/files/{id}
PUT /api/files/{id}
DELETE /api/files/{id}
Auth: Mixed
Service notifications
GET /api/service-notifications
Auth: None (public)
Returns active service notifications (maintenance notices, etc.).
Address search
GET /api/addresses/search
GET /api/v1/addresses/search-postcode
Auth: None (public)
Searches UK postcodes via Google Maps API and returns matching addresses. Uses AddressService::searchPostCode() → GoogleMapsAPI::getGeoCodeResults() + getReverseGeoCodeResults().