API Reference

Candidate Profiles

Manage candidate profiles containing personal information, work experience, education, skills, languages, certifications, achievements, miscellaneous details, and resumes.

Profile Object

A profile contains all the information needed to fill out job applications on behalf of a candidate. Below is the full field reference for each section of the profile object.

NameTypeRequiredDescription
resumeUrlstringRequiredS3 URL of the uploaded resume file. Obtain this from the Resumes upload endpoint.
personalInformationobjectRequired
Candidate's personal and contact details.
FieldTypeRequiredDescription
firstNamestringRequiredFirst name
lastNamestringRequiredLast name
emailstringRequiredEmail address
countryCodestringRequiredPhone country code (e.g. "+1")
phoneNumberstringRequiredPhone number
genderstringRequiredMale, Female, Non-binary, or Prefer not to say
addressstringRequiredStreet address
citystringRequiredCity
statestringRequiredState or province
zipCodestringRequiredZIP or postal code
countrystringRequiredCountry
citizenshipstringRequiredCitizenship status
workExperiencearrayRequired
Array of work history entries. At least one entry is required.
FieldTypeRequiredDescription
jobTitlestringRequiredJob title
companystringRequiredCompany name
startDatestringRequiredStart date in YYYY-MM format (e.g. "2020-01")
endDatestringRequiredEnd date in YYYY-MM format. Set to empty string if currently working here.
currentlyWorkHerebooleanRequiredtrue if this is the current position, false otherwise
workLocationstringRequiredWork location (e.g. "San Francisco, CA" or "Remote")
descriptionstringRequiredRole description or responsibilities
educationarrayRequired
Array of education entries. At least one entry is required.
FieldTypeRequiredDescription
institutionobjectRequiredInstitution details: { name, location: { city, state } }
degreeobjectRequired{ degreeName } — e.g. { degreeName: "B.S. Computer Science" }
startDatestringOptionalStart date in YYYY-MM format
endDatestringOptionalEnd date in YYYY-MM format
gpastringOptionalGPA (e.g. "3.7")
skillsarrayRequired
Array of skills. At least one entry is required.
FieldTypeRequiredDescription
skillstringRequiredSkill name
experiencestringRequiredYears of experience (e.g. "5"). Required when a skill entry is provided.
languagesarrayOptional
Array of languages the candidate speaks. Optional section, but if an entry is provided the fields below apply.
FieldTypeRequiredDescription
languagestringOptionalLanguage name
levelstringOptionalProficiency: Native, Fluent, Advanced, Intermediate, or Beginner
certificationsarrayOptional
Array of professional certifications. Optional section, but if an entry is provided the fields below apply.
FieldTypeRequiredDescription
namestringOptionalCertification name
issuerstringOptionalIssuing organization
issueDatestringOptionalIssue date in YYYY-MM format
expiryDatestringOptionalExpiry date in YYYY-MM format
credentialIdstringOptionalCredential ID
credentialUrlstringOptionalURL to verify the credential
achievementsarrayOptional
Array of awards or achievements. Optional section, but if an entry is provided the fields below apply.
FieldTypeRequiredDescription
awardTitlestringOptionalAward or achievement title
issuerstringOptionalIssuing organization
issuingDatestringOptionalDate awarded in YYYY-MM format
descriptionstringOptionalDescription of the achievement
miscellaneousobjectRequired
Additional candidate information. Contains required sub-fields.
FieldTypeRequiredDescription
totalExperiencestringRequiredTotal years of professional experience (e.g. "6")
expectedSalaryAmountstringRequiredExpected salary amount (e.g. "150000")
expectedSalaryCurrencystringRequiredCurrency code (e.g. "USD")
noticePeriodstringRequiredNotice period in days (e.g. "30")
willingToRelocatestringRequiredYes, No, or Maybe
authorisedToWorkstring[]RequiredArray of countries where the candidate is authorized to work (e.g. ["United States", "Canada"])
visaRequirementstringRequiredWhether visa sponsorship is needed: Yes or No
highestEducationLevelstringOptionalHigh School, Associate's Degree, Bachelor's Degree, Master's Degree, Doctorate, or Other
currentSalarystringOptionalCurrent salary amount
currentSalaryCurrencystringOptionalCurrent salary currency code
linkedinUrlstringRequiredLinkedIn profile URL
twitterUrlstringOptionalTwitter/X profile URL
githubUrlstringOptionalGitHub profile URL
portfolioUrlstringOptionalPortfolio or personal website URL
otherUrlstringOptionalAny other relevant URL
coverLetterstringOptionalDefault cover letter text
expectedDateOfJoiningstringOptionalEarliest available start date
drivingLicensestringOptionalHas a driving license: Yes or No
veteranStatusstringOptionalVeteran status
disabilitystringOptionalDisability disclosure
racestringOptionalRace/ethnicity (for EEO compliance)
securityClearanceActivestringOptionalActive security clearance: Yes or No
companiesToExcludestringOptionalCompanies to exclude from applications
defaultExperiencestringOptionalDefault years of experience for skills not individually specified (e.g. "3")

