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
| Surface | Operation |
|---|---|
| REST | None |
| GraphQL | aiInsights, aiProposals, aiTranslateQuery, aiAnswer queries · approveProposal, editProposal, rejectProposal mutations |
| Realtime | aiProposals subscription: new proposals stream as they are raised |
| MCP | None |
Example
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" }
}'