API Reference

Resumes

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

Upload Flow

Resume uploads use a three-step flow: (1) Request a pre-signed upload URL from our API, (2) Upload the file directly to S3 using that URL, (3) Use the returned resumeUrl when creating or updating candidate profiles. This approach keeps large files off our servers 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

Request a pre-signed S3 URL for uploading a resume file.

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

Retrieve resume metadata and download URL by resume ID.

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

Get a pre-signed download URL for a specific resume. The URL is temporary and expires after the configured expiry time. Use this when you need to provide a secure, time-limited download link.

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

Delete a resume file from S3. Note that deleting a resume will affect any profiles referencing this resume URL.

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_..."
Response200 OK
{
          "success": true,
          "resumeId": "res_def456",
          "message": "Resume deleted successfully"
        }