Skip to main content

Search

The Search endpoints let you find relevant past jobs, outcomes, and intake records by describing what you’re looking for in natural language. The platform uses hybrid search, combining meaning-based matching with keyword retrieval, to surface relevant results even when terminology differs.

POST /search/outcomes

Search across AI-enriched job outcomes. This is the primary search endpoint for finding jobs by what happened, what was done, or what the result was. Request body:

POST /search/outcomes/enriched

Semantic search over job outcomes with relationship enrichment from the intelligence layer. Same request body and filters as POST /search/outcomes. Adds related_works grouped by job type, engineer, and site for each hit set. Request body: Response fields:
Use cases:
  • Fault resolution: Find similar past fixes and see completion patterns for that job type.
  • Engineer fit: Check whether engineers on matched outcomes have history with the customer or fault class.
  • Site risk: Surface repeat failures at the site alongside semantically similar outcomes.
Notes:
  • Slower than /search/outcomes due to relationship enrichment (~500ms–1s additional).
  • related_works keys are derived from returned hits only, not the full matching corpus.
  • Returns 502 if semantic search or enrichment fails.

POST /search/intake

Search across raw job intake text, the original fault descriptions as entered by dispatchers or customers. Request body:

POST /search/intake/enriched

Semantic search over job intake text with relationship enrichment, returns richer context by joining linked records to each result. Request body:

GET /search/autocomplete

Fuzzy / phonetic / email-aware lookup across contacts, persons (site contacts and account holders), engineers, jobs, and taxonomy entities. Returns results grouped by entity type plus a flat results[] array for back-compat. Query parameters: Search capabilities:
  • Name / phonetic: Smyth finds Smith; PureGym finds Pure Gym
  • Email: type a full or partial email (ric@vezzahub.com, ric@) to find the matching person directly. Results carry matchedVia: "email".
  • UUID / personId: paste a standard UUID to resolve the person directly via their ids array. Returns matchedVia: "person_id" with score 1.0.
  • Postcode: UK postcodes with or without a space (NN10 5AB / NN105AB)
  • Reference: job reference or order number prefix
  • Numeric id: bare integer resolves contactId, resourceId, or jobId
The response groups results under groups.contacts, groups.people, groups.engineers, groups.jobs, groups.jobTypes, groups.jobCategories, groups.contactGroups, and groups.resourceGroups. Each result includes a matchedVia field indicating why it was returned (name, email, person_id, postcode, phonetic, reference, id, site_bridge, etc.). Use cases:
  • Typeahead UI: Power customer, site, and job pickers in dispatch or ingest review screens.
  • Email entity resolution: Resolve portal payloads to contact_id and site_key before POST /ingest/email/portal.
  • Connie grounding: Disambiguate names or postcodes before semantic search or graph queries.
Notes:
  • Minimum query length is 2 characters. Accepts any entity Id such as contact, job, job_group_id, reference, resource etc
  • Use GET /search/autocomplete/diagnose when all groups return empty (index health).

GET /search/autocomplete/diagnose

Health check for the autocomplete index pipeline (always returns 200; inspect missing, populating, advice). Query parameters:

POST /search/summary-sections

Hybrid search across Customer Summary knowledge sections. Each customer can have up to seven modular sections (overview, job history, equipment, analyses, performance, communication, risk). Each section is indexed independently so you can search one dimension or all of them. Results are ranked without an LLM call. Request body:

GET /search/summary-sections/by-contact//

Return the full stored Customer Summary for one contact (all sections). Use when you need the complete account brief in a single call rather than a ranked search.
Summaries are generated from the operational graph and refreshed incrementally by the account summary pipeline. See Operational discovery for how summaries stay current in Connie sessions.