curl --request GET \
--url https://{host}/primula/api/v3/leads \
--header 'Authorization: Bearer <token>'import requests
url = "https://{host}/primula/api/v3/leads"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{host}/primula/api/v3/leads', 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://{host}/primula/api/v3/leads",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{host}/primula/api/v3/leads"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{host}/primula/api/v3/leads")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{host}/primula/api/v3/leads")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body[
{
"lead_id": "44444444-4444-4444-8444-444444444444",
"first_name": "Example",
"last_name": "Lead"
}
]List leads
Scoped to company_id; the handler does not restrict this read to the session school assignments. Returns paginated lead rows, or paginated LeadStages objects when view=stages.
Normal lookup precedence is ids, then query, then the filtered school collection. ids is limited to 200 UUIDs and missing IDs are omitted. query performs a name search with optional max_results. status, date_from/date_to and age_min/age_max are validated before these branches but only filter the normal school collection; ids and query bypass those filters. Negative ages are accepted for expected children. The age interval defaults to -12 through 180 months. date_to cannot precede date_from, and age_max cannot be smaller than age_min.
view=stages requires the school in the session assignments and accepts only company_id, school_id, view, page and per_page. Any other parameter in this view returns 400.
curl --request GET \
--url https://{host}/primula/api/v3/leads \
--header 'Authorization: Bearer <token>'import requests
url = "https://{host}/primula/api/v3/leads"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://{host}/primula/api/v3/leads', 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://{host}/primula/api/v3/leads",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://{host}/primula/api/v3/leads"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://{host}/primula/api/v3/leads")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://{host}/primula/api/v3/leads")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body[
{
"lead_id": "44444444-4444-4444-8444-444444444444",
"first_name": "Example",
"last_name": "Lead"
}
]Authorizations
Access token issued by POST /sessions and associated with a valid server-side session.
Query Parameters
Company UUID. Must equal the authenticated session company when that session has a company assigned; the equality check is skipped for sessions without one.
School UUID.
Omit for lead rows; stages includes per-stage timestamps.
stages Select response properties. Unknown names return 400. Normal lead representation only; names are case-sensitive. Accepts repeated query parameters or comma-separated values; empty entries are dropped and surrounding whitespace is trimmed.
lead_id, monday_item_id, first_name, last_name, school_id, school_name, status, date_of_birth, current_age, intended_start_date, periods_lead_room_available, parent1_name, parent1_email, parent1_mobile, created_at, updated_at, available_space, source, intellikid_status, intellikid_children_status, intellikid_lead_status, intellikid_source, notes, student_status, onboarding_status, ems_status, start_date, withdrawal_date, lineleader_child_id, lineleader_family_id, lineleader_center_id, lineleader_center_name, lineleader_status, lineleader_classroom, stage_inquiry_call_completed, stage_tour_completed, stage_not_viable, stage_not_interested, stage_no_response, stage_no_response_timed_out, is_crm_intended_start_date, lead_to_enrollment_date, age_at_start_date_months, age_at_lead_created_at_months, alerts Read at most 200 lead UUIDs; takes precedence over query. Accepts repeated query parameters or comma-separated values; empty entries are dropped and surrounding whitespace is trimmed.
200Name search; used only when ids is omitted.
Maximum name-search results; 0 keeps the backend default.
x >= 0Procare lead status; exact case required. Applies only to normal school collection.
New, Contacted, Tour Scheduled, Tour Completed, Tour No Show, Discovery Day Scheduled, Discovery Day Completed, Discovery Day No Show, Waitlisted, Enrolled, Lost, No Status Inclusive start date in YYYY-MM-DD. Optional created-date window for the normal school collection.
Inclusive end date in YYYY-MM-DD. Optional created-date window for the normal school collection.
Minimum child age in months; normal school collection only.
Maximum child age in months; normal school collection only.
One-based page number.
x >= 1Items per page; values greater than 500 are clamped to 500.
x >= 1Response
Successful response.
- Option 1 · object[]
- Option 2 · object[]
- Option 3 · object[]
Lead.
Lead id.
Monday item id.
School id.
Child age in months.
Show child attributes
Show child attributes
Stage value as a string in the read representation; PATCH uses a boolean.
Stage value as a string in the read representation; PATCH uses a boolean.
Stage value as a string in the read representation; PATCH uses a boolean.
Stage value as a string in the read representation; PATCH uses a boolean.
Stage value as a string in the read representation; PATCH uses a boolean.
Stage value as a string in the read representation; PATCH uses a boolean.
Show child attributes
Show child attributes