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
- Intake API -- presigned URL, submit, and submission status
- Token API -- LiveKit token generation
- Webhook API -- Pipedrive webhook receiver
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.