---
title: "Add an internal note to a WhatsApp group thread"
method: POST
path: "/v2/groups/{id}/notes"
tags: ["WhatsApp Groups"]
---

# Add an internal note to a WhatsApp group thread

`POST /v2/groups/{id}/notes`

## Request

- Base URL: `https://api.spurnow.com`
- URL: `https://api.spurnow.com/v2/groups/{id}/notes`
- Auth: HTTP bearer

Persists an agent-only note in the group timeline. The note is never sent to WhatsApp, so it remains available when the group messaging window is closed or the group itself cannot receive messages.

## Path parameters

- `id` number, required

## Request body

- CreateGroupNoteBody
  - `text` string: Internal note text. Optional when the note contains at least one attachment.
  - `media` GroupNoteMediaBody[]: Internal note attachments. These are stored in Spur and never sent to Meta.
    - `type` 'image' | 'video' | 'audio' | 'document', required
    - `url` string, required: Public https URL of the note attachment.

## Response `201`

- GroupMessageDto
  - `id` number, required
  - `direction` 'inbound' | 'outbound', required
  - `participantWaId` string, nullable, required
  - `sendingUserId` number, nullable, required
  - `aiAgentId` number, nullable
  - `metaMessageId` string, nullable, required
  - `content` object, required: Raw inbound Meta WhatsApp message object with its type-specific payload.
  - `errorCode` number, nullable, required
  - `errorMessage` string, nullable, required: Human-readable mapping of errorCode (group-specific 1312xx codes and common send failures). Null when the message has no error.
  - `errorTimestamp` string, date-time, nullable, required
  - `sentAt` string, date-time, nullable, required
  - `deliveredAt` string, date-time, nullable, required
  - `readAt` string, date-time, nullable, required
  - `pinnedAt` string, date-time, nullable, required
  - `pinnedUntil` string, date-time, nullable, required
  - `participantReceipts` object, required: Receipt timestamps keyed by participant wa_id: { "<wa_id>": { deliveredAt, readAt } }.
  - `reactions` GroupMessageReactionDto[], required: Active participant and business reactions. Removal tombstones are not exposed.
    - `actorType` 'business' | 'participant', required
    - `contactId` number, nullable, required
    - `participantWaId` string, nullable, required
    - `userId` number, nullable, required
    - `reaction` string, required: The active emoji reaction from this actor.
    - `reactedAt` string, date-time, required
    - `eventMessageId` string, required: Meta message id for the reaction action.
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required

## Other responses

- `400`: The note has neither text nor attachments.
- `404`: Group conversation not found in this workspace.

---

[API](https://skmtc.dev/spurnow/apis/spur-apis.md) - [All operations](https://skmtc.dev/spurnow/apis/spur-apis/llms.txt) - [OpenAPI document](https://skmtc.dev/spurnow/apis/spur-apis/revisions/27ca7bf002cb?raw)
