import { PeriskopeApi } from '@periskope/periskope-client';
const client = new PeriskopeApi({
authToken: 'YOUR_API_KEY',
phone: '919876543210', // the phone to act with (x-phone)
});
async function main() {
const response = await client.notes.getNoteById({
note_id: 'true_00000000-0000-0000-0000-000000000000_api',
});
console.log(response);
}
main();curl -X GET 'https://api.periskope.app/v1/notes/true_00000000-0000-0000-0000-000000000000_api' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'x-phone: 919876543210'{
"message_id": "true_00000000-0000-0000-0000-000000000000_api",
"org_id": "00000000-0000-0000-0000-000000000000",
"org_phone": "911111111111@c.us",
"chat_id": "120363000000000000@g.us",
"body": "Customer asked for a callback tomorrow @user@example.com",
"message_type": "chat",
"media": {
"path": "https://example.com/files/image.png",
"mimetype": "image/png",
"filename": "image.png"
},
"is_private_note": true,
"from_me": true,
"performed_by": "api",
"quoted_message_id": "true_00000000-0000-0000-0000-000000000000_api",
"mentioned_ids": [
"user@example.com"
],
"timestamp": "2026-01-15T09:30:00.000Z",
"updated_at": "2026-01-15T09:30:00.000Z"
}{
"code": "UNAUTHORIZED_ERROR",
"message": "Invalid bearer auth token",
"status": 401
}{
"code": "VALIDATION_ERROR",
"message": "Request validation failed",
"status": 422,
"fields": {
"body.chat_id": {
"message": "chat_id is required"
}
}
}{
"code": "RATE_LIMIT_ERROR",
"message": "You can only make 100 requests per second",
"status": 429
}{
"code": "UNKNOWN_ERROR",
"message": "Internal server error",
"status": 500
}Get Private Note
Looks up a private note by its note_id. Responds 200 with null (not 404) when no note matches.
import { PeriskopeApi } from '@periskope/periskope-client';
const client = new PeriskopeApi({
authToken: 'YOUR_API_KEY',
phone: '919876543210', // the phone to act with (x-phone)
});
async function main() {
const response = await client.notes.getNoteById({
note_id: 'true_00000000-0000-0000-0000-000000000000_api',
});
console.log(response);
}
main();curl -X GET 'https://api.periskope.app/v1/notes/true_00000000-0000-0000-0000-000000000000_api' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'x-phone: 919876543210'{
"message_id": "true_00000000-0000-0000-0000-000000000000_api",
"org_id": "00000000-0000-0000-0000-000000000000",
"org_phone": "911111111111@c.us",
"chat_id": "120363000000000000@g.us",
"body": "Customer asked for a callback tomorrow @user@example.com",
"message_type": "chat",
"media": {
"path": "https://example.com/files/image.png",
"mimetype": "image/png",
"filename": "image.png"
},
"is_private_note": true,
"from_me": true,
"performed_by": "api",
"quoted_message_id": "true_00000000-0000-0000-0000-000000000000_api",
"mentioned_ids": [
"user@example.com"
],
"timestamp": "2026-01-15T09:30:00.000Z",
"updated_at": "2026-01-15T09:30:00.000Z"
}{
"code": "UNAUTHORIZED_ERROR",
"message": "Invalid bearer auth token",
"status": 401
}{
"code": "VALIDATION_ERROR",
"message": "Request validation failed",
"status": 422,
"fields": {
"body.chat_id": {
"message": "chat_id is required"
}
}
}{
"code": "RATE_LIMIT_ERROR",
"message": "You can only make 100 requests per second",
"status": 429
}{
"code": "UNKNOWN_ERROR",
"message": "Internal server error",
"status": 500
}Authorizations
Your Periskope API token, sent as Authorization: Bearer <token>. Generate one from the Periskope dashboard under Settings → API & Webhooks. API access requires an active Pro or Enterprise plan.
Headers
Optional. Scope results to a single phone: country code + number without symbols or spaces (e.g. 911111111111), or a phone_id (phone-xxxxxxxxxxxx). Omit to return data across all phones the API token can access.
"919876543210"
Path Parameters
Unique id of the note — the message_id returned when the note was created, in the form true__<performed_by>
1"true_00000000-0000-0000-0000-000000000000_api"
Response
The note, or null when not found
A private note attached to a chat. Notes are internal to the workspace — they are never sent to WhatsApp and contacts cannot see them. Notes share the message record shape, so responses may include additional message fields (ack, sender_phone, sent_message_id, unique_id).
Unique id of the note, in the form true__<performed_by>. Use this value as the note_id path parameter when fetching a single note.
"true_00000000-0000-0000-0000-000000000000_api"
Id of the organization the note belongs to
"00000000-0000-0000-0000-000000000000"
Org phone (WhatsApp account) the note was created under, as country code + number suffixed with @c.us
"911111111111@c.us"
Chat the note is attached to — @c.us for 1-1 chats, @g.us for group chats
"120363000000000000@g.us"
Text content of the note. null for media-only notes.
"Customer asked for a callback tomorrow @user@example.com"
Content type of the note: 'chat' for text-only notes, otherwise the attachment type ('image', 'video', 'document' or 'audio')
"chat"
Attachment details. null for text-only notes.
Show child attributes
Show child attributes
Always true — marks the record as a private note rather than a WhatsApp message
true Always true for notes — notes are authored by the org, never by the contact
true
Who created the note: the member's email, or "api" when created via the API
"api"
message_id of the message or note this note replies to (set via reply_to at creation). null when the note is not a reply.
"true_00000000-0000-0000-0000-000000000000_api"
Member emails @-mentioned in the note body. Each mention creates a task assigned to that member.
["user@example.com"]
When the note was created, as an ISO 8601 UTC timestamp
"2026-01-15T09:30:00.000Z"
When the note was last updated, as an ISO 8601 UTC timestamp
"2026-01-15T09:30:00.000Z"
Was this page helpful?