Skip to content

Issue Operations (v2)

GraphQL operations for managing issues. See the v2 guide for how client.v2 relates to client.v1/client.issue, and for the description ("notes") and archive/restore behavior shared across v2 entities.

API Reference

IssueOperations

IssueOperations(client: Any, graphql_url: str, user_id_cache: UserIdCache | None = None)

Bases: GraphQLOperations, IssueOperationsMixin

Class to handle v2 (GraphQL) operations related to issues.

Methods:

  • details –

    Get details for an issue.

  • list –

    List issues for a meeting.

  • create –

    Create a new issue.

  • update –

    Update an existing issue.

  • solve –

    Mark an issue as solved.

  • reopen –

    Reopen a solved issue.

  • archive –

    Archive an issue.

  • restore –

    Restore an archived issue.

Methods:

details
details(issue_id: int) -> Issue

Get details for an issue.

Parameters:

  • issue_id (int) –

    The ID of the issue.

Returns:

  • Issue –

    An Issue model instance.

Example
client.v2.issue.details(123)
# Returns: Issue(id=123, title='Issue Title', ...)
list
list(meeting_id: int, *, long_term: bool = False, include_solved: bool = False, include_archived: bool = False) -> list[Issue]

List issues for a meeting.

Parameters:

  • meeting_id (int) –

    The ID of the meeting.

  • long_term (bool, default: False ) –

    If True, list long-term (department plan) issues instead of short-term ones. include_solved and include_archived have no effect in this mode.

  • include_solved (bool, default: False ) –

    If True, also include recently solved issues.

  • include_archived (bool, default: False ) –

    If True, also include archived issues.

Returns:

  • list[Issue] –

    A list of Issue model instances, ordered by creation date.

Example
client.v2.issue.list(349524)
# Returns: [Issue(id=1, title='Issue 1', ...), ...]
create
create(meeting_id: int, title: str, user_id: int | None = None, notes: str | None = None, long_term: bool = False) -> Issue

Create a new issue.

Parameters:

  • meeting_id (int) –

    The ID of the meeting to create the issue in. For L10 meetings this doubles as the recurrence id CreateIssue needs.

  • title (str) –

    The title of the issue.

  • user_id (int | None, default: None ) –

    The ID of the issue owner (defaults to the current user).

  • notes (str | None, default: None ) –

    Description text for the issue.

  • long_term (bool, default: False ) –

    Whether to create it directly as a long-term (department plan) issue.

Returns:

  • Issue –

    The newly created Issue.

Example
client.v2.issue.create(349524, "New Issue", notes="Details")
# Returns: Issue(id=456, title='New Issue', ...)
update
update(issue_id: int, *, title: str | None = None, user_id: int | None = None, notes: str | None = None, long_term: bool | None = None, meeting_id: int | None = None) -> Issue

Update an existing issue.

Parameters:

  • issue_id (int) –

    The ID of the issue to update.

  • title (str | None, default: None ) –

    New title for the issue.

  • user_id (int | None, default: None ) –

    New owner for the issue.

  • notes (str | None, default: None ) –

    New description text for the issue.

  • long_term (bool | None, default: None ) –

    Move the issue to/from the long-term (department plan) list.

  • meeting_id (int | None, default: None ) –

    Move the issue to a different meeting.

Returns:

  • Issue –

    The updated Issue.

Raises:

  • ValueError –

    If no update fields are provided.

Example
client.v2.issue.update(123, title="New Title")
# Returns: Issue(id=123, title='New Title', ...)
solve
solve(issue_id: int) -> Issue

Mark an issue as solved.

Note

Verified live: this has no effect on an already-archived issue (including a long-term one) — completedTimestamp is updated but completed stays False. Solve issues before archiving them.

Parameters:

  • issue_id (int) –

    The ID of the issue to solve.

Returns:

  • Issue –

    The updated Issue.

reopen
reopen(issue_id: int) -> Issue

Reopen a solved issue.

