Changelog
Changes and updates to the Open API. This API is currently in beta — breaking changes may occur between versions.
v0.30.0 — July 2026
- Form responses now include a
mediaarray with the files uploaded with the submission (images, videos and documents), each carrying a direct downloadurl— in the response endpoints and theformresponse.*webhook payloads (additive) - On anonymous responses the files are stored encrypted, so
urlis a short-lived signed link (expires after ~5 minutes) — re-fetch the response for a fresh one
v0.29.0 — July 2026
- Users now include
first_nameandlast_nameas separate fields alongsidename, plusdate_of_birth(null unless collected) hired_atnow returns the effective hire date: a manual CMS override wins over the synced value- Users expose manager info: a top-level
is_managerflag and a per-membershipis_managerflag on each entry ingroups[] - Groups returned by the
/groupsendpoints now include amanagersarray (id+name) — not included where groups are embedded in other payloads - Docs: corrected the users
typeexample value (default, notuser) and documented the existingsincefilter on users and groups
v0.28.0 — July 2026
- Added Staff Cards endpoints (
read:staff_cards,write:staff_cardsscopes): full CRUD for the informational cards shown in the employee app — mirroring the CMS staff cards management. Cards are created as drafts by default - Cards are targeted via
groups(departments, professions and custom groups mixed in one array) and/or individually assignedusers; publishing (is_published: true) notifies targeted employees, exactly like the CMS publish button - Cards support a translatable
title, an expiry (expires_date/expires_time), manager visibility, and a QR code image viamedia_ids - Personal cards:
type: personalcreates a card belonging to exactly one user (no groups) — e.g. a digital business card.qr_datagenerates a QR code image server-side, attached as media taggedqr_code. List filterable via?type= - Rich card content is managed through the card's
article_idvia the articles endpoints — or attach a pre-built standalone article at create time
v0.27.0 — July 2026
- Added Forms and Form Responses endpoints (
read:forms,read:formresponsesscopes): list forms, page through a form's responses, fetch single responses with full context, and aGET /formresponses?since=bulk feed for external dashboards and sync - Detail payloads embed the
form, the sharedpublic_commentsthread (incl.mediaattachments), and staff-onlyinternal_comments - The bulk feed's
sincefilters onupdated_at— one poll captures new, edited, status-changed, and newly-commented responses. Public comments now bump their response'supdated_at, like internal notes already did - Whistleblower forms are completely excluded — never listed, always
404; anonymous responses keeprespondentand commentauthorasnull - Form response comment payloads (API and the
formresponse.comment.*webhooks) now include amediaarray with the comment's attachments (additive)
v0.26.0 — July 2026
- Added Feedback endpoint:
POST /feedbacksends feedback on the Open API straight to the Monotree team — feature requests, bug reports, anything. No scope required; any valid token works
v0.25.0 — July 2026
- Added Handbooks and Courses endpoints (
read:/write:handbooks,read:/write:coursesscopes): CRUD for both containers and their chapters — create a draft, add chapters (each owning an article), publish when ready. Publishing notifies targeted employees - Added Articles endpoints (
read:articles,write:articlesscopes): the shared rich-content structure. Read an article's typed elements and bulk-save the complete element list viaPUT /articles/{id}/elements; read-only elements (reference,gif) are never deleted by bulk saves - Element types:
paragraph(markdown),header,image_gallery,video_gallery,document— media is referenced from the existingPOST /mediaflow - Added
GET /articles/{id}/markdown— any article flattened to a single markdown document (?locale=supported) - Announcements, events, calendar entries and certificates now expose their
article_id, so the articles endpoints can manage their rich content too - Articles are fully translatable: every text field carries a field-keyed
translationsobject on read and write — writing a translation activates that locale on the owning content. Handbooks and courses accept the sametranslationsobject for their owntitle/subtitle - The
bodyconvenience field on announcements, events and calendar entries now returns422instead of silently replacing rich article content. Existing integrations are unaffected: creating withbodyand updating content whose article was built bybodyitself keep working unchanged - Create standalone articles via
POST /articlesand attach them witharticle_idwhen creating announcements, events, and calendar entries — content is complete the moment it goes live - Added
is_publishedtoPOST /announcementsandPOST /calendar-entries(defaulttrue— behavior unchanged): create drafts withis_published: falseand publish later via update. Events already supported this
v0.24.0 — July 2026
- Added Calendar Event Types endpoints (
read:calendar_event_types,write:calendar_event_typesscopes): list, create, and update the event types that categorize calendar entries — names are translatable per locale via atranslationsobject - Calendar entries now accept
calendar_event_type_idon create and update; when omitted on create, the default event type is used - Calendar entry responses now include the entry's
calendar_event_type PATCH /calendar-entries/{id}is now accepted alongsidePUT- Added
GET /locales(read:localesscope): the platform's active languages as a map of locale code to name, plus the default content locale — the valid keys for translatable fields
v0.22.0 — June 2026
- Added direct messages (
write:chat_messagesscope):POST /users/{id}/messagessends a direct message to a single user's private chat, delivered by a bot user (the 1:1 room is created on first use and reused afterwards) - New
direct_messageincoming webhook action — deliver a webhook payload to one user's private chat; a bot user is always the sender - Added Bots endpoints (
read:bots,write:botsscopes): create and manage the bot users that send direct messages and power incoming webhooks - Added Incoming Webhook management endpoints (
read:incoming_webhooks,write:incoming_webhooksscopes): create, read, update, and revoke incoming webhooks programmatically — the trigger URL and token are returned once on create, and webhooks are scoped to the token that created them
v0.21.0 — June 2026
- Added Webhook Management endpoints (
read:webhooks,write:webhooksscopes): create, read, update, revoke, activate/deactivate, and test outgoing webhook endpoints programmatically — the same capabilities as the CMS Outgoing Webhooks tab - Choose events per endpoint and optionally filter entity-scoped events (post/comment events by wall, form response events by form)
- Configure delivery auth (
bearer_token,basic_auth,api_key) and custom headers; secrets, credentials, and header values are encrypted at rest and never returned (fetch the signing secret once viaGET /webhooks/{id}/secret) - Endpoints are scoped to the token that created them; removing an endpoint is a revoke (history is preserved), matching the CMS
v0.20.0 — June 2026
- Added form response comment webhook events:
monotree.formresponse.comment.created,monotree.formresponse.comment.deleted - Fire when a public comment is created or deleted on a form response. Internal staff notes do not trigger webhooks
- Filterable by form (select one or more forms when subscribing); whistleblower forms never dispatch
- The comment payload's
authorisnullwhen written by the respondent on an anonymous form — managers/owners are always identified
v0.19.0 — June 2026
- Added Certificates endpoints (
read:certificates,write:certificatesscopes): full CRUD for certificate templates, plus assign, reset/expire, list holders, and a user's certificates - Added Certificate Types endpoints (
read:certificatetypes,write:certificatetypesscopes): full CRUD for certificate categories - Assigning mirrors the in-app bulk assignment; "removing" a certificate from a user is the reset/expire operation (history is preserved, matching the platform)
- Certificate templates and types are created as drafts by default; pass
is_published: trueto publish - Update endpoints accept both
PUTandPATCH
v0.18.0 — June 2026
- Added a
statusquery parameter to list endpoints —published(default),draft, orall— on announcements, events, calendar entries, posts, and surveys publishedreturns only currently-live content;draftreturns unpublished items (including those awaiting a scheduled publish);allreturns everything. An unrecognised value returns422- Breaking:
GET /walls/{wall_id}/postsandGET /surveyspreviously returned drafts; they now return only published content by default. Passstatus=draftorstatus=allto include drafts. (Posts created via the API are published immediately, so this mainly affects draft survey templates.) - Single-item endpoints (
GET /{resource}/{id}) are unchanged — they still return an item regardless of its publication state - Certificates are not exposed via the Open API, so the
statusfilter does not apply to them
v0.17.0 — June 2026
- Breaking: events are now created as drafts by default. Previously
POST /eventsalways published immediately - Added
is_publishedtoPOST/PUT /events— settrueto publish,falseto unpublish (back to draft) - Added
publish_attoPOST/PUT /events— schedule a draft to publish at a future time (mirrors the in-app scheduled publishing). Must be a future timestamp; takes precedence overis_published - Send
publish_at: nullon update to cancel a pending schedule; scheduling an already-published event returns422 - Event responses now include a
scheduled_atfield — the time a scheduled draft will go live, ornull - Drafts and scheduled events are excluded from
GET /eventsbut remain fetchable viaGET /events/{id}
v0.16.0 — June 2026
- Form response webhook payloads (
monotree.formresponse.created,monotree.formresponse.updated) now include choice and user field selections infield_responses— previously those field types were delivered with an empty value choicesfields serialize as an array of{ id, title };usersanddepartment_usersfields serialize as an array of user objects, matching therespondentshape- Documented the full form response webhook payload, including the per-field-type
valueshapes
v0.15.0 — June 2026
- Added
monotree.formresponse.alarm_triggeredwebhook event (filterable by form) - Fires when a submitted form response matches a configured field alarm rule
- Each alarm rule fires its own delivery — idempotent per response + rule pair (never fires twice for the same match)
- Payload includes the full form response and the triggered alarm (rule name, operator, value, matched field)
- Whistleblower forms are excluded, matching other form response events
v0.14.0 — June 2026
- Added Academy statistics endpoints (
read:statsscope) that mirror the CMS academy figures - Aggregate:
GET /stats/academy/onboarding,GET /stats/academy/courses,GET /stats/academy/journeys(all accept an optionalgroup_idsfilter) - Quiz performance:
GET /stats/academy/quizzes/{quiz_id}— per-question respondents, passed and pass rate - Per-user progress:
GET /stats/academy/users/{user_id}/coursesandGET /stats/academy/users/{user_id}/onboardingfor HR / LMS integrations
v0.13.0 — May 2026
- Added Surveys read endpoints (
read:surveysscope):GET /surveys,GET /surveys/{id} - Added Survey answers endpoints keyed by template id:
GET /surveys/{template_id}/answersandGET /surveys/{template_id}/answers/{id}— mirrors the CMS Excel export - Each answer embeds its spawn (id +
starts_at), question, and choice so consumers can interpret rows without separate lookups - Filters:
since,until(created_at),spawn_starts_at;per_pageraised to 100 for bulk pulls - Anonymous surveys: spawns below
survey_respondents_threshold(default 3) are suppressed entirely, matching the export's privacy contract
v0.12.0 — May 2026
- User responses now include an
avatar_urlfield — direct URL to the user's profile picture, ornullif none is set - Affects
GET /users,GET /users/{id}, and embedded user objects on posts, comments, announcements, events, calendar entries, form responses, andmonotree.user.registered/monotree.onboarding.completedwebhooks
v0.11.0 — April 2026
- Added Media upload endpoints (
write:mediascope):POST /mediaandGET /media/{id} - Extended
POST /walls/{wall_id}/postswith optionalmedia_idsarray — upload first, then attach by id - Incoming webhook
wall_postandchat_messageactions now accept an optionalmediaarray of URL + type pairs (server fetches URLs) - Supported media types:
image,video,document. Max 10 per post/message, same type across the batch
v0.10.0 — April 2026
- Added
monotree.formresponse.updatedwebhook event (filterable by form) - Fires when a form response's status, deadline, visibility/archive flag, or assignees change
- Does not fire on initial creation (use
formresponse.created) or on unrelated activity like comments/notes - Whistleblower forms are excluded, matching the existing
formresponse.createdbehavior
v0.9.0 — April 2026
- Added Comments CRUD endpoints on posts (
read:comments,write:commentsscopes) - New endpoints:
GET/POST /posts/{post_id}/commentsandGET/PUT/DELETE /posts/{post_id}/comments/{id} - Added
monotree.comment.created,monotree.comment.updatedandmonotree.comment.deletedwebhook events (filterable by wall) - Comment updates are restricted to the author within 30 minutes of creation
v0.8.0 — April 2026
- Outgoing webhooks now support resource filtering — optionally select specific forms or walls per event type
- Form response webhooks can be scoped to specific forms (multi-select)
- Post created webhooks can be scoped to specific walls (multi-select)
- Default remains "all" — no filter means you receive all events of that type
- Added
filtersfield to webhook create/update API
v0.7.0 — April 2026
- Added Calendar Entries CRUD endpoints (
read:calendar_entries,write:calendar_entriesscopes) - Create, update, and delete calendar entries with optional body and group targeting
- Added Create calendar entry action for incoming webhooks
v0.6.0 — April 2026
- Added Events CRUD endpoints (
read:events,write:eventsscopes) - Create, update, and delete company events with date, time, location, and group targeting
- Events are automatically published and added to the calendar on creation
v0.5.0 — March 2026
- Added Statistics read-only endpoints (
read:statsscope) - User summary: total, registered, active and new users (yesterday/7d/30d)
- Engagement: time series with active users, app time, sessions — filterable by granularity, period count, and group
- Adoption rate: per-department active/total employees percentage — filterable by group
- Content activity: posts, comments, reactions, chat messages, completed todos — this week vs last week
- All statistics responses are cached server-side (1h–24h) for performance
v0.4.0 — March 2026
- Added Walls read-only endpoints with group associations (
read:wallsscope) - Post endpoints now nested under walls:
/walls/{wall_id}/posts - Added Timestamp header to outgoing webhooks for replay attack prevention
- Webhook signatures now include the timestamp:
HMAC-SHA256(timestamp + "." + payload, secret) - Added bot user avatars for incoming webhooks (defaults to app icon)
- Outgoing webhooks now use revoke instead of delete
- Incoming webhooks now use unified
textfield for all actions - Added Pagination section to documentation with
metaandlinksformat - Added incoming webhook rate limiting documentation
v0.3.0 — March 2026
- Added Users read-only endpoints (
read:usersscope) - Added Groups read-only endpoints (
read:groupsscope) - Added
monotree.user.registeredwebhook event - Added
monotree.onboarding.completedwebhook event - Added
monotree.formresponse.createdwebhook event - Added IP whitelist per token
- Added configurable rate limit with rate limit response headers
- Added usage counters on tokens, outgoing webhooks, and incoming webhooks
- Added content author selection (bot user or yourself) on incoming webhooks
- Added Test Webhook buttons for outgoing and incoming webhooks
- Added signature verification documentation with Node.js example
v0.2.0 — March 2026
- Added Announcements CRUD endpoints (
read:announcements,write:announcementsscopes) - Added Create post on wall action for incoming webhooks
- Added
monotree.announcement.publishedwebhook event
v0.1.0 — March 2026
- Initial beta release of the Open API
- Bearer token authentication with scoped permissions
- Posts CRUD endpoints (
read:posts,write:postsscopes) - Outgoing webhooks with HMAC-SHA256 signing for post events
- Incoming webhooks for sending messages to chat rooms
- API request logging and webhook delivery logging
- Rate limiting at 60 requests per minute per token
- CMS admin interface for managing tokens, webhooks, and logs