Projects Service API (1.0.0)

Download OpenAPI specification:

Microservice for managing user projects with collaborative filesystem structure

System

System health and status

Health check

Responses

Response samples

Content type
application/json
{
  • "status": "ok"
}

Projects

Project management endpoints

List projects

List all projects accessible to the authenticated user (owned + shared)

Authorizations:
BearerAuth
query Parameters
filter
string
Value: "owned"
Example: filter=owned

Filter projects by ownership

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a new project

Authorizations:
BearerAuth
Request Body schema: application/json
required
name
required
string [ 1 .. 255 ] characters

Responses

Request samples

Content type
application/json
{
  • "name": "My LaTeX Project"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "owner_id": "string",
  • "name": "string",
  • "created_at": "2019-08-24T14:15:22Z"
}

Get project details

Authorizations:
BearerAuth
path Parameters
projectID
required
string <uuid>
Example: 550e8400-e29b-41d4-a716-446655440000

Responses

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "owner_id": "string",
  • "name": "string",
  • "created_at": "2019-08-24T14:15:22Z"
}

Update project

Update project name (write permission required)

Authorizations:
BearerAuth
path Parameters
projectID
required
string <uuid>
Request Body schema: application/json
required
name
required
string [ 1 .. 255 ] characters

Responses

Request samples

Content type
application/json
{
  • "name": "Updated Project Name"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "owner_id": "string",
  • "name": "string",
  • "created_at": "2019-08-24T14:15:22Z"
}

Delete project

Delete a project (owner only)

Authorizations:
BearerAuth
path Parameters
projectID
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "error": "string"
}

Get project tree

Get the complete nested filesystem structure of a project with presigned download URLs

Authorizations:
BearerAuth
path Parameters
projectID
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
  • "tree": [
    ]
}

Directories

Directory structure within projects

Create directory

Authorizations:
BearerAuth
path Parameters
projectID
required
string <uuid>
Request Body schema: application/json
required
name
required
string [ 1 .. 255 ] characters
parent_id
string or null <uuid>

Parent directory UUID; null for root-level directory

Responses

Request samples

Content type
application/json
{
  • "name": "src",
  • "parent_id": "1c6ca187-e61f-4301-8dcb-0e9749e89eef"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
  • "parent_id": "1c6ca187-e61f-4301-8dcb-0e9749e89eef",
  • "name": "string"
}

Update directory

Update directory name (write permission required)

Authorizations:
BearerAuth
path Parameters
projectID
required
string <uuid>
dirID
required
string <uuid>
Request Body schema: application/json
required
name
required
string [ 1 .. 255 ] characters

Responses

Request samples

Content type
application/json
{
  • "name": "string"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
  • "parent_id": "1c6ca187-e61f-4301-8dcb-0e9749e89eef",
  • "name": "string"
}

Delete directory

Delete a directory (write permission required)

Authorizations:
BearerAuth
path Parameters
projectID
required
string <uuid>
dirID
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "error": "string"
}

Files

File management and storage

Create file

Create a new file and get presigned upload URL

Authorizations:
BearerAuth
path Parameters
projectID
required
string <uuid>
Request Body schema: application/json
required
filename
required
string [ 1 .. 255 ] characters
directory_id
required
string <uuid>

UUID of the target directory

file_type
string
Default: "other"
Enum: "image" "tex" "pdf" "other"

File type classification

Responses

Request samples

Content type
application/json
{
  • "filename": "document.tex",
  • "directory_id": "dca58562-24cf-4cbc-aa50-5a4039358aa5",
  • "file_type": "image"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "directory_id": "dca58562-24cf-4cbc-aa50-5a4039358aa5",
  • "project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
  • "filename": "string",
  • "storage_key": "string",
  • "file_type": "image",
  • "download_url": "http://example.com"
}

Get file metadata

Authorizations:
BearerAuth
path Parameters
projectID
required
string <uuid>
fileID
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "directory_id": "dca58562-24cf-4cbc-aa50-5a4039358aa5",
  • "project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
  • "filename": "string",
  • "storage_key": "string",
  • "file_type": "image",
  • "download_url": "http://example.com"
}

Update file

Update file metadata (e.g., filename)

Authorizations:
BearerAuth
path Parameters
projectID
required
string <uuid>
fileID
required
string <uuid>
Request Body schema: application/json
required
filename
required
string [ 1 .. 255 ] characters

Responses

Request samples

Content type
application/json
{
  • "filename": "string"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "directory_id": "dca58562-24cf-4cbc-aa50-5a4039358aa5",
  • "project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
  • "filename": "string",
  • "storage_key": "string",
  • "file_type": "image",
  • "download_url": "http://example.com"
}

Delete file

Authorizations:
BearerAuth
path Parameters
projectID
required
string <uuid>
fileID
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "error": "string"
}

Get upload URL

Get presigned URL for direct file upload to storage

Authorizations:
BearerAuth
path Parameters
projectID
required
string <uuid>
fileID
required
string <uuid>

Responses

Response samples

Content type
application/json
{}

Collaborators

Project collaboration and sharing

List project collaborators

List all collaborators on a project

Authorizations:
BearerAuth
path Parameters
projectID
required
string <uuid>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create collaboration invite

Invite a user to collaborate on a project

Authorizations:
BearerAuth
path Parameters
projectID
required
string <uuid>
Request Body schema: application/json
required
user_id
required
string

User ID of the invitee

role
required
string
Enum: "editor" "viewer"

Collaboration role

Responses

Request samples

Content type
application/json
{
  • "user_id": "string",
  • "role": "editor"
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
  • "user_id": "string",
  • "role": "editor",
  • "invited_by": "string",
  • "invited_at": "2019-08-24T14:15:22Z",
  • "status": "pending"
}

Accept collaboration invite

Accept a pending collaboration invite

Authorizations:
BearerAuth
Request Body schema: application/json
required
invite_id
required
string <uuid>

Responses

Request samples

Content type
application/json
{
  • "invite_id": "7218104b-c64c-4f30-a184-1a1802b5c56b"
}

Response samples

Content type
application/json
{
  • "user_id": "string",
  • "project_id": "405d8375-3514-403b-8c43-83ae74cfe0e9",
  • "role": "editor",
  • "invited_by": "string",
  • "invited_at": "2019-08-24T14:15:22Z"
}

Remove collaborator

Remove a user from a project

Authorizations:
BearerAuth
path Parameters
projectID
required
string <uuid>
userID
required
string

User ID of the collaborator to remove

Responses

Response samples

Content type
application/json
{
  • "error": "string"
}
ß