{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-docs/api-reference/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["api-container","endpoint"]},"redocly_category":"API Reference","searchWeight":120,"type":"markdown"},"seo":{"title":"Shared Thread Reactions","description":"Complete API reference and documentation for Freddy AI-powered backend system by Aitronos","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"shared-thread-reactions","__idx":0},"children":["Shared Thread Reactions"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Add, list, and remove emoji reactions on a message of a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["live-shared"]}," thread you ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["joined"]}," — the slug-scoped twin of the owner reaction endpoints, for a participant who joined the thread via a share link but does not own it."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Reactions are the most visible co-working feature: a reaction added by a joiner fans out to the owner and every other participant on the live stream in real time, and appears in the owner's own reaction list too."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Every operation is authorized by the joiner's ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["live"]},"-share grant on the slug — the same resolution as opening the link, plus the link's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["access_level"]}," must be ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["live"]},". A ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["view"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fork"]}," slug returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["403"]},"; an unknown or unauthorized link returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["404"]},"."]},{"$$mdtype":"Tag","name":"ApiContainer","attributes":{},"children":[{"$$mdtype":"Tag","name":"Endpoint","attributes":{"method":"POST","path":"https://api.aitronos.com/v1/shared-threads/{slug}/messages/{message_id}/reactions"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"authentication","__idx":1},"children":["Authentication"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Requires ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["user"]}," authentication (Bearer token). API-key authentication is rejected — a reaction is a per-user action."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"path-parameters","__idx":2},"children":["Path Parameters"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["slug"]}]}," string ",{"$$mdtype":"Tag","name":"em","attributes":{"style":{"color":"#ef4444 !important","fontWeight":"600 !important","fontStyle":"normal !important"}},"children":["required"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The share-link slug, from the share URL. The link must be a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["live"]}," link."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["message_id"]}]}," string ",{"$$mdtype":"Tag","name":"em","attributes":{"style":{"color":"#ef4444 !important","fontWeight":"600 !important","fontStyle":"normal !important"}},"children":["required"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The message to react to (prefixed ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["msg_"]},"). Must belong to the shared thread."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"body-parameters","__idx":3},"children":["Body Parameters"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["emoji"]}]}," string ",{"$$mdtype":"Tag","name":"em","attributes":{"style":{"color":"#ef4444 !important","fontWeight":"600 !important","fontStyle":"normal !important"}},"children":["required"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The emoji to toggle. Adds the reaction if the caller has not used that emoji on the message, removes it if they have."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"returns","__idx":4},"children":["Returns"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Returns the message's full, updated reaction set plus whether this call added or removed:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["message_id"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["string"]}," — the message the reactions are on."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["reactions"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["array"]}," — the message's current reactions: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{ id, emoji, actor_id, actor_name, created_at }"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["toggled"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["string"]}," — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"added\""]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"removed\""]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"other-operations","__idx":5},"children":["Other Operations"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"list-reactions","__idx":6},"children":["List reactions"]},{"$$mdtype":"Tag","name":"Endpoint","attributes":{"method":"GET","path":"https://api.aitronos.com/v1/shared-threads/{slug}/messages/{message_id}/reactions"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Returns all reactions on the message, oldest-first, as an array of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["{ id, emoji, actor_id, actor_name, created_at }"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"remove-a-specific-reaction","__idx":7},"children":["Remove a specific reaction"]},{"$$mdtype":"Tag","name":"Endpoint","attributes":{"method":"DELETE","path":"https://api.aitronos.com/v1/shared-threads/{slug}/messages/{message_id}/reactions?emoji={emoji}"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Removes the caller's reaction for the given ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["emoji"]}," query parameter. Idempotent — removing an absent reaction is a no-op. Returns the same shape as the toggle (with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["toggled: \"removed\""]},")."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"code-examples","__idx":8},"children":["Code Examples"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"curl","__idx":9},"children":["cURL"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Toggle a 👍\ncurl -X POST \"https://api.aitronos.com/v1/shared-threads/abc123slug/messages/msg_abc/reactions\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"emoji\": \"👍\"}'\n\n# List\ncurl \"https://api.aitronos.com/v1/shared-threads/abc123slug/messages/msg_abc/reactions\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN\"\n\n# Remove a 👍\ncurl -X DELETE \"https://api.aitronos.com/v1/shared-threads/abc123slug/messages/msg_abc/reactions?emoji=%F0%9F%91%8D\" \\\n  -H \"Authorization: Bearer YOUR_TOKEN\"\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"python-sdk","__idx":10},"children":["Python SDK"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"from aitronos import Aitronos\n\nclient = Aitronos(api_key=\"\", token=\"YOUR_TOKEN\")\nresult = client.threads.shared.reactions.toggle(\n    slug=\"abc123slug\", message_id=\"msg_abc\", emoji=\"👍\"\n)\nprint(result.toggled, result.reactions)\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"python-requests","__idx":11},"children":["Python (requests)"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"import requests\n\nresponse = requests.post(\n    \"https://api.aitronos.com/v1/shared-threads/abc123slug/messages/msg_abc/reactions\",\n    headers={\"Authorization\": \"Bearer YOUR_TOKEN\"},\n    json={\"emoji\": \"👍\"},\n)\nprint(response.json()[\"toggled\"])\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"javascript","__idx":12},"children":["JavaScript"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"javascript","header":{"controls":{"copy":{}}},"source":"const response = await fetch(\n  \"https://api.aitronos.com/v1/shared-threads/abc123slug/messages/msg_abc/reactions\",\n  {\n    method: \"POST\",\n    headers: {\n      Authorization: \"Bearer YOUR_TOKEN\",\n      \"Content-Type\": \"application/json\",\n    },\n    body: JSON.stringify({ emoji: \"👍\" }),\n  },\n);\nconst result = await response.json();\nconsole.log(result.toggled, result.reactions);\n","lang":"javascript"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"response-examples","__idx":13},"children":["Response Examples"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"success-200","__idx":14},"children":["Success (200)"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"message_id\": \"msg_abc\",\n  \"reactions\": [\n    {\n      \"id\": \"tmrx_0d27ed63a3f848cea92161d15b67fc69\",\n      \"emoji\": \"👍\",\n      \"actor_id\": \"usr_bc748f25224f4015abb43369d2025487\",\n      \"actor_name\": \"Jordan Rivera\",\n      \"created_at\": \"2026-07-06T11:26:38Z\"\n    }\n  ],\n  \"toggled\": \"added\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"error--not-a-live-link-403","__idx":15},"children":["Error — Not a live link (403)"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INSUFFICIENT_PERMISSIONS\",\n    \"message\": \"You do not have permission to perform this action.\",\n    \"system_message\": \"This share link does not grant live co-working access\",\n    \"type\": \"authorization_error\",\n    \"status\": 403,\n    \"details\": { \"link_id\": \"tslnk_...\", \"access_level\": \"view\" },\n    \"trace_id\": \"...\",\n    \"timestamp\": \"...\"\n  }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"error--link-not-found-or-not-authorized-404","__idx":16},"children":["Error — Link not found or not authorized (404)"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"RESOURCE_NOT_FOUND\",\n    \"message\": \"The requested resource could not be found.\",\n    \"system_message\": \"Share link not found\",\n    \"type\": \"client_error\",\n    \"status\": 404,\n    \"details\": {},\n    \"trace_id\": \"...\",\n    \"timestamp\": \"...\"\n  }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"related-resources","__idx":17},"children":["Related Resources"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api-reference/shared-threads/join-shared-thread"},"children":["Join Shared Thread"]}," — Join the live-shared thread first"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api-reference/shared-threads/get-shared-thread-messages"},"children":["Get Shared Thread Messages"]}," — Read the messages you can react to"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api-reference/shared-threads/shared-thread-compose-state"},"children":["Shared Thread Compose State"]}," — Edit an email compose card as a joiner"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api-reference/shared-threads/shared-thread-tool-approval"},"children":["Shared Thread Tool Approval"]}," — Approve a parked tool as a joiner"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/api-reference/shared-threads/live-shared-thread"},"children":["Live Shared Thread"]}," — The real-time stream reactions fan out on"]}]}]}]},"headings":[{"value":"Shared Thread Reactions","id":"shared-thread-reactions","depth":1},{"value":"Authentication","id":"authentication","depth":2},{"value":"Path Parameters","id":"path-parameters","depth":2},{"value":"Body Parameters","id":"body-parameters","depth":2},{"value":"Returns","id":"returns","depth":2},{"value":"Other Operations","id":"other-operations","depth":2},{"value":"List reactions","id":"list-reactions","depth":3},{"value":"Remove a specific reaction","id":"remove-a-specific-reaction","depth":3},{"value":"Code Examples","id":"code-examples","depth":2},{"value":"cURL","id":"curl","depth":3},{"value":"Python SDK","id":"python-sdk","depth":3},{"value":"Python (requests)","id":"python-requests","depth":3},{"value":"JavaScript","id":"javascript","depth":3},{"value":"Response Examples","id":"response-examples","depth":2},{"value":"Success (200)","id":"success-200","depth":3},{"value":"Error — Not a live link (403)","id":"error--not-a-live-link-403","depth":3},{"value":"Error — Link not found or not authorized (404)","id":"error--link-not-found-or-not-authorized-404","depth":3},{"value":"Related Resources","id":"related-resources","depth":2}],"frontmatter":{"title":"Shared Thread Reactions","seo":{"title":"Shared Thread Reactions"}},"lastModified":"2026-10-26T18:32:31.653Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/api-reference/shared-threads/shared-thread-reactions","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}