{
  "id": 17773491,
  "title": "Find your Brevo list ID and add contacts to it with plain Node.js fetch",
  "url": "https://urgent.news/2026/11/02/find-your-brevo-list-id-and-add-contacts-to-it-with-plain-node-js",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-11-02T09:17:52.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/omnigenz/find-your-brevo-list-id-and-add-contacts-to-it-with-plain-nodejs-fetch-26ld"
  },
  "original_language": "en",
  "account": "To use Brevo (formerly Sendinblue) with Node.js, first locate the list ID in your Brevo dashboard. This ID appears next to or under each list name, or can be found by accessing the list URL. Remember, this is not the same as a segment ID.\n\nFor security, store your Brevo API key in an environment variable rather than hardcoding it into your code. This can be done using the export command in a Unix-based system.\n\nTo interact with the Brevo API, create a brevo.js file that defines a fetch wrapper function. This function takes a path and an optional method and body, sets the appropriate headers including the API key, and parses the response.\n\nA second file, lists.js, uses the brevo.js function to retrieve all lists from Brevo. It makes a GET request to /contacts/lists, handling pagination by incrementing the offset parameter. The list IDs and names are then logged to the console.\n\nFinally, a subscribe.js file demonstrates how to add a new contact to a list. It uses a POST request to /contacts, passing the email and first name, and specifies the desired list ID in the listIds array. The updateEnabled flag ensures existing contacts are updated instead of failing.",
  "summary": "A code-first version of a guide first published on Omni Genz . Almost every Brevo (formerly Sendinblue) integration asks for a list ID sooner or later: a WordPress form plugin, a Zapier step, or your own sign-up endpoint. This post shows how to find it in the dashboard, how to look it up with the API, and how to put new and existing contacts into that list from Node 18+ using only the built-in…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}