CoNote

Data export

Push your team's new notes to your own endpoint each week — ready to feed an AI assistant, warehouse, or analytics tool.

CoNote brings every team's events together in one timeline. Data export sends that same stream back out: point your logbook at an HTTPS endpoint and CoNote pushes each week's new notes to it, automatically. It's the bridge between your logbook and your own AI assistant, data warehouse, or analytics stack.

Set it up under Settings → Export. Only owners and admins can manage the feed.

The data export settings page with an endpoint URL, weekly frequency, and category filter
Export: point your logbook at an endpoint and pick what gets pushed each week.

How it works

Once a week, on the day you choose, CoNote gathers every note that landed on your timeline since the last delivery and POSTs them to your endpoint as a single signed JSON request. A few things worth knowing:

  • It's incremental. Each delivery contains only what's new since the last successful one — never your whole history. The feed starts from the day you turn it on, so notes logged before that stay in CoNote.
  • Weekly is the cadence. Pick the weekday; delivery goes out at 9am in your team's timezone.
  • You choose the scope. Leave categories empty to send everything, or pick a few to narrow the feed to just those.
  1. Add your endpoint

    Enter the HTTPS URL CoNote should POST to, set the frequency to Weekly, and pick the send day.

  2. Choose what to send

    Leave Categories empty for everything, or select the categories you want pushed.

  3. Verify the signature

    Copy the signing secret and use it on your endpoint to confirm each request really came from CoNote (see below).

The payload

Each delivery is a JSON body like this:

{
  "team": { "id": "team_123", "name": "Lumen Analytics" },
  "period": { "from": "2026-06-09T07:00:00.000Z", "to": "2026-06-16T07:00:00.000Z" },
  "count": 2,
  "truncated": false,
  "notes": [
    {
      "id": "note_abc",
      "title": "Deployed checkout v3.4.0 to production (main → 9f2a1c4)",
      "description": null,
      "eventDate": "2026-06-15T13:00:00.000Z",
      "category": "deployment",
      "tags": ["release"],
      "source": "INTEGRATION",
      "sourceLabel": "GitHub",
      "author": null,
      "createdAt": "2026-06-15T13:01:22.000Z"
    }
  ]
}

If a single week ever exceeds the per-delivery limit, truncated is true and the rest follows in the next delivery — nothing is dropped.

Verifying the signature

Every request carries an x-conote-signature header: sha256= followed by an HMAC of the exact request body, keyed by your signing secret. Recompute it on your side and compare before trusting the payload:

import crypto from 'node:crypto';

function isFromCoNote(rawBody, header, secret) {
  const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
  return crypto.timingSafeEqual(Buffer.from(header), Buffer.from(expected));
}

Keep your signing secret private — it's the only thing that proves a request came from CoNote. If it leaks, rotate it from Settings → Export; the old secret stops working immediately.

When a delivery fails

If your endpoint is unreachable or returns an error, CoNote records it and shows the reason under Settings → Export. The cursor doesn't move on a failure, so the same notes are retried on the next run — you won't lose a week's events to a brief outage.

Available on every plan. Pair it with an AI assistant to ask questions like "what changed in the two weeks before conversion dropped?" against your own copy of the feed.

Related articles