Skip to main content

Create Lead

POST/api/v1/public/leads/

Used to submit a new lead (a potential order).

Auth: Provider API Key (Bearer). See Authentication.

:::info Idempotency external_id must be unique per provider — this prevents duplicate leads (it is the idempotency key). :::

Body fields

FieldTypeRequiredDescription
external_idStringRequiredUnique ID on the provider side (must not repeat)
first_nameStringRequiredCustomer's first name
last_nameStringRequiredCustomer's last name
emailString (email)RequiredCustomer's email
phone_numberStringRequiredPrimary phone number
origin_cityStringRequiredPickup city
origin_stateInteger (ID)RequiredNavigo state ID — state lookup
origin_zipStringRequiredPickup ZIP code
destination_cityStringRequiredDelivery city
destination_zipStringTODO: verifyDelivery ZIP (present in sample)
estimated_ship_dateDate YYYY-MM-DDRequiredEstimated ship date
vehiclesArray<Vehicle>RequiredAt least 1 vehicle (see below)
company_nameStringOptionalCompany name
note_from_shipperStringOptionalNote from the customer

:::warning TODO: verify — destination_zip destination_zip appears in the request sample, but whether it is required must be confirmed against the backend serializer. Check with the Navigo backend team. :::

Vehicle object

vehicles is an array of at least one vehicle. Each element:

FieldTypeRequiredDescription
yearIntegerRequiredModel year
makeStringRequiredMake (Toyota, Tesla…)
modelStringRequiredModel (Camry, Model S…)
typeString (enum)RequiredVehicle type enum
tariffIntegerRequiredShipping price
depositIntegerRequiredDown payment
vehicle_runBooleanTODO: verifyWhether the vehicle runs (sample has true)

:::warning TODO: verify — vehicle_run vehicle_run appears as true in the request sample, but it was not in the HTML table. Confirm the field name and whether it is required with the backend. :::

Request sample

{
"external_id": "lead_998123A",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"phone_number": "+1234567890",
"origin_city": "Los Angeles",
"origin_state": 5,
"origin_zip": "90001",
"destination_city": "New York",
"destination_zip": "10001",
"estimated_ship_date": "2026-06-15",
"company_name": "Doe Logistics",
"note_from_shipper": "Call before pickup",
"vehicles": [
{
"year": 2023,
"make": "Tesla",
"model": "Model S",
"type": "CAR",
"tariff": 1200,
"deposit": 200,
"vehicle_run": true
}
]
}

Response — 201 Created

Expected response shape (matches the get-lead response):

{
"id": 1042,
"order_number": "00001042-XT",
"state": "LEAD",
"lead_status": "LEAD",
"external_id": "lead_998123A"
}

:::note TODO: verify — create response body The exact create-response body depends on the backend serializer. If it differs, confirm with the backend team and update this section. :::

Code samples

curl -X POST https://api.navigo.example/api/v1/public/leads/ \
-H "Authorization: Bearer $NAVIGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"external_id": "lead_998123A",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"phone_number": "+1234567890",
"origin_city": "Los Angeles",
"origin_state": 5,
"origin_zip": "90001",
"destination_city": "New York",
"destination_zip": "10001",
"estimated_ship_date": "2026-06-15",
"vehicles": [{"year":2023,"make":"Tesla","model":"Model S","type":"CAR","tariff":1200,"deposit":200}]
}'

Possible errors

StatusReason
400Validation error or duplicate external_id
401API key is invalid or expired
429Rate limit exceeded (60/min, 2000/day)

Full format: Errors.