PVPipe Workspace API (1.0)

Download OpenAPI specification:

Vietnamese enterprise document management system with library, departments, and employees

Departments

List all departments

Responses

Response samples

Content type
application/json
{ }

Create department

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required

Department details

children
Array of objects (github_com_yourusername_go-fiber-gorm-app_internal_models.Department)
createdAt
string
deletedAt
string
Array of objects (github_com_yourusername_go-fiber-gorm-app_internal_models.DepartmentRole)
description
string
Array of objects (github_com_yourusername_go-fiber-gorm-app_internal_models.Employee)
id
string
object (github_com_yourusername_go-fiber-gorm-app_internal_models.Employee)
managerId
string
name
string
note
string
parent
object (github_com_yourusername_go-fiber-gorm-app_internal_models.Department) Recursive
parentId
string
slug
string
updatedAt
string

Responses

Request samples

Content type
application/json
{
  • "children": [
    ],
  • "createdAt": "string",
  • "deletedAt": "string",
  • "departmentRoles": [
    ],
  • "description": "string",
  • "employees": [
    ],
  • "id": "string",
  • "manager": {
    },
  • "managerId": "string",
  • "name": "string",
  • "note": "string",
  • "parent": { },
  • "parentId": "string",
  • "slug": "string",
  • "updatedAt": "string"
}

Response samples

Content type
application/json
{ }

Get department by ID

path Parameters
id
required
string

Department ID

Responses

Response samples

Content type
application/json
{ }

Update department

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Department ID

Request Body schema: application/json
required

Department details

children
Array of objects (github_com_yourusername_go-fiber-gorm-app_internal_models.Department)
createdAt
string
deletedAt
string
Array of objects (github_com_yourusername_go-fiber-gorm-app_internal_models.DepartmentRole)
description
string
Array of objects (github_com_yourusername_go-fiber-gorm-app_internal_models.Employee)
id
string
object (github_com_yourusername_go-fiber-gorm-app_internal_models.Employee)
managerId
string
name
string
note
string
parent
object (github_com_yourusername_go-fiber-gorm-app_internal_models.Department) Recursive
parentId
string
slug
string
updatedAt
string

Responses

Request samples

Content type
application/json
{
  • "children": [
    ],
  • "createdAt": "string",
  • "deletedAt": "string",
  • "departmentRoles": [
    ],
  • "description": "string",
  • "employees": [
    ],
  • "id": "string",
  • "manager": {
    },
  • "managerId": "string",
  • "name": "string",
  • "note": "string",
  • "parent": { },
  • "parentId": "string",
  • "slug": "string",
  • "updatedAt": "string"
}

Response samples

Content type
application/json
{ }

Delete department

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Department ID

Responses

Response samples

Content type
application/json
{ }

Employees

List all employees

Responses

Response samples

Content type
application/json
{ }

Create employee

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required

Employee details

address
string
avatarFileId
string
code
string
contractDate
string
contractType
string
createdAt
string
deletedAt
string
object (github_com_yourusername_go-fiber-gorm-app_internal_models.Department)
departmentId
string
directManager
object (github_com_yourusername_go-fiber-gorm-app_internal_models.Employee) Recursive
directManagerId
string
email
string
gender
string (github_com_yourusername_go-fiber-gorm-app_internal_models.Gender)
Enum: "male" "female"
id
string
idCard
string
isClerical
boolean
managedEmployees
Array of objects (github_com_yourusername_go-fiber-gorm-app_internal_models.Employee)
name
string
phoneNumber
string
object (github_com_yourusername_go-fiber-gorm-app_internal_models.DepartmentRole)
roleId
integer
signature
string
status
string (github_com_yourusername_go-fiber-gorm-app_internal_models.EmployeeStatus)
Enum: "active" "maternity_leave" "terminated"
updatedAt
string
userId
integer

Responses

Request samples

Content type
application/json
{
  • "address": "string",
  • "avatarFileId": "string",
  • "code": "string",
  • "contractDate": "string",
  • "contractType": "string",
  • "createdAt": "string",
  • "deletedAt": "string",
  • "department": {
    },
  • "departmentId": "string",
  • "directManager": { },
  • "directManagerId": "string",
  • "email": "string",
  • "gender": "male",
  • "id": "string",
  • "idCard": "string",
  • "isClerical": true,
  • "managedEmployees": [
    ],
  • "name": "string",
  • "phoneNumber": "string",
  • "role": {
    },
  • "roleId": 0,
  • "signature": "string",
  • "status": "active",
  • "updatedAt": "string",
  • "userId": 0
}

Response samples

Content type
application/json
{ }

Get employee by ID

path Parameters
id
required
string

Employee ID

Responses

Response samples

Content type
application/json
{ }

Update employee

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Employee ID

