Update Family Keywords
Replace the keyword list on a specific topic family.
Replaces the keyword list on a single topic family. Useful when you want to hand-curate which keywords roll up under a family before re-running synthesis.
Path parameters
brand_idstringrequiredThe brand UUID.
family_idstringrequiredThe family UUID. Get it from GET /brands/{brand_id}/families.
Request body
keywordsobject[]requiredThe full keyword list to store on the family. This replaces the existing list — it is not a merge. The store accepts arbitrary dicts and only keyword is required; round-trip the same shape the discovery pipeline emits to keep downstream synthesis happy. The discovery pipeline writes keys like keyword, google_vol (DataForSEO monthly volume), kd, intent, aio_present, content_exists, brand_position — note google_vol is the canonical volume field, not volume.
Response
{
"family_id": "family-uuid",
"keyword_count": 47
}
Example
curl -X PATCH \
-H "X-API-Key: $BM_API_KEY" \
-H "Content-Type: application/json" \
https://api.boringmarketing.com/brands/$BRAND_ID/families/$FAMILY_ID/keywords \
-d '{
"keywords": [
{"keyword": "ai marketing tools", "google_vol": 12000, "kd": 34},
{"keyword": "best ai marketing software", "google_vol": 4800, "kd": 28}
]
}'
After editing keywords on one or more families, run POST /brands/{id}/synthesize (30s) to re-score opportunities against the new keyword set without re-running discovery.