API Surface

All endpoints are under /api/v1. Interactive OpenAPI docs are served at http://<backend>/docs (Swagger UI) and http://<backend>/redoc.

Routers

RouterResponsibility
authLogin (local + Entra), token refresh, callback
tokensPersonal access token (PAT) create / list / revoke
bucketsBucket CRUD, listing / browsing, quotas
objectsObject listing, deletion, copy / move, bulk copy / move, presigned download
uploadMultipart init / complete, simple upload
imagesAuthenticated image proxy with optional on-the-fly transforms
share + publicExpiring / revocable tokenized public links + unauthenticated serving at /public/s/{token}
policiesCleanup policy CRUD and manual runs
webhooksWebhook endpoint CRUD, delivery log, and test delivery (admin)
users / groupsUser and group management, permission assignment, Entra import
settingsRuntime settings (auth toggles, auto-provisioning, quotas)
auditAudit-log queries (filtering + pagination)

Common endpoints

The tables below list the endpoints referenced throughout these docs. Consult the live OpenAPI schema at http://<backend>/docs for request/response models and the complete surface.

Auth & tokens

MethodPathNotes
POST/api/v1/auth/tokenLocal login (form: username, password)
GET/api/v1/auth/loginReturns the Entra auth_url
GET/api/v1/auth/callbackOIDC redirect target
POST/api/v1/auth/refreshExchange a refresh token
POST / GET / DELETE/api/v1/tokens · /api/v1/tokens/{id}Create / list / revoke PATs

Buckets & objects

MethodPathNotes
POST / DELETE/api/v1/buckets · /api/v1/buckets/{name}Create (optional quota_gb) / delete
GET/api/v1/buckets/{name}/browse?prefix=Browse contents
POST/api/v1/buckets/{name}/objects?prefix=Simple upload (multipart/form-data)
POST/api/v1/buckets/{name}/upload/init · /upload/completeMultipart lifecycle
POST/api/v1/buckets/{dest}/objects/copy · /moveSingle copy / move
POST/api/v1/buckets/{dest}/objects/bulk-copy · /bulk-moveBulk copy / move

Images, share & public

MethodPathAuthNotes
GET/api/v1/images/{bucket}/{key}JWTProxy + transforms (w,h,format,q,fit)
POST/api/v1/share/{bucket}/{key}JWTMint a share token (expires_in)
GET/api/v1/share · DELETE /api/v1/share/{id}JWTList / revoke links
GET/api/v1/public/s/{token}noneServe object; expired/revoked → 410

Policies, webhooks, users & audit

MethodPathNotes
POST/api/v1/policies · /api/v1/policies/{id}/runCreate policy / manual run
POST/api/v1/webhooks · GET /api/v1/webhooks/{id}/deliveriesRegister endpoint / inspect deliveries
GET / POST/api/v1/users/entra/search?q= · /api/v1/users/entra/importEntra search / import
GET/api/v1/audit?action=&bucket=&page=&page_size=Audit query (admin)

Authentication

Every authenticated endpoint accepts a Bearer credential — either a JWT from login or a Personal Access Token:

curl http://localhost:8200/api/v1/buckets \
  -H "Authorization: Bearer $TOKEN"

Related: Architecture · Authentication