Request Body schema: application/json
required

Employee details

address
string
avatarFileId
string
code
string
contractDate
string
contractType
string
createdAt
string
deletedAt
string
object (github_com_yourusername_go-fiber-gorm-app_internal_models.Department)
departmentId
string
directManager
object (github_com_yourusername_go-fiber-gorm-app_internal_models.Employee) Recursive
directManagerId
string
email
string
gender
string (github_com_yourusername_go-fiber-gorm-app_internal_models.Gender)
Enum: "male" "female"
id
string
idCard
string
isClerical
boolean
managedEmployees
Array of objects (github_com_yourusername_go-fiber-gorm-app_internal_models.Employee)
name
string
phoneNumber
string
object (github_com_yourusername_go-fiber-gorm-app_internal_models.DepartmentRole)
roleId
integer
signature
string
status
string (github_com_yourusername_go-fiber-gorm-app_internal_models.EmployeeStatus)
Enum: "active" "maternity_leave" "terminated"
updatedAt
string
userId
integer

Responses

Request samples

Content type
application/json
{
  • "address": "string",
  • "avatarFileId": "string",
  • "code": "string",
  • "contractDate": "string",
  • "contractType": "string",
  • "createdAt": "string",
  • "deletedAt": "string",
  • "department": {
    },
  • "departmentId": "string",
  • "directManager": { },
  • "directManagerId": "string",
  • "email": "string",
  • "gender": "male",
  • "id": "string",
  • "idCard": "string",
  • "isClerical": true,
  • "managedEmployees": [
    ],
  • "name": "string",
  • "phoneNumber": "string",
  • "role": {
    },
  • "roleId": 0,
  • "signature": "string",
  • "status": "active",
  • "updatedAt": "string",
  • "userId": 0
}

Response samples

Content type
application/json
{ }

Delete employee

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Employee ID

Responses

Response samples

Content type
application/json
{ }

Library

List root-level library items (folders first, then files)

Returns paginated list with smart folder-first pagination. Uses DB-level pagination for efficiency.

Authorizations:
ApiKeyAuth
query Parameters
page
integer
Default: 1

Page number

limit
integer
Default: 10

Items per page

search
string

Search term (matches folder name or file name)

folderOnly
boolean

If true, only return folders (no files)

Responses

Response samples

Content type
application/json
{ }

Get folder breadcrumbs

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Folder ID

Responses

Response samples

Content type
application/json
{ }

Download file

Authorizations:
ApiKeyAuth
path Parameters
fileId
required
string

File ID

Responses

Create file shortcut

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required

Shortcut details

fileId
string
folderId
string

Responses

Request samples

Content type
application/json
{
  • "fileId": "string",
  • "folderId": "string"
}

Response samples

Content type
application/json
{ }

Get folder tree path

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Folder ID

Responses

Response samples

Content type
application/json
{ }

Link file to library folder

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required

File link input

displayName
string
fileId
string
folderId
string

Responses

Request samples

Content type
application/json
{
  • "displayName": "string",
  • "fileId": "string",
  • "folderId": "string"
}

Response samples

Content type
application/json
{ }

Get pre-signed view URL

Authorizations:
ApiKeyAuth
path Parameters
fileId
required
string

File ID

Responses

Response samples

Content type
application/json
{ }

Get folder contents (folders first, then files)

Returns paginated list with smart folder-first pagination. Supports recursive search through subfolders.

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Folder ID

query Parameters
page
integer
Default: 1

Page number

limit
integer
Default: 10

Items per page

search
string

Search term (matches folder name or file name)

recursive
boolean

If true, search recursively through all subfolders

folderOnly
boolean

If true, only return folders (no files)

Responses

Response samples

Content type
application/json
{ }

Access Control

Check access for multiple items

Batch checks if the user has required access level to multiple items

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required

Items to check access for

Array of objects

Responses

Request samples

Content type
application/json
{
  • "items": [
    ]
}

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Grant access to item

Grants user, department, or company-wide access to a folder, file, or document

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required

Access grant details

expiresAt
string
grantReason
string
itemId
string
itemType
string
permissionLevel
string
subjectId
string
subjectType
string

Responses

Request samples

