Skip to content

API Reference

RecordPlatform REST API documentation.

Interactive Documentation

Default credentials: admin / 123456

Base URL

http://localhost:8000/record-platform

Authentication

All endpoints except /auth/** require JWT authentication.

Get Token

http
POST /auth/login
Content-Type: application/json

{
  "username": "admin",
  "password": "123456"
}

Response:

json
{
  "code": 200,
  "data": {
    "token": "eyJhbGciOiJIUzUxMiJ9...",
    "expiresIn": 86400
  }
}

Use Token

Include in all subsequent requests:

http
Authorization: Bearer <token>

API Endpoints

Authentication

MethodEndpointDescription
POST/api/v1/auth/loginUser login
POST/api/v1/auth/registerUser registration
POST/api/v1/auth/logoutUser logout
GET/api/v1/auth/meGet current user info

User Registration

http
POST /api/v1/auth/register
Content-Type: application/json

{
  "email": "user@example.com",
  "code": "123456",
  "username": "user1",
  "password": "securepass",
  "nickname": "Display Name"
}
FieldTypeRequiredDescription
emailstringYesUser email address
codestringYesEmail verification code
usernamestringYesLogin username
passwordstringYesUser password
nicknamestringNoDisplay name (max 50 chars)

Files

MethodEndpointDescription
POST/api/v1/files/upload/startStart chunked upload
POST/api/v1/files/upload/chunkUpload file chunk
POST/api/v1/files/upload/completeComplete chunked upload
POST/api/v1/files/upload/pausePause upload
POST/api/v1/files/upload/resumeResume upload
POST/api/v1/files/upload/cancelCancel upload
GET/api/v1/files/upload/checkCheck upload status
GET/api/v1/files/upload/progressGet upload progress
GET/api/v1/filesList user's files
GET/api/v1/files/{hash}Get file details
GET/api/v1/files/{hash}/downloadDownload file
DELETE/api/v1/files/{hash}Delete file
GET/api/v1/files/searchSearch files

Images

MethodEndpointDescription
POST/api/v1/images/upload/avatarUpload user avatar
POST/api/v1/images/upload/imageUpload general image
GET/api/v1/images/download/**Download image

File Sharing

MethodEndpointDescription
POST/api/v1/files/shareCreate share link
GET/api/v1/share/{code}/infoGet share info (public)
GET/api/v1/files/share/{code}Access shared file
GET/api/v1/files/sharesList user's shares
DELETE/api/v1/files/share/{code}Revoke share
GET/api/v1/files/share/{code}/logsGet share access logs

Get Share Info (Public)

Public endpoint - no authentication required.

http
GET /api/v1/share/{shareCode}/info

Returns share details including file list. Uses business codes for share status:

Business CodeMeaning
200Success
50009Share not found
50010Share cancelled
50011Share expired

Response:

json
{
  "code": 200,
  "data": {
    "shareCode": "abc123",
    "shareType": 0,
    "expireTime": "2025-01-15T00:00:00Z",
    "files": [
      {
        "fileId": "...",
        "fileName": "document.pdf",
        "fileSize": 1024000
      }
    ]
  }
}

Admin (File Management)

MethodEndpointDescription
GET/api/v1/admin/filesList all files (admin)
GET/api/v1/admin/files/{hash}File detail with provenance
PUT/api/v1/admin/files/{hash}/statusUpdate file status
DELETE/api/v1/admin/files/{hash}Force delete file
GET/api/v1/admin/files/sharesList all shares
DELETE/api/v1/admin/files/shares/{code}Force cancel share
GET/api/v1/admin/files/shares/{code}/logsShare access logs
GET/api/v1/admin/files/shares/{code}/statsShare access stats

Permissions (Admin Only)

MethodEndpointDescription
GET/api/v1/system/permissions/usersList all users
PUT/api/v1/system/permissions/users/{id}/roleUpdate user role
GET/api/v1/system/permissions/rolesList all roles
GET/api/v1/system/permissions/permissionsList all permissions

Tickets

MethodEndpointDescription
POST/api/v1/ticketsCreate support ticket
GET/api/v1/ticketsList user's tickets
GET/api/v1/tickets/{id}Get ticket details
POST/api/v1/tickets/{id}/replyReply to ticket
PUT/api/v1/tickets/{id}/statusUpdate ticket status
GET/api/v1/tickets/adminList all tickets (admin)
PUT/api/v1/tickets/admin/{id}/assignAssign handler (admin)
PUT/api/v1/tickets/admin/{id}/statusUpdate status (admin)

Create Ticket

http
POST /api/v1/tickets
Content-Type: application/json

{
  "title": "Unable to upload large files",
  "content": "When uploading files over 1GB, the upload fails...",
  "priority": 1,
  "category": 0,
  "attachmentIds": ["file-id-1", "file-id-2"]
}
FieldTypeRequiredDescription
titlestringYesTicket title (max 200 chars)
contentstringYesTicket description
priorityintNo0=Low, 1=Medium (default), 2=High
categoryintNoSee category table below (default: 99)
attachmentIdsstring[]NoRelated file IDs

Ticket Status

CodeStatusDescription
0PENDINGAwaiting processing
1PROCESSINGIn progress
2CONFIRMINGPending user confirmation
3COMPLETEDResolved
4CLOSEDClosed

Ticket Priority

CodePriority
0Low
1Medium
2High

Ticket Category

CodeCategory
0Bug Report
1Feature Request
2Question
3Feedback
99Other

Reply to Ticket

http
POST /api/v1/tickets/{id}/reply
Content-Type: application/json

{
  "content": "Thank you for reporting. We are investigating...",
  "attachmentIds": []
}

Friends

MethodEndpointDescription
POST/api/v1/friends/requestsSend friend request
GET/api/v1/friends/requests/receivedGet received requests
GET/api/v1/friends/requests/sentGet sent requests
POST/api/v1/friends/requests/{id}/acceptAccept friend request
POST/api/v1/friends/requests/{id}/rejectReject friend request
DELETE/api/v1/friends/requests/{id}Cancel friend request
GET/api/v1/friends/requests/pending-countGet pending request count
GET/api/v1/friendsGet friends list (paginated)
GET/api/v1/friends/allGet all friends (for selector)
DELETE/api/v1/friends/{id}Unfriend
PUT/api/v1/friends/{id}/remarkUpdate friend remark
GET/api/v1/friends/searchSearch users

Send Friend Request

http
POST /api/v1/friends/requests
Content-Type: application/json

{
  "addresseeId": "user-external-id",
  "message": "Hi, let's be friends!"
}
FieldTypeRequiredDescription
addresseeIdstringYesTarget user's external ID
messagestringNoRequest message (max 255 chars)

Friend Request Status

CodeStatusDescription
0PENDINGAwaiting response
1ACCEPTEDRequest accepted
2REJECTEDRequest rejected
3CANCELLEDRequest cancelled by sender

Friend File Shares

MethodEndpointDescription
POST/api/v1/friend-sharesShare files to friend
GET/api/v1/friend-shares/receivedGet received shares
GET/api/v1/friend-shares/sentGet sent shares
GET/api/v1/friend-shares/{id}Get share details
POST/api/v1/friend-shares/{id}/readMark share as read
DELETE/api/v1/friend-shares/{id}Cancel share
GET/api/v1/friend-shares/unread-countGet unread count

Share Files to Friend

http
POST /api/v1/friend-shares
Content-Type: application/json

{
  "friendId": "friend-external-id",
  "fileHashes": ["hash1", "hash2"],
  "message": "Check out these files!"
}
FieldTypeRequiredDescription
friendIdstringYesFriend's external ID
fileHashesstring[]YesArray of file hashes to share
messagestringNoShare message (max 255 chars)

SSE (Server-Sent Events)

MethodEndpointDescription
GET/api/v1/sse/connectSubscribe to events
DELETE/api/v1/sse/disconnectDisconnect SSE
GET/api/v1/sse/statusCheck connection status

System Monitoring (Admin Only)

MethodEndpointDescription
GET/api/v1/system/statsGet system statistics (users, files, storage, transactions)
GET/api/v1/system/chain-statusGet blockchain status (block height, nodes, chain type)
GET/api/v1/system/healthGet system health status (database, Redis, blockchain, storage)
GET/api/v1/system/monitorGet aggregated monitor metrics

System Audit (Admin Only)

MethodEndpointDescription
GET/api/v1/system/audit/overviewGet audit overview data
GET/api/v1/system/audit/logs/pageQuery audit logs (paginated, GET params)
POST/api/v1/system/audit/logs/pageQuery audit logs (paginated, POST body)
GET/api/v1/system/audit/logs/{id}Get log details by ID
POST/api/v1/system/audit/logs/exportExport audit logs to Excel
GET/api/v1/system/audit/high-frequencyGet high frequency operations
POST/api/v1/system/audit/sensitive/pageGet sensitive operations (paginated)
GET/api/v1/system/audit/error-statsGet error operation statistics
GET/api/v1/system/audit/time-distributionGet user time distribution
GET/api/v1/system/audit/configsGet audit configurations
PUT/api/v1/system/audit/configsUpdate audit configuration
GET/api/v1/system/audit/check-anomaliesCheck for operation anomalies
POST/api/v1/system/audit/backup-logsBackup old logs

Note: For comprehensive REST API documentation with all endpoints, request/response examples, and detailed field descriptions, see API_DOCUMENTATION.md in the project root.

Response Format

All responses follow this structure:

json
{
  "code": 200,
  "message": "success",
  "data": { ... }
}

Status Codes

CodeMeaning
200Success
400Bad Request
401Unauthorized
403Forbidden
404Not Found
429Rate Limited
500Server Error

Error Response

json
{
  "code": 400,
  "message": "Validation failed",
  "data": null
}

Pagination

List endpoints support pagination:

http
GET /file/list?page=1&size=20&sort=createdAt,desc

Response includes pagination info:

json
{
  "code": 200,
  "data": {
    "records": [...],
    "total": 100,
    "current": 1,
    "size": 20,
    "pages": 5
  }
}

File Upload

Single File Upload

http
POST /file/upload
Content-Type: multipart/form-data

file: <binary>

Chunked Upload

For large files (>10MB), use chunked upload with dynamic chunk sizing:

Dynamic Chunk Size Strategy

The system supports dynamic chunk sizing based on file size for optimal performance:

File SizeRecommended Chunk Size
< 10MB2MB
< 100MB5MB
< 500MB10MB
< 2GB20MB
>= 2GB50MB

Maximum chunk size limit: 80MB (Dubbo payload limit is 100MB)

Start Chunked Upload

http
POST /file/upload/start
Content-Type: application/json

{
  "fileName": "large-file.zip",
  "fileSize": 1073741824,
  "contentType": "application/zip",
  "chunkSize": 20971520,
  "totalChunks": 52
}

Upload Chunk

http
POST /file/upload/chunk
Content-Type: multipart/form-data

chunk: <binary>
chunkNumber: 1
totalChunks: 10
fileHash: abc123...

Complete Upload

After all chunks are uploaded:

http
POST /api/v1/files/upload/complete
Content-Type: application/x-www-form-urlencoded

clientId=abc123...

Rate Limiting

API requests are rate-limited per user:

Endpoint CategoryLimit
Authentication10/min
File Upload20/min
File Download100/min
Other60/min

Rate limit headers:

http
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 55
X-RateLimit-Reset: 1609459200

Dubbo Services

Internal services use Dubbo Triple protocol (not REST).

BlockChainService

java
// Store file on blockchain
SharingVO storeFile(String fileHash, String fileKey, String fileName);

// Query blockchain record
SharingVO queryFile(String txHash);

// Delete blockchain record
void deleteFile(String txHash);

DistributedStorageService

java
// Upload file chunk
void uploadChunk(String bucket, String objectKey, byte[] data);

// Download file
byte[] downloadFile(String bucket, String objectKey);

// Delete file
void deleteFile(String bucket, String objectKey);

// Check file exists
boolean exists(String bucket, String objectKey);

WebSocket Events (SSE)

Subscribe to real-time events:

javascript
const eventSource = new EventSource('/record-platform/api/v1/sse/connect', {
  headers: { 'Authorization': 'Bearer <token>' }
});

eventSource.onmessage = (event) => {
  const data = JSON.parse(event.data);
  console.log(data.type, data.payload);
};

Note: Native EventSource doesn't support custom headers. The platform uses a short-lived token passed via query parameter for authenticated SSE connections.

Event types (kebab-case format):

  • message-received - New private message
  • announcement-published - New system announcement
  • ticket-updated - Ticket status update or reply
  • friend-request - New friend request received
  • friend-accepted - Friend request accepted
  • friend-share - Friend shared files with you
  • heartbeat - Connection heartbeat
  • connected - Connection established

Released under the Apache 2.0 License.