Get the project growth definition + templates + candidate events
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Responses
Section titled “Responses”{ definition, draft, templates, analysisSubjects, events }. Some keys are dynamic — Envelope is FIXED: {definition, draft, templates, analysisSubjects, events}. definition is null when the project has never saved one. definition’s own columns are a fixed schema, BUT its four JSON columns (northStarMetric / aarrrStages / defaultFunnel / defaultRetention) are typed only as Record<string,unknown> / Array<Record<string,unknown>> in the repo layer and are stored as raw JSON text columns. On the WRITE path only aarrrStages is structurally validated (stageSchema, exactly 5 items) — the other three go through z.record(z.string(), z.unknown()) and are stored verbatim. The shapes the app itself writes (from createGrowthDefinitionDraft) are documented below as the observed/typical shape, but the API cannot guarantee them for pre-existing rows, so they are kept permissive. Timestamp formats differ and this is a real inconsistency, not an oversight in this doc: publishedAt is written via new Date().toISOString() (RFC3339 with ms, e.g. “2026-07-24T10:11:12.345Z”) or null; createdAt/updatedAt default to SQLite CURRENT_TIMESTAMP and are stored as TEXT in “YYYY-MM-DD HH:MM:SS” (UTC, space separator, no timezone suffix) — NOT ISO-8601 with a T/Z.
object
object
Must match /^properties(.[a-zA-Z0-9_]+)+$/ when set.
Free-form JSON column; not validated on write beyond “object or null”. Shape written by this app: {label: string, aggregation: “count”|“sum”, scope: GrowthAnalysisSubject, eventName: string|null, propertyPath: string|null}.
object
Exactly 5 stages when written through PUT (stageSchema.length(5)).
object
Free-form JSON column. Shape written by this app: {scope: GrowthAnalysisSubject, windowHours: number, steps: string[]}.
object
Free-form JSON column. Shape written by this app: {scope: GrowthAnalysisSubject, startEvent: string|null, returnEvent: string|null, granularity: “day”|“week”|“month”}.
object
ISO-8601 with milliseconds and Z, or null.
SQLite CURRENT_TIMESTAMP text: ‘YYYY-MM-DD HH:MM:SS’ (UTC).
SQLite CURRENT_TIMESTAMP text: ‘YYYY-MM-DD HH:MM:SS’ (UTC).
Server-computed suggested definition (never persisted by GET). Fully typed by createGrowthDefinitionDraft — shape is fixed.
object
object
object
object
object
First 12 candidate events (draft) / up to 50 (top-level events).
object
Static constant GROWTH_TEMPLATE_OPTIONS (4 entries).
object
Static constant ANALYSIS_SUBJECT_OPTIONS (5 entries).
object
First 12 candidate events (draft) / up to 50 (top-level events).