{
  "info": {
    "name": "Commune: Plan your next issue from what readers said",
    "description": "Your readers already told you what to write next. It is in the replies under your last issue, the sentences they marked, and the conversations they started on their own. Commune keeps all of it in one place, so you can read it in a few minutes and start the next issue from their questions instead of a blank page.\n\nThe walkthrough: https://usecommune.dev/use-cases/plan-your-next-issue\n\nSet the `apiKey` variable to a key from https://usecommune.com/settings/api-keys, then run the requests in order.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{apiKey}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.usecommune.com"
    },
    {
      "key": "apiKey",
      "value": ""
    },
    {
      "key": "version",
      "value": "2026-08-26"
    },
    {
      "key": "newsletter",
      "value": "example-letter"
    },
    {
      "key": "thread",
      "value": "b1c2d3e4-f506-4718-8293-a4b5c6d7e8f9"
    },
    {
      "key": "article",
      "value": "4c9e2f81-0b7a-4d13-8e55-1a2b3c4d5e6f"
    }
  ],
  "item": [
    {
      "name": "1. Find your newsletter",
      "request": {
        "method": "GET",
        "header": [
          {
            "key": "Commune-Version",
            "value": "{{version}}"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/newsletters",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "newsletters"
          ]
        },
        "description": "A key reaches one newsletter or several, whichever its owner ticked when creating it. List them and pick yours by `handle` (or `id`, either works in a path) for the requests that follow."
      }
    },
    {
      "name": "2. List your latest issues",
      "request": {
        "method": "GET",
        "header": [
          {
            "key": "Commune-Version",
            "value": "{{version}}"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/newsletters/{{newsletter}}/articles?status=sent&limit=5",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "newsletters",
            "{{newsletter}}",
            "articles"
          ],
          "query": [
            {
              "key": "status",
              "value": "sent"
            },
            {
              "key": "limit",
              "value": "5"
            }
          ]
        },
        "description": "`status=sent` keeps drafts and scheduled articles out, and a small `limit` keeps the digest to the issues readers still remember. Three to five is plenty.\n\nRead three things on each row. `stats` has the public tallies, so you can see at a glance which issue drew a response. `thread` is the discussion Commune opened under the article, or `null` when there is none, as on the imported article here. And `id` is what the highlights request needs."
      }
    },
    {
      "name": "3. Read the discussion under each one",
      "request": {
        "method": "GET",
        "header": [
          {
            "key": "Commune-Version",
            "value": "{{version}}"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/threads/{{thread}}/messages?limit=100",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "threads",
            "{{thread}}",
            "messages"
          ],
          "query": [
            {
              "key": "limit",
              "value": "100"
            }
          ]
        },
        "description": "An article's comments are the replies in its discussion thread, so read them from the thread named in `thread.id`. They come back oldest first and flattened: `depth` is `1` for a reply to the article and `2` for an answer to a reply, which points at it through `parent`. Follow `pagination.next_cursor` until it is `null`; `limit=100` keeps that to a request or two for most issues.\n\n`content` is HTML written by readers. Strip the tags before you put it in a digest, and never render it unsandboxed. `reactions` is the quickest signal of which replies other readers agreed with."
      }
    },
    {
      "name": "4. Read what they highlighted",
      "request": {
        "method": "GET",
        "header": [
          {
            "key": "Commune-Version",
            "value": "{{version}}"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/articles/{{article}}/highlights?limit=100",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "articles",
            "{{article}}",
            "highlights"
          ],
          "query": [
            {
              "key": "limit",
              "value": "100"
            }
          ]
        },
        "description": "Highlights are the sentences readers found worth keeping, in the order they appear in the article. Nobody is named: `owner_key` is the same for one reader within one article and means nothing across articles, so count distinct keys per `quote` to learn how many people marked a passage.\n\nA highlight with a `message` is one a reader went on to reply from. Those are often the best starting points, because the reader has already written the question down."
      }
    },
    {
      "name": "5. See what readers started on their own",
      "request": {
        "method": "GET",
        "header": [
          {
            "key": "Commune-Version",
            "value": "{{version}}"
          }
        ],
        "url": {
          "raw": "{{baseUrl}}/newsletters/{{newsletter}}/threads?is_article_thread=false&limit=20",
          "host": [
            "{{baseUrl}}"
          ],
          "path": [
            "newsletters",
            "{{newsletter}}",
            "threads"
          ],
          "query": [
            {
              "key": "is_article_thread",
              "value": "false"
            },
            {
              "key": "limit",
              "value": "20"
            }
          ]
        },
        "description": "Optional, and often the most useful part. `is_article_thread=false` leaves out the discussions under articles, which you already read, and keeps the conversations readers opened themselves, most recently active first. The first page is enough: you want what is alive now, not the archive.\n\nEach row is the thread's opening message with `reply_count` and `view_count`. A question many people looked at is a topic even when few of them replied."
      }
    }
  ]
}