Content type
application/json
{
  • "expiresAt": "string",
  • "grantReason": "string",
  • "itemId": "string",
  • "itemType": "string",
  • "permissionLevel": "string",
  • "subjectId": "string",
  • "subjectType": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

List item access grants

Lists all access grants for a specific folder, file, or document

Authorizations:
ApiKeyAuth
path Parameters
itemType
required
string

Item type (folder, file, document)

itemId
required
string

Item ID

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Revoke access to item

Revokes a previously granted access permission (cannot revoke owner access)

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required

Access grant ID to revoke

accessId
string

Responses

Request samples

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

Response samples

Content type
application/json
{
  • "data": {
    }
}

List items shared by me

Lists all items that the authenticated user has shared with others

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

List items shared with me

Lists all items that have been explicitly shared with the authenticated user

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

List user accessible items

Lists all items the authenticated user can access, optionally filtered by workspace

Authorizations:
ApiKeyAuth
query Parameters
workspaceId
string

Filter by workspace ID

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Activity Logs

Export activity logs

Exports activity logs in CSV or JSON format for offline analysis

Authorizations:
ApiKeyAuth
query Parameters
format
string

Export format (csv or json, default json)

actorId
integer

Filter by actor user ID

actorEmployeeId
string

Filter by actor employee ID

entityType
string

Filter by entity type

entityId
string

Filter by entity ID

workspaceId
string

Filter by workspace ID

action
string

Filter by action type

startDate
string

Filter by start date (RFC3339 format)

endDate
string

Filter by end date (RFC3339 format)

Responses

Response samples

Content type
No sample

Get activity logs

Retrieves filtered and paginated activity logs for audit and compliance

Authorizations:
ApiKeyAuth
query Parameters
page
integer

Page number (default 1)

pageSize
integer

Items per page (default 20)

actorId
integer

Filter by actor user ID

actorEmployeeId
string

Filter by actor employee ID

entityType
string

Filter by entity type

entityId
string

Filter by entity ID

workspaceId
string

Filter by workspace ID

action
string

Filter by action type

startDate
string

Filter by start date (RFC3339 format)

endDate
string

Filter by end date (RFC3339 format)

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get recent items

Retrieves recently accessed items for the authenticated user, with optional filters

Authorizations:
ApiKeyAuth
query Parameters
itemType
string

Filter by item type (folder, file, document)

workspaceId
string

Filter by workspace ID

limit
integer

Number of items to return (max 100, default 20)

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Permission Requests

Bulk approve permission requests

Approves multiple pending permission requests in a single transaction (requires owner or admin rights)

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required

List of request IDs and optional permission level

grantedPermissionLevel
string
requestIds
Array of strings

Responses

Request samples

Content type
application/json
{
  • "grantedPermissionLevel": "string",
  • "requestIds": [
    ]
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get permission request history

Retrieves all permission requests (approved, denied, cancelled) for a specific item

Authorizations:
ApiKeyAuth
path Parameters
itemType
required
string

Item type (folder, file, document)

itemId
required
string

Item ID

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

List my permission requests

Lists all permission requests created by the authenticated user

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

List pending requests for workspace

Lists all pending permission requests for items in a specific workspace

Authorizations:
ApiKeyAuth
query Parameters
workspaceId
required
string

Workspace ID to filter requests

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Create permission request

Creates a request for access to a folder, file, or document in a workspace

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required

Permission request details

itemId
string
itemType
string
reason
string
requestedPermissionLevel
string
workspaceId
string

Responses

Request samples

Content type
application/json
{
  • "itemId": "string",
  • "itemType": "string",
  • "reason": "string",
  • "requestedPermissionLevel": "string",
  • "workspaceId": "string"
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get permission request details

Retrieves detailed information about a specific permission request

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Permission request ID

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Approve permission request

Approves a pending permission request and grants access (requires owner or admin rights)

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Permission request ID

Request Body schema: application/json

Override permission level (optional, defaults to requested level)

grantedPermissionLevel
string

Responses

Request samples

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

Response samples

Content type
application/json
{
  • "data": {
    }
}

Cancel permission request

Allows the requester to cancel their own pending permission request

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Permission request ID

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Deny permission request

Denies a pending permission request with a reason (requires owner or admin rights)

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Permission request ID

Request Body schema: application/json
required

Reason for denial

denialReason
string

Responses

Request samples

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

Response samples

Content type
application/json
{
  • "data": {
    }
}

Workspaces

List user workspaces

Retrieves all workspaces (personal, department, company) accessible by the authenticated user

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Get company workspace

Retrieves the company-wide workspace

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get department workspace

Retrieves workspace for a specific department

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Department ID

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Update department workspace owner

Changes the owner of a department workspace (requires current owner permission)

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Workspace ID

Request Body schema: application/json
required

New owner employee ID

newOwnerId
string

Responses

Request samples

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

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get personal workspace

Retrieves the personal workspace for the authenticated employee

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get workspace by ID

Retrieves any workspace by its ID with owner, department, and root folder associations

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Workspace ID

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Update workspace name

Updates the name of a workspace (requires owner permission)

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Workspace ID

Request Body schema: application/json
required

New workspace name

name
string

Responses

Request samples

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

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get workspace storage quota

Retrieves current storage usage and quota limits for a workspace

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Workspace ID

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Update workspace storage quota

Updates the storage quota limit for a workspace (requires owner permission)

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Workspace ID

Request Body schema: application/json
required

New quota in bytes (null for unlimited)

storageQuotaBytes
integer <int64>

Responses

Request samples

Content type
application/json
{
  • "storageQuotaBytes": 0
}

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get workspace statistics

Retrieves usage statistics for a workspace (folders, files, documents, storage size)

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Workspace ID

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Meetings

List user's meetings

Authorizations:
ApiKeyAuth
query Parameters
status
string

Filter by status: upcoming, active, or all (default)

Responses

Response samples

Content type
application/json
{ }

Create new meeting

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required

Meeting details

object
meetingType
string

"immediate", "scheduled", "recurrent"

name
string
recurrenceRule
string

iCal RRULE format

scheduledEndTime
string

ISO 8601 format

scheduledStartTime
string

ISO 8601 format

timezone
string

IANA timezone (defaults to Asia/Ho_Chi_Minh)

Responses

Request samples

Content type
application/json
{
  • "configuration": { },
  • "meetingType": "string",
  • "name": "string",
  • "recurrenceRule": "string",
  • "scheduledEndTime": "string",
  • "scheduledStartTime": "string",
  • "timezone": "string"
}

Response samples

Content type
application/json
{ }

Get meeting by ID

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Meeting ID

Responses

Response samples

Content type
application/json
{ }

Update meeting

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Meeting ID

Request Body schema: application/json
required

Meeting updates

object
name
string

Responses

Request samples

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

Response samples

Content type
application/json
{ }

Delete meeting

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Meeting ID

Responses

Response samples

Content type
application/json
{ }

End a meeting

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Meeting ID

Responses

Response samples

Content type
application/json
{ }

Add participant to meeting

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Meeting ID

Request Body schema: application/json
required

Participant details

employee_id
string
role
string

Responses

Request samples

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

Response samples

Content type
application/json
{ }

Update participant role

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Meeting ID

employeeId
required
string

Employee ID

Request Body schema: application/json
required

New role

role
string

Responses

Request samples

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

Response samples

Content type
application/json
{ }

Remove participant from meeting

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Meeting ID

employeeId
required
string

Employee ID

Responses

Response samples

Content type
application/json
{ }

Start a meeting

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Meeting ID

Responses

Response samples

Content type
application/json
{ }

Get LiveKit access token for meeting

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Meeting ID

Responses

Response samples

Content type
application/json
{ }

Recordings

List meeting recordings

Authorizations:
ApiKeyAuth
path Parameters
meetingId
required
string

Meeting ID

Responses

Response samples

Content type
application/json
{ }

Complete recording

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Recording ID

Request Body schema: application/json
required

S3 key

s3_key
string

Responses

Request samples

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

Response samples

Content type
application/json
{ }

Fail recording

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Recording ID

Request Body schema: application/json
required

Failure type

failure_type
string

"failed_to_start", "failed_to_stop", "aborted"

Responses

Request samples

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

Response samples

Content type
application/json
{ }

Start recording

Authorizations:
ApiKeyAuth
Request Body schema: application/json
required

Recording start details

meeting_id
string
mode
string

"screen_recording" or "transcript"

Responses

Request samples

Content type
application/json
{
  • "meeting_id": "string",
  • "mode": "string"
}

Response samples

Content type
application/json
{ }

Stop recording

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Recording ID

Responses

Response samples

Content type
application/json
{ }

Get recording by ID

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Recording ID

Responses

Response samples

Content type
application/json
{ }

Grant recording access

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Recording ID

Request Body schema: application/json
required

Access details

employee_id
string
role
string

"owner", "admin", "member"

Responses

Request samples

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

Response samples

Content type
application/json
{ }

Revoke recording access

Authorizations:
ApiKeyAuth
path Parameters
id
required
string

Recording ID

employeeId
required
string

Employee ID

Responses

Response samples

Content type
application/json
{ }

Users

Get current user profile

Authorizations:
ApiKeyAuth

Responses

Response samples

Content type
application/json
{ }

Webhooks

Receive LiveKit webhook events

Processes LiveKit server webhook events for egress (recording) lifecycle management. Authenticates via HMAC-SHA256 signature verification.

header Parameters
Authorization
required
string

HMAC-SHA256 signature of request body

Request Body schema: application/json
required

Webhook event payload

egress_id
string
ended_at
integer
error
string
event
string
object (internal_handlers.LivekitWebhookFile)
room_name
string
started_at
integer

Responses

Request samples

Content type
application/json
{
  • "egress_id": "string",
  • "ended_at": 0,
  • "error": "string",
  • "event": "string",
  • "file": {
    },
  • "room_name": "string",
  • "started_at": 0
}

Response samples

Content type
application/json
{
  • "property1": "string",
  • "property2": "string"
}