Parameters:

  • issue_id (int) –

    The ID of the issue to reopen.

Returns:

  • Issue –

    The updated Issue.

archive
archive(issue_id: int) -> Issue

Archive an issue.

Parameters:

  • issue_id (int) –

    The ID of the issue to archive.

Returns:

  • Issue –

    The updated Issue.

restore
restore(issue_id: int) -> Issue

Restore an archived issue.

An archived long-term issue is restored to the short-term list, because archiving it removed it from the long-term list.

Parameters:

  • issue_id (int) –

    The ID of the issue to restore.

Returns:

  • Issue –

    The updated Issue.

Async Version

The async version AsyncIssueOperations provides the same methods as above, but with async/await support:

AsyncIssueOperations

AsyncIssueOperations(client: Any, graphql_url: str, user_id_cache: UserIdCache | None = None)

Async class to handle v2 (GraphQL) operations related to issues.

Async Usage

All methods have the same parameters and return types as their sync counterparts. Simply add await before each method call.

Usage Examples

from bloomy import Client

with Client(api_key="your-api-key") as client:
    # Create a new issue
    issue = client.v2.issue.create(
        meeting_id=123,
        title="Server performance degradation",
        notes="Response times increased by 50% during peak hours",
    )

    # Get issue details
    details = client.v2.issue.details(issue.id)
    print(f"Owner: {details.owner.full_name if details.owner else 'Unassigned'}")

    # List short-term issues for a meeting
    meeting_issues = client.v2.issue.list(meeting_id=123)

    # Include recently solved and archived issues too
    all_issues = client.v2.issue.list(
        meeting_id=123, include_solved=True, include_archived=True
    )

    # List long-term (department plan) issues instead
    long_term_issues = client.v2.issue.list(meeting_id=123, long_term=True)

    # Update an issue
    updated = client.v2.issue.update(issue.id, title="Updated title")

    # Solve, then reopen
    solved = client.v2.issue.solve(issue.id)
    reopened = client.v2.issue.reopen(issue.id)

    # Archive, then restore
    client.v2.issue.archive(issue.id)
    client.v2.issue.restore(issue.id)
import asyncio
from bloomy import AsyncClient

async def main():
    async with AsyncClient(api_key="your-api-key") as client:
        # Create a new issue
        issue = await client.v2.issue.create(
            meeting_id=123,
            title="Server performance degradation",
            notes="Response times increased by 50% during peak hours",
        )

        # Get issue details
        details = await client.v2.issue.details(issue.id)

        # List short-term issues for a meeting
        meeting_issues = await client.v2.issue.list(meeting_id=123)

        # Update an issue
        updated = await client.v2.issue.update(issue.id, title="Updated title")

        # Solve, then reopen
        solved = await client.v2.issue.solve(issue.id)
        reopened = await client.v2.issue.reopen(issue.id)

asyncio.run(main())

Available Methods

Method Description Parameters Returns
details() Get an issue issue_id Issue
list() List issues for a meeting meeting_id, long_term, include_solved, include_archived list[Issue]
create() Create an issue meeting_id, title, user_id, notes, long_term Issue
update() Update an issue issue_id, title, user_id, notes, long_term, meeting_id Issue
solve() Mark an issue as solved issue_id Issue
reopen() Reopen a solved issue issue_id Issue
archive() Archive an issue issue_id Issue
restore() Restore an archived (short-term) issue issue_id Issue

Long-term issues

Setting long_term=True on create() or update() moves an issue to the long-term (department plan) list, and list(long_term=True) returns that list. include_solved and include_archived have no effect in that mode. The API stores long-term issues with an archived flag, but the SDK reports archived=False for them because the web app shows them on the Long-Term tab. archive() removes a long-term issue from that list, and restore() brings it back to the short-term list. Use update(issue_id, long_term=False) to move an issue back to short term without archiving it.

Update requirements

At least one field must be provided to update(), or it raises ValueError.