                     (:assignees with-keys))
         follow-ups (map #(fix-follow-up {:assignee %} user ts) assignees)]
     (if existing-entry
-      (if (every? #(lib-schema/valid? common-res/FollowUp %) follow-ups)
+      (if (and ;; Check all follow-up request are ok
+               (every? #(lib-schema/valid? common-res/FollowUp %) follow-ups)
+               ;; and that is an author
+               (or (= access-level :author)
+                   ;; or is a viewer
+                   (and (= access-level :viewer)
+                   ;; creating follow-ups only for himself
+                        self?)))
         {:existing-entry (api-common/rep existing-entry)
          :self? self?
          :follow-ups (api-common/rep follow-ups)}

      (when (= (:status final-entry) "published")
        (undraft-board conn user org board)
        (entry-res/delete-versions conn final-entry)
        (auto-share-on-publish conn ctx final-entry)
        ;; TODO: sent follow-up notifications
        )
      (notification/send-trigger! (notification/->trigger :add org board {:new final-entry} user nil))
      {:created-entry (api-common/rep final-entry)})


  ;; Authorization
  :allowed? (by-method {
    :options true
    :post (fn [ctx] (access/allow-members conn org-slug (:user ctx)))})

  ;; Media type client accepts
  :available-media-types (by-method {
