Python Version Deploy Documentation
A Python SDK for interacting with the Bloom Growth API, providing easy access to users, meetings, todos, goals, scorecards, issues, and headlines.
✨ New in v0.21.0: Improved internal architecture with reusable mixins and enhanced bulk operation performance!
pip install bloomy-python
from bloomy import Client # Initialize the client with your API key client = Client(api_key="your-api-key-here") # Or use environment variable BG_API_KEY client = Client() # Or configure API key with username and password from bloomy import Configuration config = Configuration() config.configure_api_key("username", "password", store_key=True) client = Client()
import asyncio from bloomy import AsyncClient async def main(): # Use async client for better performance async with AsyncClient(api_key="your-api-key-here") as client: user = await client.user.details() meetings = await client.meeting.list() print(f"Hello {user.name}, you have {len(meetings)} meetings") asyncio.run(main())
# Get current user details user = client.user.details() # Get user with direct reports and positions user = client.user.details(user_id=123, include_all=True) # Search users results = client.user.search("john") # List all users users = client.user.list()
# List meetings meetings = client.meeting.list() # Get meeting details meeting = client.meeting.details(meeting_id=123) # Create a meeting new_meeting = client.meeting.create( title="Weekly Team Meeting", attendees=[456, 789] ) # Delete a meeting client.meeting.delete(meeting_id=123) # Get multiple meetings by ID (batch read) result = client.meeting.get_many([123, 456, 789]) for meeting in result.successful: print(f"{meeting.name} - {meeting.meeting_date}") # Handle any failed retrievals for error in result.failed: print(f"Failed to get meeting: {error.error}")
# List todos for current user todos = client.todo.list() # Create a todo new_todo = client.todo.create( title="Complete project proposal", meeting_id=123, due_date="2024-12-31" ) # Complete a todo client.todo.complete(todo_id=456) # Update a todo client.todo.update( todo_id=456, title="Updated title", due_date="2024-12-25" )
# List goals goals = client.goal.list() # Create a goal new_goal = client.goal.create( title="Increase sales by 20%", meeting_id=123, user_id=456 ) # Update goal status client.goal.update(goal_id=789, status="on") # on, off, or complete # Archive a goal client.goal.archive(goal_id=789)
# Get current week week = client.scorecard.current_week() # List scorecard items scorecards = client.scorecard.list(meeting_id=123) # Update a score client.scorecard.score(measurable_id=456, score=95.5)
# List issues issues = client.issue.list() # Create an issue new_issue = client.issue.create( meeting_id=123, title="Server performance degradation" ) # Solve an issue client.issue.solve(issue_id=456)
# List headlines headlines = client.headline.list(meeting_id=123) # Create a headline new_headline = client.headline.create( meeting_id=123, title="Product launch successful", notes="Exceeded targets by 15%" ) # Update a headline client.headline.update(headline_id=456, title="Updated headline") # Delete a headline client.headline.delete(headline_id=456)
The SDK supports multiple ways to provide your API key:
- Direct initialization: Pass the API key when creating the client
- Environment variable: Set
BG_API_KEYin your environment - Configuration file: Store the API key in
~/.bloomy/config.yaml - Dynamic configuration: Use username/password to fetch and store the API key
# Using configuration file config = Configuration() config.configure_api_key("username", "password", store_key=True)
The SDK raises specific exceptions for different error scenarios:
from bloomy.exceptions import BloomyError, ConfigurationError, AuthenticationError, APIError try: client.user.details() except AuthenticationError: print("Invalid API key") except APIError as e: print(f"API error: {e.message}, Status: {e.status_code}") except BloomyError as e: print(f"General error: {e}")
This SDK uses:
- uv for package management
- ruff for formatting and linting
- pyright for type checking
- pytest for testing
To set up the development environment:
# Install uv curl -LsSf https://astral.sh/uv/install.sh | sh # Install dependencies uv sync --all-extras # Run tests uv run pytest # Format code uv run ruff format . # Run linting uv run ruff check . --fix # Type checking uv run pyright
- Python 3.12+
- httpx
- pyyaml
- pydantic