{
  "opencollection": "1.0.0",
  "info": {
    "name": "Opply Activity Feed Tasks API",
    "version": "0.0.0"
  },
  "items": [
    {
      "info": {
        "name": "Tasks",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "List a task's chat messages",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "{{baseUrl}}/api/v1/chat/",
            "params": [
              {
                "name": "page",
                "value": "",
                "type": "query",
                "description": "A page number within the paginated result set."
              },
              {
                "name": "task_uuid",
                "value": "",
                "type": "query",
                "description": "UUID of the task whose chat to list."
              },
              {
                "name": "thread",
                "value": "",
                "type": "query",
                "description": "Which of the task's chat threads to target: `main` (default — the task conversation) or `plan` (the plan-discussion thread on the Plan tab)."
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Comments on tasks (channel-neutral ``Message`` rows)."
        },
        {
          "info": {
            "name": "Post a chat message",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "{{baseUrl}}/api/v1/chat/",
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Comments on tasks (channel-neutral ``Message`` rows)."
        },
        {
          "info": {
            "name": "Add or remove an emoji reaction on a chat message",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "{{baseUrl}}/api/v1/chat/:uuid/react/",
            "params": [
              {
                "name": "emoji",
                "value": "",
                "type": "query",
                "description": "The reaction emoji (fixed palette)."
              },
              {
                "name": "uuid",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "POST adds the caller's reaction (idempotent); DELETE removes it. The emoji (a query param) must be one of the fixed MessageReactionEmoji palette. Returns the message with its updated aggregated reactions."
        },
        {
          "info": {
            "name": "Add or remove an emoji reaction on a chat message",
            "type": "http"
          },
          "http": {
            "method": "DELETE",
            "url": "{{baseUrl}}/api/v1/chat/:uuid/react/",
            "params": [
              {
                "name": "emoji",
                "value": "",
                "type": "query",
                "description": "The reaction emoji (fixed palette)."
              },
              {
                "name": "uuid",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "POST adds the caller's reaction (idempotent); DELETE removes it. The emoji (a query param) must be one of the fixed MessageReactionEmoji palette. Returns the message with its updated aggregated reactions."
        },
        {
          "info": {
            "name": "Mark a task's chat read",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "{{baseUrl}}/api/v1/chat/mark-read/",
            "params": [
              {
                "name": "task_uuid",
                "value": "",
                "type": "query",
                "description": "UUID of the task whose chat to mark read."
              },
              {
                "name": "thread",
                "value": "",
                "type": "query",
                "description": "Which of the task's chat threads to target: `main` (default — the task conversation) or `plan` (the plan-discussion thread on the Plan tab)."
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Advance the caller's read cursor on a task's chat to now.\n\nAnyone who can see the task (and thus its chat) may mark it read for\nthemselves — read-state is per-user and innocuous. Resolves the task\ncaller-scoped, so an out-of-scope uuid is a 404. ``thread`` picks\nwhich conversation's cursor advances (main default | plan)."
        },
        {
          "info": {
            "name": "Get a recurring-task series",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "{{baseUrl}}/api/v1/task-recurrences/:uuid/",
            "params": [
              {
                "name": "uuid",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Manage an existing recurring-task series (the template's recurrence).\n\nCreation happens implicitly when a task is created with a ``recurrence``\nblock (see ``TaskSerializer``); this surface is for reading the series,\nediting its schedule / default assignee for *future* occurrences, and\npausing / resuming it. Hard-scoped to the caller's company via the\nqueryset — a leaked UUID can't reach another tenant's series."
        },
        {
          "info": {
            "name": "Partially update a recurring-task series",
            "type": "http"
          },
          "http": {
            "method": "PATCH",
            "url": "{{baseUrl}}/api/v1/task-recurrences/:uuid/",
            "params": [
              {
                "name": "uuid",
                "value": "",
                "type": "path"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Manage an existing recurring-task series (the template's recurrence).\n\nCreation happens implicitly when a task is created with a ``recurrence``\nblock (see ``TaskSerializer``); this surface is for reading the series,\nediting its schedule / default assignee for *future* occurrences, and\npausing / resuming it. Hard-scoped to the caller's company via the\nqueryset — a leaked UUID can't reach another tenant's series."
        },
        {
          "info": {
            "name": "Pause a recurring-task series (Turn off repeat)",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "{{baseUrl}}/api/v1/task-recurrences/:uuid/disable/",
            "params": [
              {
                "name": "uuid",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Manage an existing recurring-task series (the template's recurrence).\n\nCreation happens implicitly when a task is created with a ``recurrence``\nblock (see ``TaskSerializer``); this surface is for reading the series,\nediting its schedule / default assignee for *future* occurrences, and\npausing / resuming it. Hard-scoped to the caller's company via the\nqueryset — a leaked UUID can't reach another tenant's series."
        },
        {
          "info": {
            "name": "Resume a recurring-task series",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "{{baseUrl}}/api/v1/task-recurrences/:uuid/enable/",
            "params": [
              {
                "name": "uuid",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Manage an existing recurring-task series (the template's recurrence).\n\nCreation happens implicitly when a task is created with a ``recurrence``\nblock (see ``TaskSerializer``); this surface is for reading the series,\nediting its schedule / default assignee for *future* occurrences, and\npausing / resuming it. Hard-scoped to the caller's company via the\nqueryset — a leaked UUID can't reach another tenant's series."
        },
        {
          "info": {
            "name": "List tasks",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "{{baseUrl}}/api/v1/tasks/",
            "params": [
              {
                "name": "page",
                "value": "",
                "type": "query",
                "description": "A page number within the paginated result set."
              },
              {
                "name": "page_size",
                "value": "",
                "type": "query",
                "description": "Number of results to return per page."
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "ViewSet for managing tasks.\n\nTasks can be attached to entities (companies) or standalone.\nMoR users can only see tasks for companies they manage."
        },
        {
          "info": {
            "name": "Create a task",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "{{baseUrl}}/api/v1/tasks/",
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "ViewSet for managing tasks.\n\nTasks can be attached to entities (companies) or standalone.\nMoR users can only see tasks for companies they manage."
        },
        {
          "info": {
            "name": "Get a task",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "{{baseUrl}}/api/v1/tasks/:uuid/",
            "params": [
              {
                "name": "uuid",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "ViewSet for managing tasks.\n\nTasks can be attached to entities (companies) or standalone.\nMoR users can only see tasks for companies they manage."
        },
        {
          "info": {
            "name": "Update a task",
            "type": "http"
          },
          "http": {
            "method": "PUT",
            "url": "{{baseUrl}}/api/v1/tasks/:uuid/",
            "params": [
              {
                "name": "uuid",
                "value": "",
                "type": "path"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "ViewSet for managing tasks.\n\nTasks can be attached to entities (companies) or standalone.\nMoR users can only see tasks for companies they manage."
        },
        {
          "info": {
            "name": "Partially update a task",
            "type": "http"
          },
          "http": {
            "method": "PATCH",
            "url": "{{baseUrl}}/api/v1/tasks/:uuid/",
            "params": [
              {
                "name": "uuid",
                "value": "",
                "type": "path"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "ViewSet for managing tasks.\n\nTasks can be attached to entities (companies) or standalone.\nMoR users can only see tasks for companies they manage."
        },
        {
          "info": {
            "name": "Delete a task",
            "type": "http"
          },
          "http": {
            "method": "DELETE",
            "url": "{{baseUrl}}/api/v1/tasks/:uuid/",
            "params": [
              {
                "name": "uuid",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "ViewSet for managing tasks.\n\nTasks can be attached to entities (companies) or standalone.\nMoR users can only see tasks for companies they manage."
        },
        {
          "info": {
            "name": "List task attachments",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "{{baseUrl}}/api/v1/tasks/:uuid/attachments/",
            "params": [
              {
                "name": "uuid",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "ViewSet for managing tasks.\n\nTasks can be attached to entities (companies) or standalone.\nMoR users can only see tasks for companies they manage."
        },
        {
          "info": {
            "name": "List task attachments",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "{{baseUrl}}/api/v1/tasks/:uuid/attachments/",
            "params": [
              {
                "name": "uuid",
                "value": "",
                "type": "path"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "ViewSet for managing tasks.\n\nTasks can be attached to entities (companies) or standalone.\nMoR users can only see tasks for companies they manage."
        },
        {
          "info": {
            "name": "Delete a task attachment",
            "type": "http"
          },
          "http": {
            "method": "DELETE",
            "url": "{{baseUrl}}/api/v1/tasks/:uuid/attachments/:attachment_uuid/",
            "params": [
              {
                "name": "attachment_uuid",
                "value": "",
                "type": "path"
              },
              {
                "name": "uuid",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "ViewSet for managing tasks.\n\nTasks can be attached to entities (companies) or standalone.\nMoR users can only see tasks for companies they manage."
        },
        {
          "info": {
            "name": "Approve the pending agent plan (version-pinned)",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "{{baseUrl}}/api/v1/tasks/:uuid/plan/approve/",
            "params": [
              {
                "name": "uuid",
                "value": "",
                "type": "path"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "ViewSet for managing tasks.\n\nTasks can be attached to entities (companies) or standalone.\nMoR users can only see tasks for companies they manage."
        },
        {
          "info": {
            "name": "Reject the pending agent plan (task returns to humans, agent unassigned)",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "{{baseUrl}}/api/v1/tasks/:uuid/plan/reject/",
            "params": [
              {
                "name": "uuid",
                "value": "",
                "type": "path"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "ViewSet for managing tasks.\n\nTasks can be attached to entities (companies) or standalone.\nMoR users can only see tasks for companies they manage."
        },
        {
          "info": {
            "name": "Set, update, or clear a task's recurrence",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "{{baseUrl}}/api/v1/tasks/:uuid/repeat/",
            "params": [
              {
                "name": "uuid",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Make an existing task recurring, change its rule, or stop it repeating.\n\n- ``POST`` with a recurrence config: if the task already belongs to a\n  series, update that series' rule; otherwise promote it in place (mint a\n  template, make this task occurrence #1).\n- ``DELETE``: \"Does not repeat\" — stop the series (occurrences survive)."
        },
        {
          "info": {
            "name": "Set, update, or clear a task's recurrence",
            "type": "http"
          },
          "http": {
            "method": "DELETE",
            "url": "{{baseUrl}}/api/v1/tasks/:uuid/repeat/",
            "params": [
              {
                "name": "uuid",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Make an existing task recurring, change its rule, or stop it repeating.\n\n- ``POST`` with a recurrence config: if the task already belongs to a\n  series, update that series' rule; otherwise promote it in place (mint a\n  template, make this task occurrence #1).\n- ``DELETE``: \"Does not repeat\" — stop the series (occurrences survive)."
        },
        {
          "info": {
            "name": "Route a MoR-routed task to a worker (by role)",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "{{baseUrl}}/api/v1/tasks/:uuid/route/",
            "params": [
              {
                "name": "uuid",
                "value": "",
                "type": "path"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Reassign a task routed to 'Opply' to the resolved worker for the given role (account_manager / mor_agent / buyer_agent / return_to_buyer). The backend resolves the concrete user; agent targets are dispatched via a fresh run. Router-agent (or MoR-side current assignee) only."
        },
        {
          "info": {
            "name": "List the routable targets for a MoR-routed task",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "{{baseUrl}}/api/v1/tasks/:uuid/route-targets/",
            "params": [
              {
                "name": "uuid",
                "value": "",
                "type": "path"
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Which account manager / MoR agents / buyer agents this routed task can be routed to. Router-agent (or MoR-side current assignee) only."
        },
        {
          "info": {
            "name": "List tasks assigned to current user",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "{{baseUrl}}/api/v1/tasks/me/",
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "List tasks assigned to the current user.\n\nReturns tasks from two sources:\n1. Task records (activities app) - where assignee is current user\n2. OrderActivity records (app_orders) - where task_assignee is current user\n\nBoth are merged into a unified response format."
        },
        {
          "info": {
            "name": "Search linkable related items",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "{{baseUrl}}/api/v1/tasks/related-search/",
            "params": [
              {
                "name": "exclude_task",
                "value": "",
                "type": "query",
                "description": "UUID of the task currently being edited, excluded from task results so it can't be related to itself."
              },
              {
                "name": "search",
                "value": "",
                "type": "query",
                "description": "Search text used to match linkable related items (orders, suppliers, contracts, ingredients, tasks). Results are empty without it."
              }
            ],
            "auth": {
              "type": "apikey",
              "key": "Authorization",
              "value": "{{Authorization}}",
              "placement": "header"
            }
          },
          "docs": "Unified \"Related to\" search across the caller's orders, suppliers,\ncontracts, ingredients and tasks. Returns a flat list grouped client-side\nby ``type``; empty without a `search` query (except for MoR callers)."
        }
      ]
    }
  ],
  "bundled": true
}