Append-only annotation attached to an item, container, or another annotation. Annotations are the primitive for comments, audit-log entries, and inbound-email ticket conversations. Once created, annotations are intentionally not directly editable — they’re audit-trail-shaped.Documentation Index
Fetch the complete documentation index at: https://ekso.dev/llms.txt
Use this file to discover all available pages before exploring further.
Sample JSON
Copy, edit, paste. Server-set fields (id, created, tenantId, …) are omitted from the example — they’re populated by the server on response.
Fields
| Field | Type | Required | Notes |
|---|---|---|---|
entity | string • nullable | Server-set | Set by the server. Read-only on writes. |
owner | ContentOwner | Required | Type of the entity this annotation hangs off. See ContentOwner — usually Item; Annotation for replies on a thread. |
ownerId | string | Required | Id of the owning entity. |
annotator | AnnotatorType | Optional | Source of the annotation. See AnnotatorType. Common values: User (in-app comment), Email (inbound ticket email), System (automation rule). |
annotatorId | string | Required | Identifier for the annotator. User id when annotator=User; sender email address when annotator=Email; rule id when annotator=System. |
restrictedTo | array<string> | Optional | Optional ACL — list of user-group ids allowed to read this annotation. Empty array means inherits the owning entity’s read permissions. |
contentType | string | Optional | Format of content. The set of accepted values is tenant-configurable — fetch via GET /api/annotation/list-supported. Common: Text, Markdown, Html. |
content | string | Optional | The annotation body itself. Plain text, markdown, or HTML depending on contentType. |
meta | array<{ key: string, value: string }> | Optional | Free-form key/value metadata. The ticketing pipeline uses this for ekso_mailbox_id / ekso_ticketing_id cross-references on inbound emails. |
tenantId | string | Server-set | Set by the server. Read-only on writes. |
id | string | Server-set | Set by the server. Read-only on writes. |
created | string (date-time) | Server-set | Set by the server. Read-only on writes. |
createdBy | string | Server-set | Set by the server. Read-only on writes. |
updated | string (date-time) | Server-set | Set by the server. Read-only on writes. |
updatedBy | string | Server-set | Set by the server. Read-only on writes. |
deleted | boolean | Server-set | Set by the server. Read-only on writes. |
Used by
Request body
POST /api/annotationPOST /api/item/{itemId}/replyPUT /api/annotation/{id}
Response body
GET /api/annotation/owner/{ownerId}GET /api/annotation/{id}POST /api/annotation
CLI
ekso annotation — see the command branches page for available verbs. Body for create / update verbs typically passed via --data @file.json matching the sample JSON above.