Getting Started
Quickstart
Go from zero to submitting your first automated job application in under five minutes.
Step 1: Create a User
Create a user to represent the job seeker on your platform. Set externalUserId to your system's unique identifier for this person.
/userscurl -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
}'{
"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
Request a pre-signed upload URL, upload the resume file, then use the returned resumeUrl when creating a candidate profile.
/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{
"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 the user's personal information, work experience, education, skills, and the resume URL from the previous step.
/profilescurl -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"
}'{
"candidateProfileId": "prof_xyz789",
"userId": "usr_abc123",
"clientId": "client_xyz789",
"isComplete": true,
"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" }
],
"languages": [],
"certifications": [],
"achievements": [],
"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",
"createdAt": "2024-02-14T10:35:00Z"
}Step 4: Apply to Jobs
Create a session to submit applications. Provide the candidate profile ID and an array of job objects with the job URL.
/sessions/applycurl -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" }
]
}'{
"sessionId": "sess_abc123",
"type": "run_once",
"userId": "usr_abc123",
"candidateProfileId": "prof_xyz789",
"status": "active",
"stats": { "totalRuns": 1, "totalApplications": 0, "successfulApplications": 0, "failedApplications": 0, "applicationsSkipped": 0, "jobsQueued": 1 },
"searchContext": { "titles": ["Senior Software Engineer"], "locations": [] },
"createdAt": "2024-02-14T11:00:00Z"
}Related docs
Continue reading
Introduction
The Boring Project API enables enterprise clients to automate job applications for their users across ATS platforms.
Testing
Use demo profiles to test your integration flow before applying with real candidate data.
Candidate Profiles
Create, retrieve, update, and validate candidate profiles. A profile represents all the information needed to apply for jobs on behalf of a candidate.