API Reference

The Dissertation Editor Platform exposes a REST API via AWS API Gateway.

Base URL

https://jwfqmc0638.execute-api.us-east-1.amazonaws.com

All endpoints use this base URL. No authentication is currently required for API access.

Endpoints

Method Path Description
POST /intake/presigned-url Generate a presigned S3 URL for document upload
POST /intake/submit Submit the intake form with contact info and document reference
GET /intake/submission/{submissionId} Retrieve submission status, analysis, and quote
GET /token Generate a LiveKit JWT token for video consultations
POST /webhooks/pipedrive Receive Pipedrive webhook events (deal updates)
POST /meetings/create Create a meeting room and send email invites
GET /meetings/{roomCode} Validate a meeting room code
GET /config/rate-schedule Get the current rate schedule configuration
PUT /config/rate-schedule Update the rate schedule configuration
GET /pipedrive/deals Fetch active Pipedrive deals grouped by stage
POST /examples/presigned-url Generate presigned S3 URLs for example file uploads
POST /examples/files Save metadata for uploaded example files
GET /examples/files List all example dissertation files
DELETE /examples/files/{fileId} Delete an example file and its metadata

Common Response Format

All endpoints return JSON. Successful responses include the relevant data directly in the response body. Error responses follow this format:

{
  "error": "Description of what went wrong"
}

HTTP Status Codes

Code Meaning
200 Success
400 Bad request (missing or invalid parameters)
404 Resource not found (e.g., invalid submissionId)
500 Internal server error (check CloudWatch logs)

CORS

All endpoints include CORS headers allowing requests from the Amplify-hosted frontend origins. The Access-Control-Allow-Origin header is set in the Lambda response.

Rate Limits

API Gateway default throttling applies: 10,000 requests per second with a burst of 5,000. These defaults are sufficient for the expected traffic volume.

Detailed Documentation

Configuration & Pipedrive Endpoints

GET /config/rate-schedule

Returns the current rate schedule used for automated quote generation. Returns 404 if not yet configured.

PUT /config/rate-schedule

Updates the rate schedule. Body must include a rates object and optional adminFee (defaults to $25).

GET /pipedrive/deals

Proxies to the Pipedrive API and returns active deals grouped by pipeline stage. Query parameters:

Parameter Default Description
pipeline_id 1 Pipedrive pipeline ID
status open Deal status filter
limit 100 Max deals to return (up to 500)

POST /meetings/create

Creates a meeting room in DynamoDB, generates a unique room code, and sends SES email invites to participants.

GET /meetings/{roomCode}

Validates a meeting room code. Returns 404 if not found, 410 if expired (24h TTL).

Example Dissertations Endpoints

POST /examples/presigned-url

Generates presigned S3 upload URLs for batch file uploads. The S3 bucket uses KMS encryption with all public access blocked.

Request body:

{
  "files": [
    { "fileName": "sample-thesis.docx", "contentType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "fileSize": 524288 }
  ]
}

Response: Returns an uploads array with uploadUrl, s3Key, and fileId for each file. Maximum 20 files per batch.

POST /examples/files

Saves file metadata to DynamoDB after successful S3 uploads.

Request body:

{
  "files": [
    { "fileId": "uuid", "fileName": "sample-thesis.docx", "s3Key": "examples/uuid/sample-thesis.docx", "contentType": "...", "fileSize": 524288, "uploadedBy": "admin" }
  ]
}

GET /examples/files

Returns all example dissertation files sorted by upload date (newest first).

Response:

{
  "files": [ { "fileId": "...", "fileName": "...", "fileSize": 0, "uploadedAt": "...", "uploadedBy": "...", "notes": "" } ],
  "count": 1
}

DELETE /examples/files/{fileId}

Deletes the file from S3 and removes its metadata from DynamoDB. Returns 404 if the file doesn't exist.