Update Family Keywords

Replace the keyword list on a specific topic family.

PATCHhttps://api.boringmarketing.com/brands/{brand_id}/families/{family_id}/keywords

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_idstringrequired

The brand UUID.

family_idstringrequired

The family UUID. Get it from GET /brands/{brand_id}/families.

Request body

keywordsobject[]required

The 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.