API Reference

Profiles

Search verified public profiles, inspect profile detail, and discover who can be contacted through Markidy.

GET /v1/profiles/search

Search verified public profiles. Search matches profile name, bio plain text, indexed career company/title fields, and public recruiting role, skill, and location fields. The default sort is relevance.

Query Parameters

ParameterTypeDescription
qstringFree text search over name, bio, career, and public recruiting terms
sortstringrelevance (default), trust, recent, posts
countrystringCountry codes, comma-separated. Example: us,gb
hasCareerbooleanUse true or 1 to return only profiles with career history
openTostringactively_looking, open_to_offers, not_looking, hiring_only
rolesstringDesired role tags, comma-separated. Values inside this parameter are OR matches
skillsstringSkill tags, comma-separated. Values inside this parameter are OR matches
senioritystringintern, junior, mid, senior, lead, executive
workModestringremote, hybrid, onsite, flexible
availabilitystringimmediately, one_month, three_months, not_specified
minExperienceMonthsintegerMinimum total career experience in months
maxExperienceMonthsintegerMaximum total career experience in months
locationstringText match against public preferred work location name or address
pageintegerPage number. Default: 1
pageSizeintegerPage size. Default: 18, max: 50
Request
curl "https://api.markidy.com/v1/profiles/search?roles=Product%20Manager&skills=nodejs&sort=relevance" \
  -H "Authorization: Bearer mk_your_api_key"

Search Behavior

