> ## Documentation Index
> Fetch the complete documentation index at: https://docs.qobra.co/llms.txt
> Use this file to discover all available pages before exploring further.

# update_request

> Change an existing request's title, status, assignee, topic, members or linked statements, and close or reopen it.

Change an existing request: its title, status, assignee, topic, members or
linked statements.

Pass only what changes: an omitted argument leaves that part as it is, and a
call that changes nothing writes nothing. `member_ids` and `statements` are
whole sets, not additions — call get\_request first and send back everything to
keep, or what is missing from your list is removed. A statement the request
already links, sent back with the same record, is kept as it is.

A closed request can be edited only in a call that reopens it (`status` open); a
call can also make its changes and close the request in one go. The assignee and
the topic can be changed here but not removed. Removing yourself from
`member_ids` is allowed, and you then lose the request unless your role reaches
it another way.

Available only where the Qobra write tools beta is enabled. Every write is
recorded in the audit trail as the `Qobra MCP` agent.

## Example

To add a member and close the request in one call, read the request with
[`get_request`](/mcp_documentation/tools/get_request) first, then send back
every member and statement to keep alongside the new one:

```json theme={null}
{
  "request_id": "6650f1c2a8b4e1d2c3f4a5b6",
  "status": "closed",
  "member_ids": ["6650f1c2a8b4e1d2c3f4a001", "6650f1c2a8b4e1d2c3f4a002"],
  "statements": [
    { "user_id": "jane.doe@example.com", "period": "2026-03" }
  ]
}
```

Omit `member_ids` and `statements` entirely when they don't change.

## Parameters

<Accordion title="Body" defaultOpen>
  <ParamField body="request_id" type="string" required>
    Id of the request to change — the id list\_requests or create\_request
    returns.
  </ParamField>

  <ParamField body="name" type="string">
    New title of the request. Omit to keep it.
  </ParamField>

  <ParamField body="status" type="string">
    open to reopen the request, closed to close it as resolved. Omit to keep it.
    One of: `open`, `closed`.
  </ParamField>

  <ParamField body="assignee_id" type="string">
    Id of the person to hand the request to — the id list\_users returns. They
    become a member and are notified it is theirs. Omit to keep the assignee.
  </ParamField>

  <ParamField body="request_topic_id" type="string">
    Id of the topic to file the request under — one of `requests.topics` from
    get\_company\_settings. Omit to keep it.
  </ParamField>

  <ParamField body="member_ids" type="string[]">
    The request's **whole** membership — the ids list\_users returns. Anyone left
    out is removed, anyone new is notified they were added, and the assignee
    stays a member whatever the list. Omit to leave the members as they are.
  </ParamField>

  <ParamField body="statements" type="object[]">
    The **whole** set of statements the request is about — one user in one month
    each, optionally narrowed to one of its records. A statement left out is
    unlinked, and an empty list unlinks them all. Omit to leave them as they
    are.

    <Expandable title="object properties">
      <ParamField body="user_id" type="string" required>
        Id or exact email of the user whose statement it is.
      </ParamField>

      <ParamField body="period" type="string" required>
        Month of the statement, as YYYY-MM (e.g. '2026-03').
      </ParamField>

      <ParamField body="record" type="object">
        The one record of this statement the request is about — a deal, most
        often. Omit to link the statement as a whole.

        <Expandable title="object properties">
          <ParamField body="scope_id" type="string" required>
            Id of the scope the record was frozen into — the `id` of one of
            get\_statement\_compensation's scopes.
          </ParamField>

          <ParamField body="record_id" type="string" required>
            Id of the record — the `record_id` list\_statement\_records returns
            for that scope.
          </ParamField>
        </Expandable>
      </ParamField>
    </Expandable>
  </ParamField>
</Accordion>

## Response

<Accordion title="Body" defaultOpen>
  <ResponseField name="request" type="object">
    The request as it now stands — the same row list\_requests returns, unchanged
    when the call changed nothing.

    <Expandable title="object properties">
      <ResponseField name="id" type="string" />

      <ResponseField name="resource_url" type="string">
        Deep link to open this request in the Qobra web app.
      </ResponseField>

      <ResponseField name="reference" type="string">
        The #-style reference shown in the UI.
      </ResponseField>

      <ResponseField name="name" type="string" />

      <ResponseField name="created_at" type="string" />

      <ResponseField name="last_modified_at" type="string" />

      <ResponseField name="topic" type="object">
        Admin-configured category used to classify the request; null if none.

        <Expandable title="object properties">
          <ResponseField name="id" type="string" />

          <ResponseField name="name" type="string" />
        </Expandable>
      </ResponseField>

      <ResponseField name="status" type="string">
        open (awaiting handling) or closed (resolved). One of: `open`, `closed`.
      </ResponseField>

      <ResponseField name="creator" type="object">
        <Expandable title="object properties">
          <ResponseField name="id" type="string" />

          <ResponseField name="email" type="string" />

          <ResponseField name="name" type="string" />
        </Expandable>
      </ResponseField>

      <ResponseField name="assignee" type="object">
        <Expandable title="object properties">
          <ResponseField name="id" type="string" />

          <ResponseField name="email" type="string" />

          <ResponseField name="name" type="string" />
        </Expandable>
      </ResponseField>

      <ResponseField name="resolver" type="object">
        <Expandable title="object properties">
          <ResponseField name="id" type="string" />

          <ResponseField name="email" type="string" />

          <ResponseField name="name" type="string" />
        </Expandable>
      </ResponseField>

      <ResponseField name="resolved_at" type="string" />

      <ResponseField name="members" type="object[]">
        <Expandable title="object properties">
          <ResponseField name="id" type="string" />

          <ResponseField name="email" type="string" />

          <ResponseField name="name" type="string" />
        </Expandable>
      </ResponseField>

      <ResponseField name="linked_statements" type="object[]">
        <Expandable title="object properties">
          <ResponseField name="user" type="object">
            <Expandable title="object properties">
              <ResponseField name="id" type="string" />

              <ResponseField name="email" type="string" />

              <ResponseField name="name" type="string" />
            </Expandable>
          </ResponseField>

          <ResponseField name="period" type="string" />

          <ResponseField name="record" type="object">
            The linked deal/record when the statement is record-based; null
            otherwise.

            <Expandable title="object properties">
              <ResponseField name="id" type="string" />

              <ResponseField name="name" type="string" />
            </Expandable>
          </ResponseField>
        </Expandable>
      </ResponseField>
    </Expandable>
  </ResponseField>
</Accordion>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.