POST /api/v1/file-uploader/upload

Upload one or multiple files to AWS S3 based on the resource type. Each resource type has specific required parameters.

Resource Types & Required Parameters:

  1. lesson_material - Requires lessonId

    • Upload learning materials for a specific lesson
    • Examples: PDFs, videos, presentations, documents
  2. assignment_material - Requires assignmentId

    • Upload assignment instructions, templates, or reference materials
    • Examples: instruction PDFs, starter code, rubrics
  3. assignment_submission - Requires submissionId

    • Upload student assignment submission files
    • Examples: student code, reports, project files
    • Note: The submission record must already exist
  4. exam_material - Requires examId

    • Upload exam-related materials
    • Examples: exam papers, reference materials
  5. cat_material - Requires catId

    • Upload CAT (Continuous Assessment Test) materials
    • Examples: CAT papers, study guides
  6. other - No required parameters

    • Generic file uploads
    • Examples: profile pictures, miscellaneous documents

File Specifications:

  • Maximum file size: 1GB per file
  • Supported formats: PDF, DOC, DOCX, PPT, PPTX, XLS, XLSX, images, videos, archives, code files
  • Blocked formats: Executables (.exe, .bat, .dll), system files
  • Multiple files can be uploaded in a single request

Query parameters

  • resourceType string Required

    Type of resource being uploaded

    Values are lesson_material, assignment_material, assignment_submission, exam_material, cat_material, or other.

  • lessonId string

    UUID of the lesson (required when resourceType is "lesson_material")

  • assignmentId string

    UUID of the assignment (required when resourceType is "assignment_material")

  • submissionId string

    UUID of the assignment submission (required when resourceType is "assignment_submission")

  • examId string

    UUID of the exam (required when resourceType is "exam_material")

  • catId string

    UUID of the CAT (required when resourceType is "cat_material")

multipart/form-data

Body Required

Multipart form data containing one or more files

  • files array[string(binary)] Required

    Files to upload (max 1GB each)

Responses

  • 201 application/json

    Files uploaded successfully

  • 400 application/json

    Bad Request - Missing required parameters or invalid files

  • 413

    Payload Too Large - File size exceeds 1GB limit

POST /api/v1/file-uploader/upload
curl \
 --request POST 'https://api.echoplain.social/api/v1/file-uploader/upload?resourceType=lesson_material' \
 --header "Content-Type: multipart/form-data" \
 --form "files[]=@file"
Response examples (201)
{
  "message": "Files uploaded successfully",
  "lessonId": "123e4567-e89b-12d3-a456-426614174000",
  "resourceType": "lesson_material",
  "uploadedFiles": [
    {
      "id": "file-abc123",
      "fileUrl": "https://s3.amazonaws.com/bucket/files/lecture_notes.pdf",
      "fileSize": 1048576,
      "mimeType": "application/pdf",
      "uploadedAt": "2025-11-21T10:00:00Z",
      "originalName": "lecture_notes.pdf"
    }
  ]
}
Response examples (400)
{
  "error": "Bad Request",
  "message": "lessonId is required when resourceType is \"lesson_material\"",
  "statusCode": 400
}