Skip to main content

AI and anomalies

The model works for the project in three places: detection that says when an event left its baseline, proposals that say what to do about what it saw, and Ask, which turns a question into a query. None of it acts alone: a proposal becomes real only when a person approves it.

At a glance

Detection
Daily counts against a fourteen-day baseline
Proposals
Origin, rationale, and a recorded human decision
Ask
Question to query, query kept on screen
Model
Chosen by the plan, per tier
Auth
Access token; nothing executes unapproved
  • Detection compares daily counts to a fourteen-day baseline; the deviation is arithmetic, not opinion.
  • Every proposal carries its origin and rationale, and its decision is recorded with who made it.
  • Ask's translated query stays on screen; which model answers is the plan's choice.

How it works

Detection is arithmetic over the warehouse: a day whose count deviates from the fourteen-day baseline past the threshold is an insight, marked as a spike or a drop. A deviation worth acting on, or a pattern in support threads, becomes a proposal: a cohort to build, a flag to add, a message to send, or a dashboard to create, each carrying what it saw and why it suggests what it does. Proposals queue in the Inbox until a person approves, edits or rejects them, and the decision is stored with its decider. Ask is the third piece: the model emits only the validated query language, never free SQL, and its translation stays on screen beside the answer. The broader model story, entitlements and safety posture live on the AI pillar.

Where to reach it

SurfaceOperation
RESTNone
GraphQLaiInsights, aiProposals, aiTranslateQuery, aiAnswer queries · approveProposal, editProposal, rejectProposal mutations
RealtimeaiProposals subscription: new proposals stream as they are raised
MCPNone

Example

Bash
curl "https://api.prodantix.com/graphql" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "query ($p: String!, $e: String!, $f: String!, $t: String!) { aiInsights(projectId: $p, event: $e, from: $f, to: $t, threshold: 0.3) { bucket kind value baseline } }",
    "variables": { "p": "'$PROJECT_ID'", "e": "signup_completed", "f": "2026-08-01", "t": "2026-08-28" }
  }'