Create Profile

Create a new candidate profile for a user. The profile contains all information needed to fill out job applications. See the Profile Object reference above for the full field schema.

POST/profiles
NameTypeRequiredDescription
userIdstringRequiredUser ID this profile belongs to
resumeUrlstringRequiredS3 URL of uploaded resume. Obtain via the Resumes upload endpoint.
personalInformationobjectRequired
Candidate's personal and contact details. See Profile Object for sub-fields.
workExperiencearrayRequired
Array of work history entries. At least one required. See Profile Object for sub-fields.
educationarrayRequired
Array of education entries. At least one required. See Profile Object for sub-fields.
skillsarrayRequired
Array of skills. At least one required. See Profile Object for sub-fields.
languagesarrayOptional
Array of languages. See Profile Object for sub-fields.
certificationsarrayOptional
Array of professional certifications. See Profile Object for sub-fields.
achievementsarrayOptional
Array of awards or achievements. See Profile Object for sub-fields.
miscellaneousobjectRequired
Additional candidate information. Has required sub-fields — see Profile Object.
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.doe@example.com",
      "countryCode": "+1",
      "phoneNumber": "4155551234",
      "city": "San Francisco",
      "state": "CA",
      "country": "United States"
    },
    "workExperience": [
      {
        "jobTitle": "Software Engineer",
        "company": "Tech Corp",
        "startDate": "2020-01",
        "currentlyWorkHere": true,
        "workLocation": "San Francisco, CA",
        "description": "Full-stack development with React and Python"
      }
    ],
    "education": [
      {
        "institution": { "name": "State University", "location": { "city": "Berkeley", "state": "CA" } },
        "degree": { "degreeName": "B.S. Computer Science" },
        "startDate": "2016-09",
        "endDate": "2020-05",
        "gpa": "3.7"
      }
    ],
    "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"
  }'
Response200 OK
{
  "candidateProfileId": "prof_xyz789",
  "userId": "usr_abc123",
  "clientId": "client_xyz789",
  "isComplete": true,
  "personalInformation": {
    "firstName": "John",
    "lastName": "Doe",
    "email": "john.doe@example.com",
    "countryCode": "+1",
    "phoneNumber": "4155551234",
    "city": "San Francisco",
    "state": "CA",
    "country": "United States"
  },
  "workExperience": [
    {
      "jobTitle": "Software Engineer",
      "company": "Tech Corp",
      "startDate": "2020-01",
      "currentlyWorkHere": true,
      "workLocation": "San Francisco, CA",
      "description": "Full-stack development with React and Python"
    }
  ],
  "education": [
    {
      "institution": { "name": "State University", "location": { "city": "Berkeley", "state": "CA" } },
      "degree": { "degreeName": "B.S. Computer Science" },
      "startDate": "2016-09",
      "endDate": "2020-05",
      "gpa": "3.7"
    }
  ],
  "skills": [
    { "skill": "Python", "experience": "5" },
    { "skill": "React", "experience": "4" }
  ],
  "languages": [
    { "language": "English", "level": "Native" },
    { "language": "Spanish", "level": "Intermediate" }
  ],
  "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"
}

Get Profile

Retrieve a candidate profile by its ID. Returns the full profile object including all sections — see Profile Object for the complete field reference.

GET/profiles/:profileId

Update Profile

Update an existing candidate profile. All fields are optional — only include fields you want to change. The profile will be re-validated against mandatory field requirements after update.

PUT/profiles/:profileId

Validate Profile

Check if a profile meets your client's mandatory field requirements before submitting applications. Returns a list of missing fields and validation errors.

GET/profiles/:profileId/validate
Response200 OK
{
  "candidateProfileId": "prof_xyz789",
  "isComplete": false,
  "mandatoryFields": ["personalInformation.email", "personalInformation.phone", "workExperience"],
  "missingFields": ["personalInformation.phone"],
  "validationErrors": [{ "field": "personalInformation.phone", "message": "Phone number is required" }]
}

List Profiles

Get all profiles for your client, optionally filtered by user ID or completion status.

GET/profiles
NameTypeRequiredDescription
pageintegerOptionalPage number (default: 1)
limitintegerOptionalItems per page, max 100 (default: 20)
userIdstringOptionalFilter by user ID
isCompletebooleanOptionalFilter by completion status