Skip to content

Conversation

@itsmeadi
Copy link
Contributor

@itsmeadi itsmeadi commented Feb 2, 2026

Summary by CodeRabbit

  • New Features
    • Call recording with configurable recording types and external storage
    • Participant session metrics and paginated session queries
    • Activity restore endpoint
    • Batch channel updates and future-ban querying
    • SIP inbound routing resolution
  • Enhancements
    • Additional controls for notification handling and follow/unfollow/activity operations
    • Responses now include a notification_created flag to indicate notification status
  • Refactor
    • Consolidated/renamed SIP inbound endpoints and removed legacy recording variants

@coderabbitai
Copy link

coderabbitai bot commented Feb 2, 2026

📝 Walkthrough

Walkthrough

Regenerates backend SDKs: adds chat batch channel updates and future-ban queries; expands feeds methods and adds restore_activity; extends models with notification_created; and adds video recording lifecycle, participant-session analytics, and SIP inbound routing changes.

Changes

Cohort / File(s) Summary
Chat API
getstream/chat/async_rest_client.py, getstream/chat/rest_client.py
Added predefined_filter, filter_values, sort_values to query_channels. Added channel_batch_update and query_future_channel_bans endpoints.
Feeds API
getstream/feeds/rest_client.py
Added flags/fields (e.g., create_notification_activity, delete_notification_activity, handle_mention_notifications, visibility_tag, mentioned_user_ids, status, skip_push) across many methods; added restore_activity.
Models
getstream/models/__init__.py
Added optional notification_created: Optional[bool] to many response/event data classes (reactions, comments, activities, related events).
Video API (client & REST)
getstream/video/async_call.py, getstream/video/async_rest_client.py, getstream/video/rest_client.py, getstream/video/call.py, tests/test_video_examples.py
Reworked recording APIs to require recording_type and optional recording_external_storage; added start_recording/stop_recording, participant session metrics (get_call_participant_session_metrics, query_call_participant_sessions); refactored SIP endpoints from /sip/routing_rules & /sip/trunks/sip/inbound_routing_rules & /sip/inbound_trunks; added resolve_sip_inbound.
Tests
tests/test_video_examples.py
Updated tests to pass new recording_type="composite" to recording calls.

Sequence Diagram(s)

sequenceDiagram
    participant Client as Client (SDK user)
    participant CallObj as Call object
    participant REST as Video REST client
    participant API as Video API server
    participant Storage as Recording Storage

    Client->>CallObj: start_recording(recording_type, recording_external_storage?)
    CallObj->>REST: POST /api/v2/video/call/{type}/{id}/recordings/{recording_type}/start {json}
    REST->>API: HTTP request (start recording)
    API->>Storage: allocate/create recording stream (optional external storage)
    API-->>REST: 200 OK {StartRecordingResponse}
    REST-->>CallObj: StreamResponse
    CallObj-->>Client: StartRecordingResponse
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Suggested reviewers

  • vagruchi
  • thesyncim
  • Nash0x7E2

Poem

🐰 I hopped through code with nimble feet,
New endpoints stitched and metrics neat,
Channels batch and bans foreseen,
Recordings start—a streaming scene,
Hooray, the SDK’s complete! 🎉

🚥 Pre-merge checks | ✅ 3 | ❌ 2
❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The PR title '[FEEDS-1149] sdk update' is extremely vague and generic, using non-descriptive language like 'sdk update' that fails to convey specific changes made. Provide a more descriptive title that summarizes the main changes, such as 'Add channel batch operations, recording endpoints, and feed API enhancements' to clearly communicate the scope.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Linked Issues check ✅ Passed The linked issue FEEDS-1149 requests SDK regeneration and postponed rollout, which are operational tasks, not coding requirements. The actual code changes (new channel/recording APIs, model updates) appear to be implementation of backend changes that triggered this regeneration request.
Out of Scope Changes check ✅ Passed The PR contains extensive changes across chat, feeds, and video modules including new APIs, parameter additions, and model updates. These appear to be code-generated SDK updates reflecting backend API changes rather than manual feature development.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch FEEDS-1149

Important

Action Needed: IP Allowlist Update

If your organization protects your Git platform with IP whitelisting, please add the new CodeRabbit IP address to your allowlist:

  • 136.113.208.247/32 (new)
  • 34.170.211.100/32
  • 35.222.179.152/32

Reviews will stop working after February 8, 2026 if the new IP is not added to your allowlist.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In `@getstream/video/async_rest_client.py`:
- Around line 617-639: The get_call_participant_session_metrics function
currently builds path_params without the required call identifiers referenced in
the path string (the "{type}" and "{id}" placeholders), causing unresolved
placeholders or TypeError; update the method signature of
get_call_participant_session_metrics to accept the call type and id (e.g., add
parameters for type and id) and include those keys in the path_params dict so
the path
"/api/v2/video/call/{type}/{id}/session/{session}/participant/{user}/{user_session}/details/track"
is fully populated before calling self.get; ensure any callers/wrappers that
pass type and id still match the new signature.

In `@getstream/video/rest_client.py`:
- Around line 613-635: The get_call_participant_session_metrics method is
missing the call identifiers used in the URL template ({type} and {id}); update
the function signature to accept type and id (e.g., add parameters named type
and id) and include them in the path_params dict so path_params = {"type": type,
"id": id, "session": session, "user": user, "user_session": user_session};
ensure the parameter names exactly match the placeholders in the URL and update
any callers if necessary.

