List Runs

List all pipeline runs for a brand, with status and stage information.

GEThttps://api.boringmarketing.com/brands/{brand_id}/runs

Returns all pipeline runs for a brand, ordered by creation time (newest first).

Path parameters

brand_idstringrequired

The brand UUID.

Response

{
  "brand_id": "brand-uuid",
  "total": 3,
  "runs": [
    {
      "id": "run-uuid-1",
      "brand_id": "brand-uuid",
      "kind": "full",
      "status": "done",
      "error": null,
      "started_at": "2026-04-07T10:00:00Z",
      "finished_at": "2026-04-07T10:28:00Z",
      "meta": {
        "current_stage": "queue_building"
      }
    },
    {
      "id": "run-uuid-2",
      "brand_id": "brand-uuid",
      "kind": "full",
      "status": "running",
      "error": null,
      "started_at": "2026-04-07T11:00:00Z",
      "finished_at": null,
      "meta": {
        "current_stage": "evidence_collection",
        "stage_detail": "collecting evidence for 12 families (concurrency=5)",
        "stage_started_at": "2026-04-07T11:00:12Z"
      }
    }
  ]
}

Run object fields

FieldTypeDescription
idstringRun UUID
brand_idstringBrand UUID
kindstringType of run — see table below
statusstringqueued, running, done, or failed
errorstring | nullError message if status=failed
started_atstring (ISO 8601)When the run was accepted
finished_atstring | nullWhen the run reached a terminal state
metaobjectAdditional run metadata — see below

Stage progress lives inside meta:

meta fieldDescription
meta.current_stageCurrent pipeline stage string (see kind column for which runs emit stages)
meta.stage_detailHuman-readable detail for the current stage
meta.stage_started_atWhen the current stage began

Run kinds

KindTriggered by
fullPOST /brands/{id}/analyze
brand_enrichmentPOST /brands/{id}/enrich/brand
technical_enrichmentPOST /brands/{id}/enrich/technical
llm_enrichmentPOST /brands/{id}/enrich/llm
discoveryPOST /brands/{id}/discover
competitor_discoveryPOST /brands/{id}/discover-competitors
synthesizePOST /brands/{id}/synthesize
scoringPOST /brands/{id}/score
briefPOST /brands/{id}/brief
executionPOST /brands/{id}/execute

Only full runs emit meta.current_stage. Every other run kind — brand_enrichment, technical_enrichment, llm_enrichment, discovery, competitor_discovery, synthesize, scoring, brief, execution — runs with meta.current_stage = null for the entire lifetime of the run. Use status to know whether they finished, not current_stage. The competitor_discovery stage on full runs is itself only emitted when the brand has no competitors set; otherwise it is skipped silently.

Example

curl -H "X-API-Key: $BM_API_KEY" \
  https://api.boringmarketing.com/brands/$BRAND_ID/runs