API Reference

Resumes

Upload and manage resume files. Uses pre-signed URLs for secure, direct-to-storage uploads.

Upload Flow

Resume uploads follow a three-step flow:

1. Request a pre-signed upload URL from the API. 2. Upload the file directly to storage using that URL. 3. Pass the returned `resumeUrl` when creating or updating a candidate profile.

This approach keeps large files off the API server and provides fast, reliable uploads.

Supported file types: PDF, DOC, DOCX. Maximum file size: 10 MB. Upload URLs expire after 1 hour.

Get Upload URL

Generates a pre-signed upload URL for a resume file. The response includes both the temporary `uploadUrl` for uploading the file and the permanent `resumeUrl` to use in candidate profiles.

POST/resumes/upload-url
NameTypeRequiredDescription
filenamestringRequiredOriginal filename (e.g., resume.pdf)
contentTypestringRequiredMIME type: application/pdf, application/msword, or application/vnd.openxmlformats-officedocument.wordprocessingml.document
# Step 1: Get upload URL
curl -X POST https://apply-api.boringproject.ai/api/v1/resumes/upload-url \
  -H "Authorization: Bearer bp_live_..." \
  -H "Content-Type: application/json" \
  -d '{"filename": "john_doe_resume.pdf", "contentType": "application/pdf"}'

# Step 2: Upload file to S3
curl -X PUT "<uploadUrl>" -H "Content-Type: application/pdf" --data-binary @resume.pdf
Response200 OK
{
  "resumeId": "res_def456",
  "uploadUrl": "https://s3.amazonaws.com/bucket/path?X-Amz-Algorithm=...",
  "resumeUrl": "https://s3.amazonaws.com/bucket/path/resume.pdf",
  "expiresIn": 3600
}

Get Resume

Retrieves metadata for a specific resume including filename, content type, and the permanent resume URL. To generate a temporary download link, use the Get Download URL endpoint.

GET/resumes/:resumeId
curl https://apply-api.boringproject.ai/api/v1/resumes/res_def456 \
          -H "Authorization: Bearer bp_live_..."
Response200 OK
{
  "resumeId": "res_def456",
  "clientId": "client_xyz789",
  "filename": "john_doe_resume.pdf",
  "contentType": "application/pdf",
  "resumeUrl": "https://s3.amazonaws.com/bucket/path/resume.pdf",
  "uploadedAt": "2024-02-14T10:30:00Z"
}

Get Download URL

Generates a temporary, pre-signed download URL for a specific resume. The URL expires after the time indicated in the response. Use this whenever you need to provide a secure, time-limited download link to end users.

The download URL is a pre-signed S3 URL that expires. Generate a new one each time you need to provide a download link — do not cache or store these URLs long-term.
GET/resumes/:resumeId/download-url
curl https://apply-api.boringproject.ai/api/v1/resumes/res_def456/download-url \
  -H "Authorization: Bearer bp_live_..."
Response200 OK
{
  "url": "https://s3.amazonaws.com/bucket/resumes/client_xyz789/res_def456/resume.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=3600&...",
  "expiresIn": 3600
}

Delete Resume

Permanently deletes a resume file from storage. Any candidate profiles still referencing this resume URL will retain the link, but the file will no longer be accessible.

Deleting a resume does not automatically update profiles using it. Update affected profiles with a new resumeUrl after deletion.
DELETE/resumes/:resumeId
curl -X DELETE https://apply-api.boringproject.ai/api/v1/resumes/res_def456 \
          -H "Authorization: Bearer bp_live_..."