NUWAY API

Leads

A lead is one customer visit (a chat, a presentation or a call), scored by NUWAY for buying intent. These are the same leads you see in the dashboard.

List leads

GET /api/v1/external/leads Offset pagination

Leads with filters and sorting.

Query parameters

NameDescription
rank stringhot, interested, buy, cold, unsubscribed
search stringMatches name, email, phone or product
needs_attention booleantrue for leads waiting on a follow-up
highlighted_only booleantrue for visits where the customer showed real buying interest
sort stringrecent (default), intent (highest buying intent first), priority
limit integer1–200, default 50
offset integerDefault 0

Example request

curl "https://ai.nuway.co/api/v1/external/leads?rank=hot&sort=intent&limit=10" \
  -H "X-API-KEY: $NUWAY_API_KEY"
// Node.js 18+. Uses top-level await: save as .mjs (or set "type": "module").
const res = await fetch("https://ai.nuway.co/api/v1/external/leads?rank=hot&sort=intent&limit=10", {
  method: "GET",
  headers: {
    "X-API-KEY": process.env.NUWAY_API_KEY
  }
});
const data = await res.json();
import os
import requests
r = requests.get(
    "https://ai.nuway.co/api/v1/external/leads?rank=hot&sort=intent&limit=10",
    headers={"X-API-KEY": os.environ["NUWAY_API_KEY"]},
    timeout=30,
)
r.raise_for_status()
data = r.json()

Response

{
  "items": [
    {
      "lead_id": "e3863d86-da23-4a7e-80de-3d68271e8705",
      "name": "Jane Doe",
      "email": "[email protected]",
      "phone": null,
      "country": "United Kingdom",
      "product_name": "Private Office",
      "rank": "hot",
      "rank_label": "Hot Lead",
      "score": 82,
      "crm_status": "OPEN",
      "session_type": "chat",
      "questions_asked": 6,
      "first_seen": "2026-10-10T14:20:49.625106Z",
      "last_session_at": "2026-10-10T14:20:49.625106Z",
      "last_contacted_at": null,
      "needs_attention": true,
      "attention_reason": "Never contacted since the first session — reach out while interest is fresh.",
      "unsubscribed": false,
      "highlighted": true
    }
  ],
  "total": 37,
  "limit": 10,
  "offset": 0,
  "has_more": true
}

Response fields

NameDescription
lead_idThe lead's ID.
name, email, phone, countryWhat the customer shared. Anonymous visits have these empty.
product_nameThe product the visit was about, if any.
rank, rank_labelhot, interested, buy or cold.
scoreBuying intent, 0–100.
crm_statusYour pipeline status: OPEN, WON, LOST, MEETING_SET.
session_typechat, presenter (AI presentation) or call.
questions_askedQuestions the customer asked during the visit.
first_seen, last_session_at, last_contacted_atTimestamps.
needs_attention, attention_reasonWhether, and why, the lead is waiting on your team.
revenue_amountRevenue you recorded for the lead.
unsubscribedThe customer asked not to be contacted.
highlightedThe customer showed real buying interest in this visit.

Get a lead

GET /api/v1/external/leads/{lead_id}

One lead in detail: every field from the list, plus the ones below.

Path parameters

NameDescription
lead_id string requiredThe lead's ID.

Example request

curl "https://ai.nuway.co/api/v1/external/leads/{lead_id}" \
  -H "X-API-KEY: $NUWAY_API_KEY"
// Node.js 18+. Uses top-level await: save as .mjs (or set "type": "module").
const res = await fetch("https://ai.nuway.co/api/v1/external/leads/{lead_id}", {
  method: "GET",
  headers: {
    "X-API-KEY": process.env.NUWAY_API_KEY
  }
});
const data = await res.json();
import os
import requests
r = requests.get(
    "https://ai.nuway.co/api/v1/external/leads/{lead_id}",
    headers={"X-API-KEY": os.environ["NUWAY_API_KEY"]},
    timeout=30,
)
r.raise_for_status()
data = r.json()

Response

NameDescription
sessionsThe visit, with its products and scoring.
timelineEvents in order: the visit, contacts, status changes.
notes, tasks, contact_logsYour team's notes, follow-up tasks and logged contacts.
contactThe person behind the lead, with totals across all their visits.

Errors 404 when the lead doesn't exist or isn't yours.