Getting Started

Quickstart

Go from zero to submitting your first automated job application in under five minutes.

Step 1: Create a User

Start by creating a user to represent the job seeker on your platform. The externalUserId should be your system's identifier for this person.

POST/users
curl -X POST https://apply-api.boringproject.ai/api/v1/users \
  -H "Authorization: Bearer bp_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "externalUserId": "user_12345",
    "name": "John Doe",
    "email": "john@example.com",
    "maxTotalJobApplications": 1000,
    "maxJobApplicationsPerMonth": 100
  }'
Response200 OK
{
  "userId": "usr_abc123",
  "clientId": "client_xyz789",
  "externalUserId": "user_12345",
  "name": "John Doe",
  "email": "john@example.com",
  "maxTotalJobApplications": 1000,
  "maxJobApplicationsPerMonth": 100,
  "status": "active",
  "createdAt": "2024-02-14T10:30:00Z"
}

Step 2: Upload a Resume

Get a pre-signed S3 URL, upload the resume file, then use the returned resumeUrl when creating a profile.

POST/resumes/upload-url
# 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": "resume.pdf", "contentType": "application/pdf"}'

# Upload file to S3
curl -X PUT "<uploadUrl from response>" \
  -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
}

Step 3: Create a Profile

Create a candidate profile with personal information, work experience, education, miscellaneous details, and the resume URL from the previous step.

POST/profiles
curl -X POST https://apply-api.boringproject.ai/api/v1/profiles \
  -H "Authorization: Bearer bp_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "userId": "usr_abc123",
    "personalInformation": {
      "firstName": "John", "lastName": "Doe",
      "email": "john@example.com", "countryCode": "+1", "phoneNumber": "4155551234",
      "gender": "Male", "city": "San Francisco", "state": "CA", "country": "United States"
    },
    "workExperience": [{ "jobTitle": "Software Engineer", "company": "Tech Corp", "startDate": "2020-01", "currentlyWorkHere": true }],
    "education": [{ "institution": { "name": "State University" }, "degree": { "degreeName": "B.S. Computer Science" } }],
    "skills": [{ "skill": "Python", "experience": "5" }, { "skill": "React", "experience": "4" }],
    "miscellaneous": {
      "totalExperience": "5", "expectedSalaryAmount": "150000", "expectedSalaryCurrency": "USD",
      "noticePeriod": "30", "willingToRelocate": "Yes", "authorisedToWork": ["United States"], "visaRequirement": "No",
      "linkedinUrl": "https://linkedin.com/in/johndoe"
    },
    "resumeUrl": "https://s3.amazonaws.com/.../resume.pdf"
  }'

Step 4: Apply to Jobs

Create a session to apply to specific jobs. Pass the profile ID and an array of job URLs.

Monitor your session with GET /sessions/:sessionId to track application progress and success rates.
POST/sessions/apply
curl -X POST https://apply-api.boringproject.ai/api/v1/sessions/apply \
  -H "Authorization: Bearer bp_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "candidateProfileId": "prof_xyz789",
    "jobs": [
      { "companyName": "Acme Corp", "title": "Senior Software Engineer", "jobId": "12345", "link": "https://boards.greenhouse.io/acme/jobs/12345" }
    ]
  }'