Content Production

Generate content briefs from your top opportunities and draft full articles — a step-by-step guide through the brief → draft → publish flow.

Content production requires the Builder tier ($49/mo) or above.

This guide walks through the full content chain: pick an opportunity, generate a brief, draft an article, and log the outcome.

Prerequisites

You need a completed pipeline run with opportunities. If you haven't done that yet, start with the Quickstart.

Step-by-step

1
Pick from the queue

Fetch your action queue — it's pre-sorted by priority:

curl -s \
  -H "X-API-Key: $BM_API_KEY" \
  "https://api.boringmarketing.com/brands/$BRAND_ID/queue" \
  | python3 -m json.tool
{
  "brand_id": "brand-uuid",
  "total": 8,
  "queue": [
    {
      "id": "qi-uuid-1",
      "kind": "opportunity",
      "status": "pending",
      "rank": 1,
      "priority": 0.95,
      "item": {
        "play": "AI Marketing Tools Comparison Guide",
        "summary": "High-intent cluster with 12K monthly volume, KD 34",
        "recommended_format": "comparison_post"
      }
    }
  ]
}

Take the id of the top item.

2
Generate a brief
curl -s -X POST \
  -H "X-API-Key: $BM_API_KEY" \
  -H "Content-Type: application/json" \
  "https://api.boringmarketing.com/brands/$BRAND_ID/brief" \
  -d '{"queue_item_id": "qi-uuid-1"}'
{
  "run_id": "brief-run-uuid",
  "status": "queued"
}

Poll the run (brief generation takes 1-3 minutes):

curl -s \
  -H "X-API-Key: $BM_API_KEY" \
  "https://api.boringmarketing.com/brands/$BRAND_ID/runs/brief-run-uuid"
3
Review the brief

Once the run completes, fetch the generated brief:

curl -s \
  -H "X-API-Key: $BM_API_KEY" \
  "https://api.boringmarketing.com/brands/$BRAND_ID/briefs" \
  | python3 -m json.tool

The brief includes:

  • Strategy — competitive angle, positioning, target audience
  • Pages — structured outline with H2/H3 hierarchy, section guidance, word counts
  • Internal links — recommended links to existing brand content
  • Key entities — people, tools, and concepts to reference
  • Brand context — your trust signals, terminology, and voice injected into the brief

Review the brief before drafting. The draft follows it closely — fixing the brief is faster than fixing the draft.

4
Draft the article

Take the brief_id from the previous step and request a full draft:

curl -s -X POST \
  -H "X-API-Key: $BM_API_KEY" \
  -H "Content-Type: application/json" \
  "https://api.boringmarketing.com/brands/$BRAND_ID/execute" \
  -d '{"brief_id": "brief-uuid"}'
{
  "run_id": "exec-run-uuid",
  "status": "queued"
}

Draft generation takes 3-8 minutes (Opus produces long-form content).

5
Get the draft

First list executions to find the execution_id (the execute endpoint returns a run_id, but drafts are stored and fetched by execution_id, which is a separate identifier):

curl -s \
  -H "X-API-Key: $BM_API_KEY" \
  "https://api.boringmarketing.com/brands/$BRAND_ID/executions" \
  | python3 -m json.tool

Then fetch the specific execution:

curl -s \
  -H "X-API-Key: $BM_API_KEY" \
  "https://api.boringmarketing.com/brands/$BRAND_ID/executions/$EXECUTION_ID" \
  | python3 -m json.tool

The article content lives in the outputs field. The response also includes gate_scores, format, and the run_id that produced this execution.

6
Log the outcome

After publishing, tell the API so the learning loop can track performance:

curl -s -X POST \
  -H "X-API-Key: $BM_API_KEY" \
  -H "Content-Type: application/json" \
  "https://api.boringmarketing.com/track/outcomes/report" \
  -d '{
    "brand_id": "'$BRAND_ID'",
    "recommendation_id": "opp-uuid-1",
    "brief_id": "brief-uuid",
    "event_type": "completed",
    "notes": "Published at https://yourdomain.com/article"
  }'

Also capture a baseline snapshot so later diffs can show what changed:

curl -s -X POST \
  -H "X-API-Key: $BM_API_KEY" \
  "https://api.boringmarketing.com/track/brands/$BRAND_ID/snapshot"

See Tracking Outcomes for the full snapshot + changes + outcome-report workflow.

Batch production

For producing multiple articles, repeat steps 2-5 for each queue item. A future POST /brands/{id}/brief/batch endpoint will handle bulk brief generation — for now, iterate through queue items sequentially.

Track your published content

Set up outcome tracking and read performance reports.