Skip to main content

Search candidates

Search the OikoHire candidate pool. Only candidates who have a public profile and have consented to AI matching and recruiter discovery are returned.

Scope required: candidates:read

GET /api/v1/external/candidates
Authorization: Bearer sk_live_<key>

Query parameters

ParameterTypeRequiredConstraintsDescription
qstringNoMax 300 charsFree-text search against headline, summary, and skills
skillsstringNoComma-separated, max 20 items, max 80 chars eachFilter by skill keywords (all must match)
locationstringNoMax 120 charsFilter by location (case-insensitive substring match)
experience_minintegerNo0 – 60Minimum years of experience
pageintegerNoMin 1 (default: 1)Page number
limitintegerNo1 – 50 (default: 10)Results per page

Example request

curl "https://api.oikohire.com/api/v1/external/candidates" \
-H "Authorization: Bearer sk_live_<key>" \
-G \
--data-urlencode "q=backend engineer" \
--data-urlencode "skills=typescript,postgresql" \
--data-urlencode "location=Tokyo" \
--data-urlencode "experience_min=3" \
--data-urlencode "limit=5"

Response 200 OK

{
"status": "success",
"data": {
"candidates": [
{
"id": "clx1abc23def456",
"name": "Alex Johnson",
"headline": "Senior Backend Engineer",
"location": "Tokyo, Japan",
"skills": ["typescript", "postgresql", "nestjs"],
"experience_years": 6,
"updated_at": "2026-07-08T12:34:56.000Z"
}
],
"pagination": {
"page": 1,
"limit": 5,
"total": 42,
"total_pages": 9
}
}
}

Candidate object fields

FieldTypeDescription
idstringUnique candidate identifier
namestring | nullCandidate's display name (may be null if not provided)
headlinestring | nullProfessional headline
locationstring | nullSelf-reported location
skillsstring[]Up to 20 skills from the candidate's profile
experience_yearsinteger | nullSelf-reported years of experience
updated_atISO 8601When the profile was last updated

Notes

  • Results are ordered by updatedAt descending (most recently active first).
  • Candidates who have disabled discoverable or aiMatching in their privacy settings are excluded.
  • This endpoint counts towards the standard rate limit window (60 seconds).