create_goal
Create a goal for a brand. Two levels only: a top-level goal, or a sub-goal under one (pass parent_id). THE BASELINE IS MEASURED SERVER-SIDE at creation — you do not pass a starting number, and you should not invent one. WORKED EXAMPLE, a measured goal: title='Get cited by AI answer engines', category='aeo', stage='grow', metric_key='ai_citation_rate', target_value=30 — the citation rate is scored 0-100, so 30 means 30% of buying prompts citing the brand. WORKED EXAMPLE, a goal no metric covers: title='Publish 5 route pages', category='content', stage='build', manual_total=5 and no metric_key — progress then tracks manual_done/5. If you omit BOTH metric_key and manual_total, progress falls back to the fix-queue issues you link with link_goal_issues. Pick whichever of the three actually reflects the work; a goal with none of them reads as unmeasurable forever.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | JSON array of freeform labels, e.g. ["q3","client-ask"] | |
| stage | No | discover | fix | build | grow | defend | |
| title | Yes | What the brand is trying to achieve, in plain language | |
| due_at | No | ISO 8601 date/time this goal is due, e.g. 2026-12-15 | |
| site_id | Yes | The brand/site ID | |
| category | No | seo | aeo | geo | technical | content | authority — same vocabulary as the fix queue, so goals and issues line up | |
| priority | No | low | medium | high | |
| parent_id | No | Make this a sub-goal of an existing top-level goal | |
| starts_at | No | ISO 8601 date/time this goal starts, e.g. 2026-10-01 | |
| metric_key | No | A key from goal_metrics. Omit for a manual or issue-backed goal. | |
| description | No | Why it matters, or how it will be done | |
| owner_email | No | Who owns it; defaults to the calling user | |
| manual_total | No | For a goal no metric covers: how many things need doing | |
| target_value | No | The number to reach. For a 'down' metric this is lower than today, e.g. orphan_pages target 0. |