owner_email.
GET — list goals
OptionalappId and status (active | achieved | missed | archived) filters.
pace object (authoritative — do not recompute client-side):
POST — create a goal
Returns
{ "data": { "goal": {...} } } with 201. A duplicate active goal returns 409.
PATCH — update a goal
Send only the fields you want to change:label, targetValue, baselineValue, currentValue, deadline, status. Setting currentValue is how you update pace for manual metrics (mrr, dau, ltv_cac, custom). Returns the updated { goal }, or 404 if not found.
DELETE — archive a goal
cofounder_goal_progress is preserved.
Auto-updated metrics
downloads and revenue app-scoped goals update automatically from each run’s report (health.downloadsLast7d / health.revenueLast7d). When a goal crosses into off-track, a goal_offtrack signal fires once on the transition.
