@@ -124,13 +124,35 @@ def delete(self, goal_id: int) -> None:
124124 response = self ._client .delete (f"rocks/{ goal_id } " )
125125 response .raise_for_status ()
126126
127+ def details (self , goal_id : int ) -> GoalInfo :
128+ """Get details for a specific goal.
129+
130+ Args:
131+ goal_id: The ID of the goal
132+
133+ Returns:
134+ A GoalInfo model instance containing the goal details
135+
136+ Example:
137+ ```python
138+ client.goal.details(1)
139+ # Returns: GoalInfo(id=1, title='Complete project', ...)
140+ ```
141+
142+ """
143+ response = self ._client .get (f"rocks/{ goal_id } " , params = {"include_origin" : True })
144+ response .raise_for_status ()
145+ data = response .json ()
146+
147+ return self ._transform_goal_details (data )
148+
127149 def update (
128150 self ,
129151 goal_id : int ,
130152 title : str | None = None ,
131153 accountable_user : int | None = None ,
132154 status : GoalStatus | str | None = None ,
133- ) -> None :
155+ ) -> GoalInfo :
134156 """Update a goal.
135157
136158 Args:
@@ -143,6 +165,9 @@ def update(
143165 GoalStatus.AT_RISK, or GoalStatus.COMPLETE for type safety.
144166 Invalid values will raise ValueError via the update payload builder.
145167
168+ Returns:
169+ A GoalInfo model instance containing the updated goal details
170+
146171 Example:
147172 ```python
148173 from bloomy import GoalStatus
@@ -160,6 +185,8 @@ def update(
160185 response = self ._client .put (f"rocks/{ goal_id } " , json = payload )
161186 response .raise_for_status ()
162187
188+ return self .details (goal_id )
189+
163190 def archive (self , goal_id : int ) -> None :
164191 """Archive a rock with the specified goal ID.
165192
0 commit comments