Comma-separated values inside one filter are OR matches. Different filters are AND matches. Recruiting filters only apply to profiles where public recruiting info is visible.
roles and skills use the recruiting tag index. Formatting variants such as Node.js, nodejs, and node can match, but semantic aliases such as PM and Product Manager are not automatically expanded.
Response
{
  "profiles": [
    {
      "userId": "usr_123",
      "name": "Bennett Cross",
      "avatar": null,
      "country": "us",
      "verifiedLevel": 1,
      "memberSince": "2026-04-01T00:00:00.000Z",
      "bioSnippet": "Founder building AI workflows for operators.",
      "topCareer": {
        "title": "Founder",
        "company": "Team daco",
        "startDate": "2025-02",
        "endDate": null,
        "isCurrent": true
      },
      "visibleListingCount": 3,
      "desiredRoles": ["Product Manager"],
      "recruitingSummary": {
        "openTo": "actively_looking",
        "desiredRoles": ["Product Manager"],
        "skills": ["Node.js"],
        "seniority": "senior",
        "workMode": "remote",
        "availability": "immediately",
        "preferredLocations": [
          { "name": "London", "address": "London, UK" }
        ],
        "careerTotalMonths": 84,
        "contactPolicy": "verified_only"
      }
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 18,
  "hasMore": false
}

Response Fields

FieldTypeDescription
profiles[].userIdstringProfile owner user ID
profiles[].namestringPublic display name
profiles[].avatarstring | nullAvatar URL when configured
profiles[].countrystringProfile country code
profiles[].verifiedLevelintegerVerification level for trust ranking
profiles[].memberSincestringISO 8601 user creation timestamp
profiles[].bioSnippetstringPlain-text bio excerpt
profiles[].topCareerobject | nullMost relevant current or recent career item
profiles[].visibleListingCountintegerNumber of active or paused public listings
profiles[].desiredRolesstring[]Public desired role tags used by profile cards
profiles[].recruitingSummaryobject | nullPublic recruiting summary when visible, otherwise null
totalintegerTotal matching profiles
pageintegerCurrent page number
pageSizeintegerReturned page size
hasMorebooleanWhether another page is available

Recruiting Summary Fields

FieldTypeDescription
openTostring | nullCurrent recruiting status
desiredRolesstring[]Role tags shown exactly as the profile owner entered them
skillsstring[]Skill tags shown exactly as the profile owner entered them
senioritystring | nullPreferred seniority level
workModestring | nullPreferred work mode
availabilitystring | nullAvailability to start or consider a role
preferredLocationsobject[]Public preferred work locations with name and address
careerTotalMonthsinteger | nullTotal calculated career experience in months
contactPolicystring | nullall_recruiters or verified_only
GET /v1/profiles/{userId}

Get public profile detail including socials, careers, active contact channels, public recruiting preferences, trust links, and your existing request state for that profile.

Request
curl https://api.markidy.com/v1/profiles/usr_123 \
  -H "Authorization: Bearer mk_your_api_key"
Response
{
  "profile": {
    "userId": "usr_123",
    "name": "Bennett Cross",
    "avatar": null,
    "bio": "Founder building AI workflows for operators.",
    "country": "us",
    "careerTotalMonths": 84,
    "verifiedLevel": 1,
    "memberSince": "2026-04-01T00:00:00.000Z",
    "socials": {
      "github": "https://github.com/example",
      "linkedin": "https://linkedin.com/in/example"
    },
    "activeChannels": ["markidy"],
    "recruitingPreferences": {
      "openTo": "actively_looking",
      "targetRoles": ["Product Manager"],
      "skills": ["Node.js"],
      "seniority": "senior",
      "workMode": "remote",
      "preferredLocations": [
        {
          "name": "London",
          "address": "London, UK",
          "lat": 51.5072,
          "lng": -0.1276,
          "placeId": "..."
        }
      ],
      "timezone": "Europe/London",
      "availability": "immediately",
      "compensation": "$120k+",
      "contactPolicy": "verified_only",
      "careerTotalMonths": 84
    },
    "trustLinks": [
      {
        "title": "Resume",
        "url": "https://example.com/resume"
      },
      {
        "title": "Research paper",
        "url": "https://example.com/research/agent-workflows"
      },
      {
        "title": "Portfolio case study",
        "url": "https://example.com/portfolio/agent-workflows"
      }
    ],
    "profileRequestPolicy": {
      "contactPolicy": "verified_only",
      "requiredVerifiedLevel": 1,
      "canRequest": true,
      "reason": null
    },
    "myProfileRequest": null,
    "careers": [
      {
        "company": "Team daco",
        "title": "Founder",
        "startDate": "2025-02",
        "endDate": null,
        "isCurrent": true,
        "description": "Building Markidy."
      }
    ]
  }
}

Response Fields

FieldTypeDescription
profile.userIdstringProfile owner user ID
profile.namestringPublic display name
profile.avatarstring | nullAvatar URL when configured
profile.biostringPlain-text public bio
profile.countrystringProfile country code
profile.careerTotalMonthsinteger | nullTotal calculated career experience in months
profile.verifiedLevelintegerVerification level
profile.memberSincestringISO 8601 user creation timestamp
profile.socialsobjectPublic social account URLs when configured
profile.activeChannelsstring[]Profile request channels that can currently receive requests
profile.recruitingPreferencesobject | nullPublic recruiting preferences when visible, otherwise null
profile.trustLinksobject[]Public recruiting evidence links with title and url. Empty when recruiting info is hidden.
profile.profileRequestPolicyobjectWhether the current viewer can send a profile request
profile.myProfileRequestobject | nullYour existing profile request to this user, if any
profile.careersobject[]Public career history

Recruiting Preference Fields

FieldTypeDescription
openTostring | nullCurrent recruiting status
targetRolesstring[]Desired role tags
skillsstring[]Recruiting skill tags
senioritystring | nullPreferred seniority level
workModestring | nullPreferred work mode
preferredLocationsobject[]Google Places-style location objects with name, address, lat, lng, and placeId
timezonestring | nullIANA timezone when provided
availabilitystring | nullAvailability to start or consider a role
compensationstring | nullFree-text compensation expectation
contactPolicystring | nullall_recruiters or verified_only
careerTotalMonthsinteger | nullTotal calculated career experience in months

Profile Request Policy

FieldTypeDescription
contactPolicystring | nullRecruiting contact rule configured by the profile owner
requiredVerifiedLevelinteger | nullRequired viewer verification level, or null when no extra level is required
canRequestbooleanWhether the current API key user can send a profile request
reasonstring | nullHuman-readable reason when the viewer cannot send a request
recruitingPreferences is null when the profile owner disabled public recruiting info. trustLinks is empty in the same case. profileRequestPolicy is still returned so clients can explain whether the viewer can send a request. Use Match Requests for profile request creation, status updates, and conversation flow.