curl --request POST \
--url https://app.leonar.app/api/v1/projects/{id}/entries \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contact_id": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
"stage_id": "e5f6a7b8-9012-34cd-efab-567890123def",
"custom_variables": {
"custom_variable_1": "Per-contact value"
}
}
'import requests
url = "https://app.leonar.app/api/v1/projects/{id}/entries"
payload = {
"contact_id": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
"stage_id": "e5f6a7b8-9012-34cd-efab-567890123def",
"custom_variables": { "custom_variable_1": "Per-contact value" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contact_id: 'a1b2c3d4-5678-90ab-cdef-1234567890ab',
stage_id: 'e5f6a7b8-9012-34cd-efab-567890123def',
custom_variables: {custom_variable_1: 'Per-contact value'}
})
};
fetch('https://app.leonar.app/api/v1/projects/{id}/entries', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.leonar.app/api/v1/projects/{id}/entries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'contact_id' => 'a1b2c3d4-5678-90ab-cdef-1234567890ab',
'stage_id' => 'e5f6a7b8-9012-34cd-efab-567890123def',
'custom_variables' => [
'custom_variable_1' => 'Per-contact value'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.leonar.app/api/v1/projects/{id}/entries"
payload := strings.NewReader("{\n \"contact_id\": \"a1b2c3d4-5678-90ab-cdef-1234567890ab\",\n \"stage_id\": \"e5f6a7b8-9012-34cd-efab-567890123def\",\n \"custom_variables\": {\n \"custom_variable_1\": \"Per-contact value\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.leonar.app/api/v1/projects/{id}/entries")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"contact_id\": \"a1b2c3d4-5678-90ab-cdef-1234567890ab\",\n \"stage_id\": \"e5f6a7b8-9012-34cd-efab-567890123def\",\n \"custom_variables\": {\n \"custom_variable_1\": \"Per-contact value\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.leonar.app/api/v1/projects/{id}/entries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"contact_id\": \"a1b2c3d4-5678-90ab-cdef-1234567890ab\",\n \"stage_id\": \"e5f6a7b8-9012-34cd-efab-567890123def\",\n \"custom_variables\": {\n \"custom_variable_1\": \"Per-contact value\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"stage": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"rating": 123,
"notes": "<string>",
"rejection_reason_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"moved_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"custom_variables": {
"custom_variable_1": "<string>",
"custom_variable_2": "<string>",
"custom_variable_3": "<string>",
"custom_variable_4": "<string>",
"custom_variable_5": "<string>"
},
"project_variables": {
"project_variable_1": "<string>",
"project_variable_2": "<string>",
"project_variable_3": "<string>",
"project_variable_4": "<string>",
"project_variable_5": "<string>"
},
"contact": {
"id": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
"first_name": "Sophie",
"last_name": "Martin",
"title": "Senior Software Engineer",
"current_company": "Doctolib",
"location": "Paris, France",
"linkedin_profile": "https://www.linkedin.com/in/sophie-martin",
"emails": [
{
"email": "sophie@doctolib.com",
"type": "work"
}
],
"phones": [
{
"phone": "+33612345678",
"type": "personal"
}
],
"tags": [
"frontend",
"senior"
],
"global_status": "new",
"source": "linkedin",
"summary": null,
"skills": [
"React",
"TypeScript",
"Node.js"
],
"languages": [
"French",
"English"
],
"years_experience": 8,
"custom_data": {
"industry_code": "A12",
"vip": true
},
"do_not_contact": false,
"created_at": "2025-01-15T10:30:00Z",
"updated_at": "2025-01-20T14:00:00Z",
"last_contacted_at": null,
"archived_at": null
}
}
}{
"error": {
"code": "validation_error",
"message": "Invalid input"
}
}{
"error": {
"code": "invalid_api_key",
"message": "Invalid API key"
}
}{
"error": {
"code": "not_found",
"message": "Resource not found"
}
}Add contact to pipeline
Adds an existing contact to a project’s pipeline.
If stage_id is omitted, the contact is added to the first stage of
the project’s pipeline. To add directly to a stage such as Sourced,
first retrieve the stage ID with GET /projects/{id}, then pass that
UUID as stage_id.
custom_variables stores per-contact sequence values on this pipeline
entry. Project variables such as project_variable_1 are shared by all
entries in the project and cannot be set here; update them with
PUT /projects/{id} using the project_variables object.
curl --request POST \
--url https://app.leonar.app/api/v1/projects/{id}/entries \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contact_id": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
"stage_id": "e5f6a7b8-9012-34cd-efab-567890123def",
"custom_variables": {
"custom_variable_1": "Per-contact value"
}
}
'import requests
url = "https://app.leonar.app/api/v1/projects/{id}/entries"
payload = {
"contact_id": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
"stage_id": "e5f6a7b8-9012-34cd-efab-567890123def",
"custom_variables": { "custom_variable_1": "Per-contact value" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contact_id: 'a1b2c3d4-5678-90ab-cdef-1234567890ab',
stage_id: 'e5f6a7b8-9012-34cd-efab-567890123def',
custom_variables: {custom_variable_1: 'Per-contact value'}
})
};
fetch('https://app.leonar.app/api/v1/projects/{id}/entries', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.leonar.app/api/v1/projects/{id}/entries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'contact_id' => 'a1b2c3d4-5678-90ab-cdef-1234567890ab',
'stage_id' => 'e5f6a7b8-9012-34cd-efab-567890123def',
'custom_variables' => [
'custom_variable_1' => 'Per-contact value'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.leonar.app/api/v1/projects/{id}/entries"
payload := strings.NewReader("{\n \"contact_id\": \"a1b2c3d4-5678-90ab-cdef-1234567890ab\",\n \"stage_id\": \"e5f6a7b8-9012-34cd-efab-567890123def\",\n \"custom_variables\": {\n \"custom_variable_1\": \"Per-contact value\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.leonar.app/api/v1/projects/{id}/entries")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"contact_id\": \"a1b2c3d4-5678-90ab-cdef-1234567890ab\",\n \"stage_id\": \"e5f6a7b8-9012-34cd-efab-567890123def\",\n \"custom_variables\": {\n \"custom_variable_1\": \"Per-contact value\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.leonar.app/api/v1/projects/{id}/entries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"contact_id\": \"a1b2c3d4-5678-90ab-cdef-1234567890ab\",\n \"stage_id\": \"e5f6a7b8-9012-34cd-efab-567890123def\",\n \"custom_variables\": {\n \"custom_variable_1\": \"Per-contact value\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"stage": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"rating": 123,
"notes": "<string>",
"rejection_reason_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"moved_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"custom_variables": {
"custom_variable_1": "<string>",
"custom_variable_2": "<string>",
"custom_variable_3": "<string>",
"custom_variable_4": "<string>",
"custom_variable_5": "<string>"
},
"project_variables": {
"project_variable_1": "<string>",
"project_variable_2": "<string>",
"project_variable_3": "<string>",
"project_variable_4": "<string>",
"project_variable_5": "<string>"
},
"contact": {
"id": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
"first_name": "Sophie",
"last_name": "Martin",
"title": "Senior Software Engineer",
"current_company": "Doctolib",
"location": "Paris, France",
"linkedin_profile": "https://www.linkedin.com/in/sophie-martin",
"emails": [
{
"email": "sophie@doctolib.com",
"type": "work"
}
],
"phones": [
{
"phone": "+33612345678",
"type": "personal"
}
],
"tags": [
"frontend",
"senior"
],
"global_status": "new",
"source": "linkedin",
"summary": null,
"skills": [
"React",
"TypeScript",
"Node.js"
],
"languages": [
"French",
"English"
],
"years_experience": 8,
"custom_data": {
"industry_code": "A12",
"vip": true
},
"do_not_contact": false,
"created_at": "2025-01-15T10:30:00Z",
"updated_at": "2025-01-20T14:00:00Z",
"last_contacted_at": null,
"archived_at": null
}
}
}{
"error": {
"code": "validation_error",
"message": "Invalid input"
}
}{
"error": {
"code": "invalid_api_key",
"message": "Invalid API key"
}
}{
"error": {
"code": "not_found",
"message": "Resource not found"
}
}Authorizations
API key starting with leo_
Path Parameters
Project ID
Body
Optional pipeline stage UUID. Defaults to the first stage of the project pipeline.
Deprecated. This field is accepted for compatibility but is not persisted on project pipeline entries.
Deprecated. This field is accepted for compatibility but is not persisted on project pipeline entries.
Per-contact sequence variables stored on a pipeline entry or enrollment.
Show child attributes
Show child attributes
Response
Entry created
Show child attributes
Show child attributes