Features
Actions

Actions

An action is how a workspace member delegates a piece of work — usually "produce a graphic or asset for this post" — to a teammate and tracks it to completion, with Slack notifications on both ends and file attachments uploaded straight from the browser to S3.

This page describes the product-facing behavior. For the exact request/response shapes and error codes, see the Actions API reference. For programmatic access from an AI client, see Actions MCP tools.

Why actions exist

Content creators frequently need something they can't make themselves — a custom graphic, a video edit, a chart — before a post can move forward. Actions turn that ask into a tracked, assignable record instead of a Slack message that gets lost: create it, assign it, get notified when it's done, review the file in context.

Creating an action

An action can be created two ways in the UI:

  1. From the actions page, via the "Create Action" button.
  2. From a post's editor sidebar, via "Request graphic" — this pre-populates linked_post_id so the action shows up on that post too.

Required fields: title and assignee_id (must be an existing workspace member — the picker offers an inline invite flow if you search for someone who isn't one yet). Optional: description, priority (p1_urgent/p2_high/p3_medium/p4_low, defaults to p3_medium), due_date, linked_post_id.

As soon as the action is created, the assignee gets a Slack DM: "New action request: {title}. Due: {dueDate}."

Status and response are two different things

This trips people up, so it's worth calling out explicitly:

  • status (openin_progresscompleted, or cancelled at any point) tracks the work item's lifecycle. Anyone in the workspace can change it via the actions table or detail panel.
  • assignee_response (pending / accepted / declined) is a separate signal only the assignee can set — "I've seen this and I'm taking it" or "I'm not doing this." Declining an action does not automatically cancel it or change its status; someone still needs to reassign it or cancel it manually.
EventWho gets notifiedMessage
Action created / reassignedAssigneeNew action request: {title}. Due: {dueDate}.
Action marked completedCreatorAction completed: {title} by {assigneeName}.
Assignee accepts/declinesCreatorAssignee {accepted/declined} the action.
⚠️

Slack notifications on this domain are not fire-and-forget. If the Slack API call fails, the create/reassign/complete/respond call itself fails — the underlying database write has already happened, but the caller sees an error. If you see actions "half-updated" (DB shows the change, UI shows an error), a Slack delivery failure is the most likely cause — check the Lambda logs for actions_service.

Attachments

Assignees upload deliverables directly on the action's detail panel (drag-and-drop) or the post's canvas editor "Attachments" tab if the action is linked to a post.

  • Allowed types: PNG, JPG/JPEG, SVG, WEBP, PDF. Anything else is rejected before a presigned URL is even issued.
  • Size: intended limit is 10 MB per file, but this is a client-side/UI expectation only — the backend does not currently reject an oversized upload once the presigned URL exists (see the API reference for the exact guarantee).
  • Files upload straight to S3 using a presigned URL — the app server never sees the file bytes. Once the action's attachment count updates, the file is downloadable through a fresh presigned URL generated on each page load.
  • Anyone who can act on the workspace (not just the assignee) can add or remove attachments — there's no additional "only the assignee" gate on the upload/delete endpoints.

Who can do what

ActionAny workspace memberAssignee onlyCreator or admin only
View / list actions
Edit title/description/priority/due date/reassign
Change status
Accept / decline (assignee_response)
Upload / delete attachments
Delete the action✅ (creator, or a platform admin)

Where actions show up

  • The actions page — a table of all actions in the workspace with status/priority badges, assignee, due date, and attachment count. Overdue, non-completed actions are highlighted.
  • The dashboard — a "Pending Actions" widget for actions assigned to the current user.
  • The post detail / canvas editor — any action linked via linked_post_id shows in an "Attachments" sidebar tab, alongside all files uploaded to it.

See also

  • Actions API reference — full endpoint list, request/response shapes, status codes.
  • Actions MCP toolslist_actions / create_action for AI clients (a narrower surface than the REST API — no update, delete, status, response, or attachment tools exist over MCP).