Getting Started
Testing
Use demo profiles to test your integration flow before applying with real candidate data.
Demo Profiles
Every account includes pre-built demo profiles — complete candidate profiles with realistic data for testing the full application flow. Demo profiles are globally available and maintained by the platform.
Use demo profiles to verify your integration end-to-end before creating real users and profiles. Applying with a demo profile submits a real application and consumes credits, so you can confirm the entire pipeline works.
Fetch Demo Profiles
Retrieve all available demo profiles. Each profile includes personal information, work experience, education, skills, and a resume — ready to use with the apply endpoint.
/demo/profilescurl https://apply-api.boringproject.ai/api/v1/demo/profiles \
-H "Authorization: Bearer bp_live_..."[
{
"candidateProfileId": "prof_demo_xyz789",
"userId": "usr_demo_001",
"isDemo": true,
"isComplete": true,
"personalInformation": {
"firstName": "Jane",
"lastName": "Smith",
"email": "jane.smith@example.com",
"countryCode": "+1",
"phoneNumber": "4155559876",
"city": "San Francisco",
"state": "CA",
"country": "United States"
},
"workExperience": [
{
"jobTitle": "Software Engineer",
"company": "Tech Corp",
"startDate": "2020-01",
"currentlyWorkHere": true
}
],
"education": [
{
"institution": { "name": "UC Berkeley" },
"degree": { "degreeName": "B.S. Computer Science" },
"startDate": "2016-09",
"endDate": "2020-05"
}
],
"skills": [
{ "skill": "JavaScript", "experience": "5" },
{ "skill": "Python", "experience": "4" },
{ "skill": "React", "experience": "3" }
],
"languages": [
{ "language": "English", "level": "Native" }
],
"certifications": [],
"achievements": [],
"miscellaneous": {
"totalExperience": "4",
"linkedinUrl": "https://linkedin.com/in/janesmith",
"willingToRelocate": "Yes",
"authorisedToWork": ["United States"]
},
"resumeUrl": "https://s3.amazonaws.com/.../demo_resume.pdf",
"createdAt": "2024-01-01T00:00:00Z"
}
]Fetch Demo Users
Retrieve all available demo users. Each demo user is linked to one or more demo profiles and can be referenced as the userId when creating sessions.
/demo/userscurl https://apply-api.boringproject.ai/api/v1/demo/users \
-H "Authorization: Bearer bp_live_..."[
{
"userId": "usr_demo_001",
"externalUserId": "demo_user_1",
"name": "Jane Smith",
"email": "jane.smith@example.com",
"isDemo": true,
"status": "active",
"createdAt": "2024-01-01T00:00:00Z"
}
]Test an Application
Use a demo profile's candidateProfileId with POST /sessions/apply to submit a real test application. Set overrideEmail to your own email address so ATS confirmation emails are sent to you instead of the demo profile's email.
This consumes credits and submits a real application, allowing you to verify the full pipeline before using your own candidate data.
/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_demo_xyz789",
"overrideEmail": "you@yourcompany.com",
"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_demo_001",
"candidateProfileId": "prof_demo_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"
}Moving to Production
Once you have verified the flow with demo profiles, create your own users, profiles, and resumes to start applying with real candidate data. The request format and endpoints are identical — replace the demo candidateProfileId with your own.
Related docs
Continue reading
Authentication
Authenticate requests to the Boring Project API using Bearer tokens with your API key.
Quickstart
Go from zero to submitting your first automated job application in under five minutes.
Error Handling
Every API error returns a consistent JSON structure with a machine-readable code, human-readable message, and optional details. Learn the full error taxonomy and how to handle each category.