Appearance
List projects with pagination, search, and sorting
GET
/api/projects
Paginated project listing for SPA consumption. Supports substring search over name and description, whitelist-validated sorting, and pagy-backed pagination (default 25 per page, maximum 100). Unknown sort fields are silently ignored. Requires authentication. Returns 400 when the requested page is out of range. Timestamps on this endpoint are ISO 8601 (render_as_json path), unlike the string-rendered project pages.
Authorizations
cookieAuth
Type
API Key (cookie: _vulcan_session)
or
tokenAuth
Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.
Type
HTTP (token)
Parameters
Query Parameters
q
Case-insensitive substring filter matched against project name and description.
Type
string
Example
"Photon"sort
Sort field. Unknown fields are silently ignored.
Type
string
Valid values
"name""created_at""updated_at"Example
"name"order
Sort direction. Defaults to asc when sort is applied.
Type
string
Valid values
"asc""desc"Example
"asc"page
Page number (1-based). Out-of-range pages return 400.
Type
integer
Example
1per_page
Records per page (default 25, capped at 100).
Type
integer
Example
25Responses
Paginated project rows
application/json
JSON "rows": [ { "id": 34, "name": "Photon 3", "description": null, "visibility": "discoverable", "memberships_count": 2, "admin_name": "Demo Admin", "admin_email": "admin@example.org", "created_at": "2026-05-30T14:06:03.797Z", "updated_at": "2026-05-30T14:06:28.292Z" } ], "pagination": { "page": 1, "per_page": 25, "total": 1 }
{
}