Comment on lines +617 to +639
@telemetry.operation_name(
"getstream.api.video.get_call_participant_session_metrics"
)
async def get_call_participant_session_metrics(
self,
session: str,
user: str,
user_session: str,
since: Optional[datetime] = None,
until: Optional[datetime] = None,
) -> StreamResponse[GetCallParticipantSessionMetricsResponse]:
query_params = build_query_param(since=since, until=until)
path_params = {
"session": session,
"user": user,
"user_session": user_session,
}
return await self.get(
"/api/v2/video/call/{type}/{id}/session/{session}/participant/{user}/{user_session}/details/track",
GetCallParticipantSessionMetricsResponse,
query_params=query_params,
path_params=path_params,
)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Missing call identifiers in async participant session metrics endpoint.

The path includes {type} and {id}, but the method signature and path_params omit them. Call wrappers pass type/id, so this will raise TypeError and/or leave unresolved placeholders.

🛠️ Suggested fix
-    async def get_call_participant_session_metrics(
-        self,
-        session: str,
-        user: str,
-        user_session: str,
-        since: Optional[datetime] = None,
-        until: Optional[datetime] = None,
-    ) -> StreamResponse[GetCallParticipantSessionMetricsResponse]:
+    async def get_call_participant_session_metrics(
+        self,
+        type: str,
+        id: str,
+        session: str,
+        user: str,
+        user_session: str,
+        since: Optional[datetime] = None,
+        until: Optional[datetime] = None,
+    ) -> StreamResponse[GetCallParticipantSessionMetricsResponse]:
         query_params = build_query_param(since=since, until=until)
         path_params = {
+            "type": type,
+            "id": id,
             "session": session,
             "user": user,
             "user_session": user_session,
         }
🤖 Prompt for AI Agents
In `@getstream/video/async_rest_client.py` around lines 617 - 639, The
get_call_participant_session_metrics function currently builds path_params
without the required call identifiers referenced in the path string (the
"{type}" and "{id}" placeholders), causing unresolved placeholders or TypeError;
update the method signature of get_call_participant_session_metrics to accept
the call type and id (e.g., add parameters for type and id) and include those
keys in the path_params dict so the path
"/api/v2/video/call/{type}/{id}/session/{session}/participant/{user}/{user_session}/details/track"
is fully populated before calling self.get; ensure any callers/wrappers that
pass type and id still match the new signature.

Comment on lines +613 to +635
@telemetry.operation_name(
"getstream.api.video.get_call_participant_session_metrics"
)
def get_call_participant_session_metrics(
self,
session: str,
user: str,
user_session: str,
since: Optional[datetime] = None,
until: Optional[datetime] = None,
) -> StreamResponse[GetCallParticipantSessionMetricsResponse]:
query_params = build_query_param(since=since, until=until)
path_params = {
"session": session,
"user": user,
"user_session": user_session,
}
return self.get(
"/api/v2/video/call/{type}/{id}/session/{session}/participant/{user}/{user_session}/details/track",
GetCallParticipantSessionMetricsResponse,
query_params=query_params,
path_params=path_params,
)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Missing call identifiers in participant session metrics endpoint.

The path contains {type} and {id}, but the method signature and path_params omit them. Call wrappers pass type/id, so this will raise TypeError and/or leave unresolved placeholders in the URL.

🛠️ Suggested fix
-    def get_call_participant_session_metrics(
-        self,
-        session: str,
-        user: str,
-        user_session: str,
-        since: Optional[datetime] = None,
-        until: Optional[datetime] = None,
-    ) -> StreamResponse[GetCallParticipantSessionMetricsResponse]:
+    def get_call_participant_session_metrics(
+        self,
+        type: str,
+        id: str,
+        session: str,
+        user: str,
+        user_session: str,
+        since: Optional[datetime] = None,
+        until: Optional[datetime] = None,
+    ) -> StreamResponse[GetCallParticipantSessionMetricsResponse]:
         query_params = build_query_param(since=since, until=until)
         path_params = {
+            "type": type,
+            "id": id,
             "session": session,
             "user": user,
             "user_session": user_session,
         }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
@telemetry.operation_name(
"getstream.api.video.get_call_participant_session_metrics"
)
def get_call_participant_session_metrics(
self,
session: str,
user: str,
user_session: str,
since: Optional[datetime] = None,
until: Optional[datetime] = None,
) -> StreamResponse[GetCallParticipantSessionMetricsResponse]:
query_params = build_query_param(since=since, until=until)
path_params = {
"session": session,
"user": user,
"user_session": user_session,
}
return self.get(
"/api/v2/video/call/{type}/{id}/session/{session}/participant/{user}/{user_session}/details/track",
GetCallParticipantSessionMetricsResponse,
query_params=query_params,
path_params=path_params,
)
`@telemetry.operation_name`(
"getstream.api.video.get_call_participant_session_metrics"
)
def get_call_participant_session_metrics(
self,
type: str,
id: str,
session: str,
user: str,
user_session: str,
since: Optional[datetime] = None,
until: Optional[datetime] = None,
) -> StreamResponse[GetCallParticipantSessionMetricsResponse]:
query_params = build_query_param(since=since, until=until)
path_params = {
"type": type,
"id": id,
"session": session,
"user": user,
"user_session": user_session,
}
return self.get(
"/api/v2/video/call/{type}/{id}/session/{session}/participant/{user}/{user_session}/details/track",
GetCallParticipantSessionMetricsResponse,
query_params=query_params,
path_params=path_params,
)
🤖 Prompt for AI Agents
In `@getstream/video/rest_client.py` around lines 613 - 635, The
get_call_participant_session_metrics method is missing the call identifiers used
in the URL template ({type} and {id}); update the function signature to accept
type and id (e.g., add parameters named type and id) and include them in the
path_params dict so path_params = {"type": type, "id": id, "session": session,
"user": user, "user_session": user_session}; ensure the parameter names exactly
match the placeholders in the URL and update any callers if necessary.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants