CoEditor CRM docs
Reference

Internal Notes API

Create customer internal notes programmatically—single and bulk.

Link copied

Create internal notes on a customer record. Notes created here appear in the customer's Internal Notes section in the dashboard, and stay editable and deletable there.

  • POST /v1/internal-notes — create a single note.
  • POST /v1/internal-notes/bulk — create up to 1000 notes in one request.

The full, always-current request/response schema and status codes are published at /docs on the API host — use that as the source of truth; this page intentionally doesn't duplicate it, since a second hand-maintained copy drifts out of date.


Authentication

Header x-api-key: <key>. Each key is scoped to one publication — a note can only be written on that publication's customers — so there is no publicationId in the body.

The bulk endpoint requires the same write permission as the single-note one.


Identifying the customer

Every request identifies the customer with exactly one of email, subscriptionId (Stripe subscription id), or customerId (the customer's public uuid, as shown in the CRM UI) — zero or multiple returns 422.

agentEmail (required) is a CRM agent's own email, used to attribute the note to them — there is no default account, so every note must name a real person. You only need your own email — there is no separate id to look up.


Examples

Single note:

curl -i -X POST "https://v1.api.coeditor.io/v1/internal-notes" \
  -H "x-api-key: {API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"customerId": "91a333ec-7ee2-4c55-a1ee-1f0b4eda4a38", "subject": "Refund issued", "details": "£20 refunded via Stripe.", "agentEmail": "agent@example.com"}'

Bulk — 1 to 1000 items per request, each resolved and created independently so one bad item never fails the batch:

curl -i -X POST "https://v1.api.coeditor.io/v1/internal-notes/bulk" \
  -H "x-api-key: {API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
    "agentEmail": "agent@example.com",
    "notes": [
      { "customerId": "91a333ec-7ee2-4c55-a1ee-1f0b4eda4a38", "subject": "Refund", "details": "…" },
      { "email": "reader@example.com", "subject": "Note", "details": "…" }
    ]
  }'

The bulk response reports a per-item status (created / not_found / rejected) correlated to the input by index — partial success is normal, not an error. See /docs for the exact response shape and status codes.

On this page