Update Brand

Update a brand's name or competitor list.

PATCHhttps://api.boringmarketing.com/brands/{brand_id}

Partially update a brand. Only name and competitors are mutable via this endpoint — everything else (identity, brand_context, technical_context, etc.) is populated by the enrichment endpoints.

Path parameters

brand_idstringrequired

The brand UUID.

Request body

All fields are optional. Include only what you want to change.

namestring

Updated brand display name.

competitorsCompetitor[] | string[]

Replace the full competitor list. Accepts either an array of Competitor objects ({domain, type, tier, confidence, reason_codes, source_tags, evidence}) or an array of bare domain strings. Bare strings are auto-upgraded to Competitor objects with type="business", tier="adjacent", confidence=0.0. See GET /brands/{id} for the full Competitor shape.

Response

{
  "id": "ea502f67-338b-47e4-a245-5c4eea8bd8d2",
  "domain": "yourdomain.com",
  "name": "Your Brand",
  "competitors": [
    {
      "domain": "competitor1.com",
      "type": "business",
      "tier": "direct",
      "confidence": 0.0,
      "reason_codes": [],
      "source_tags": [],
      "evidence": []
    }
  ],
  "updated_at": "2026-04-07T10:35:00Z"
}

409 Conflict is returned (with an X-Running-Run-Id header) if a pipeline-modifying run is currently active for the brand. The blocking run kinds are: full, discovery, brand_enrichment, llm_enrichment, scoring, competitor_discovery. Non-blocking kinds — technical_enrichment, brief, execution, and synthesize — do not reject PATCH. Active runs older than 15 minutes are auto-expired and do not count as active.

Errors

StatusMeaning
404Brand not found, or not owned by the caller.
409Pipeline-modifying run in progress — see the note above. Header: X-Running-Run-Id.
422brand_id is not a valid UUID, or request body failed validation.

Example

curl -X PATCH \
  https://api.boringmarketing.com/brands/$BRAND_ID \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $BM_API_KEY" \
  -d '{
    "competitors": ["competitor1.com", "competitor2.com"]
  }'

After updating competitors, re-run scoring with POST /brands/{id}/score to refresh the action queue with the new context.