Skip to main content
POST
/
sourcing
/
add-to-project
Add profiles to project
curl --request POST \
  --url https://app.leonar.app/api/v1/sourcing/add-to-project \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "profiles": [
    {
      "profile_id": "ACwAABrjaVMBOLcCrV5aEw1zCAjE_zec6PbnU1A",
      "first_name": "Sophie",
      "last_name": "Martin",
      "headline": "Senior Software Engineer at Doctolib",
      "picture_url": "https://media.licdn.com/dms/image/example.jpg",
      "location": "Paris, Île-de-France, France",
      "linkedin_url": "https://www.linkedin.com/in/sophie-martin",
      "summary": "Experienced engineer with 8 years in full-stack development...",
      "current_job": {
        "title": "Senior Software Engineer",
        "company_name": "Doctolib"
      },
      "experiences": [
        {
          "title": "Senior Software Engineer",
          "company_name": "Doctolib",
          "start_date": "2021-03-01",
          "end_date": null,
          "description": "Leading backend team, Python/Django stack...",
          "is_current": true
        },
        {
          "title": "Software Engineer",
          "company_name": "Criteo",
          "start_date": "2018-01-01",
          "end_date": "2021-02-28",
          "description": "Built real-time bidding systems in Python...",
          "is_current": false
        }
      ],
      "educations": [
        {
          "educational_establishment": "École Polytechnique",
          "diploma": "Master of Engineering",
          "specialization": "Computer Science",
          "start_date": "2014-09-01",
          "end_date": "2018-06-30"
        }
      ],
      "skills": [
        "Python",
        "Django",
        "TypeScript",
        "PostgreSQL"
      ],
      "total_years_experience": 8.2,
      "already_in_project": false,
      "existing_contact_id": null
    }
  ],
  "account_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
  "resolve_names": false
}
'
{
  "data": {
    "added": 5,
    "skipped": 2,
    "contact_ids": [
      "a1b2c3d4-5678-90ab-cdef-1234567890ab",
      "b2c3d4e5-6789-01ab-cdef-234567890abc",
      "c3d4e5f6-7890-12ab-cdef-345678901bcd",
      "d4e5f6a7-8901-23bc-defa-456789012cde",
      "e5f6a7b8-9012-34cd-efab-567890123def"
    ],
    "skipped_profiles": [
      {
        "profile_id": "urn:li:member:123456",
        "reason": "already_in_project"
      },
      {
        "profile_id": "urn:li:member:789012",
        "reason": "already_in_project"
      }
    ],
    "stage": {
      "id": "f6a7b8c9-0123-45de-fabc-678901234ef0",
      "name": "Sourced",
      "category": "sourced"
    }
  }
}

Authorizations

Authorization
string
header
required

API key starting with leo_

Body

application/json
project_id
string<uuid>
required

Target project ID. Profiles are added to the first stage of this project's pipeline.

profiles
object[]
required

Profile objects from search results. Pass them directly from the search response for maximum data capture. Key fields that enrich the contact record:

  • experiences → stored as work history (positions)
  • educations → stored as education history (schools)
  • skills → stored as skills list
  • summary → stored as professional bio
  • picture_url → stored as contact avatar
  • location → stored as contact location
  • current_job → sets the contact's job title and company
Required array length: 1 - 100 elements
account_id
string<uuid>

Connected LinkedIn account ID. Required when resolve_names is true. Get it from GET /connected-accounts.

resolve_names
boolean
default:false

When true, automatically resolves missing first_name/last_name via LinkedIn profile lookup for profiles that have a linkedin_url. Requires account_id. Recommended when using LinkedIn Classic search results which often return null names.

Response

Profiles added

data
object